From 437ee3c2d21e179be26fbafb6d2e72536fd17b6d Mon Sep 17 00:00:00 2001 From: whycq <913841844@qq.com> Date: 星期六, 14 九月 2024 16:04:03 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/task/OverYearLogScheduler.java | 2 src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java | 28 ++++++++++++- src/main/java/com/zy/asrs/task/AutoMoveScheduler.java | 2 src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java | 1 src/main/webapp/static/js/agvWrkMast/wrkMast.js | 3 + src/main/java/com/zy/asrs/controller/OrderDetlController.java | 4 +- src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java | 14 +++--- src/main/java/com/zy/asrs/task/PlcLogScheduler.java | 2 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | 9 ++++ src/main/webapp/static/js/agvWrkMastLog/wrkMastLog.js | 2 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 2 + src/main/java/com/zy/asrs/task/WorkLogScheduler.java | 2 src/main/java/com/zy/asrs/task/AutoMoveCreateExecuteScheduler.java | 1 src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java | 1 src/main/java/com/zy/asrs/task/NotifyLogScheduler.java | 2 15 files changed, 56 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/OrderDetlController.java b/src/main/java/com/zy/asrs/controller/OrderDetlController.java index e56ddff..0e9b7ef 100644 --- a/src/main/java/com/zy/asrs/controller/OrderDetlController.java +++ b/src/main/java/com/zy/asrs/controller/OrderDetlController.java @@ -15,7 +15,9 @@ import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.service.*; import com.zy.common.web.BaseController; +import lombok.Synchronized; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StopWatch; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; @@ -168,14 +170,12 @@ docIds.add(pakin.getDocId()); } } - wrapper.in("source",docIds); Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(curr, limit), wrapper); for (OrderDetl record : page.getRecords()) { Double sumAnfme = agvLocDetlService.getSumAnfme(record.getMatnr(), record.getThreeCode()); record.setStock(sumAnfme == null ? 0 : sumAnfme); } - return R.ok(page); } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java index aed1682..1a97b91 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java @@ -549,8 +549,30 @@ if (!agvWrkMast.getBarcode().equals(param.getBarcode())) { throw new CoolException("褰撳墠璐ф灦鐮佷笌浠诲姟涓嶅尮閰�"); } - if (!agvWrkMast.getWrkSts().equals(207L)) { - throw new CoolException("宸ヤ綔鐘舵�佷笉绗﹀悎绂诲満鏉′欢"); + if (!agvWrkMast.getWrkSts().equals(207L) && !agvWrkMast.getWrkSts().equals(205L)) { + throw new CoolException("褰撳墠宸ヤ綔鐘舵��:" + agvWrkMast.getWrkSts$() +"涓嶇鍚堢鍦烘潯浠�"); + } + if (agvWrkMast.getWrkSts().equals(205L)) { + // 搴撲綅 -- 鎺ラ┏浣� / 搴撲綅 + if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) { + agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); + // 鎺ラ┏浣� -- 搴撲綅 + } else { + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); + } + + // 鎺ラ┏浣� -- 搴撲綅 + if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { + agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); + // 搴撲綅 -- 鎺ラ┏浣� / 搴撲綅 + } else { + //淇敼婧愬簱浣嶇姸鎬佷负O + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); + //鏇存柊鐩爣搴撲綅鏄庣粏 101.鍑哄簱 鍒犻櫎婧愬簱浣嶅簱瀛樻槑缁� + agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); + } + + agvWrkMast.setSourceLocNo(""); } //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� + 鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗� @@ -575,7 +597,7 @@ // 鏇存柊绔欑偣鐘舵�� agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); // 鏇存柊婧愬簱浣嶇姸鎬� - agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); +// agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); //鍒犻櫎AGV宸ヤ綔鏄庣粏妗� agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",oldWrkNo)); diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java index 30d6142..2986c10 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java @@ -1203,9 +1203,11 @@ } if (wrkMast.getIoType() == 108) { wrkMast.setIoType(111); + wrkMast.setModiTime(new Date()); agvWrkMastService.update(wrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo)); } else if(wrkMast.getIoType() == 111) { wrkMast.setIoType(108); + wrkMast.setModiTime(new Date()); agvWrkMastService.update(wrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo)); } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java index 2152b2c..ddfc242 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java @@ -67,6 +67,7 @@ //鍒ゆ柇瑕佷慨鏀圭殑宸ヤ綔妗g姸鎬佹槸鍚﹀悎鐞嗭紝濡傛灉涓嶅悎鐞嗗垯鎶涘嚭寮傚父 checkWrkSts(agvWrkMast,wrkSts); agvWrkMast.setWrkSts(wrkSts); + agvWrkMast.setModiTime(new Date()); this.updateById(agvWrkMast); } diff --git a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java index 539a5b5..a7dcc13 100644 --- a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java @@ -43,7 +43,7 @@ /* 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 涓� 锛�1.鍏ュ簱 || 53锛屾嫞鏂欏叆搴� || 57.鐩樼偣鍏ュ簱 || 10.绌烘澘鍏ュ簱 || 11.鍗曞眰绉诲簱 || 12.璺ㄥ眰绉诲簱 || 108.鑷姩璋冩嫧 || 109.鎵嬪姩璋冩嫧)鐨勬暟鎹� */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void excutePutwayWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() .eq("wrk_sts", 205) @@ -76,7 +76,7 @@ /* 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负206.鍑哄簱瀹屾垚 涓� (101.鍑哄簱 || 110.绌烘澘鍑哄簱) */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void excuteCarryWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() .eq("wrk_sts", 206) @@ -97,7 +97,7 @@ /* 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负206.鍑哄簱瀹屾垚 涓� (101.鍑哄簱 || 110.绌烘澘鍑哄簱) */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void excuteCarryWrk2(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() .eq("wrk_sts", 208) @@ -119,7 +119,7 @@ putaway锛氫笂鏋� 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负201.鐢熸垚鍏ュ簱浠诲姟ID 涓�(鍑哄簱绫诲瀷涓� 53.鎷f枡鍐嶅叆搴� || 1.鍏ュ簱 || 10.绌烘澘鍏ュ簱鏍� || 57.鐩樼偣鍐嶅叆搴�)鐨勬暟鎹� */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void startPutwayWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) ,new EntityWrapper<AgvWrkMast>() @@ -152,7 +152,7 @@ putaway锛氫笂鏋� 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负201.鐢熸垚鍏ュ簱浠诲姟ID 涓�(鍑哄簱绫诲瀷涓� 53.鎷f枡鍐嶅叆搴� || 1.鍏ュ簱 || 10.绌烘澘鍏ュ簱鏍� || 57.鐩樼偣鍐嶅叆搴�)鐨勬暟鎹� */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void startAllcationIn(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) ,new EntityWrapper<AgvWrkMast>() @@ -174,7 +174,7 @@ carry锛氭惉杩愶紝缁熸寚鍑哄簱銆佺Щ搴撱�佺偣鍒扮偣鎼繍绛� 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负21.鐢熸垚鍑哄簱浠诲姟 涓�(鍑哄簱绫诲瀷涓� 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 11.搴撴牸绉绘牻 || 110.绌烘澘鍑哄簱 || 107.鐩樼偣鍑哄簱)鐨勬暟鎹� */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void startCarryWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) ,new EntityWrapper<AgvWrkMast>() @@ -241,7 +241,7 @@ /* 鑷姩鐢熸垚绌烘澘鍑哄簱浠诲姟 */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") public void autoEmptyOut(){ boolean packageEmptyAutoOUt = Cools.eq("Y",Parameter.get().getPackageEmptyAutoOUt()); boolean mateEmptyAutoOut = Cools.eq("Y",Parameter.get().getMateEmptyAutoOut()); diff --git a/src/main/java/com/zy/asrs/task/AutoMoveCreateExecuteScheduler.java b/src/main/java/com/zy/asrs/task/AutoMoveCreateExecuteScheduler.java index 57a4370..682cf0c 100644 --- a/src/main/java/com/zy/asrs/task/AutoMoveCreateExecuteScheduler.java +++ b/src/main/java/com/zy/asrs/task/AutoMoveCreateExecuteScheduler.java @@ -117,6 +117,7 @@ WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectOne(new EntityWrapper<WrkMastExecute>().eq("io_type", 121).eq("wrk_no", agvWrkMast.getWrkNo().longValue())); if (!Cools.isEmpty(wrkMastExecute) && wrkMastExecute.getWrkSts()==3L && wrkMastExecute.getNowPosition()==3){ agvWrkMast.setWrkSts(205L);//浠诲姟瀹屾垚 + agvWrkMast.setModiTime(new Date()); agvWrkMastService.updateById(agvWrkMast); //鐢熸垚agv_wrk_mast_execute浠诲姟鍘嗗彶妗� wrkMastExecuteLogService.save(wrkMastExecute); diff --git a/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java b/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java index db4034f..7f74c6a 100644 --- a/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java +++ b/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java @@ -66,7 +66,7 @@ * ioType 108.鑷姩璋冩嫧 * crnNo :2鐩爣妤煎眰 */ - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") private synchronized void execute2(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() .eq("wrk_sts", 22) diff --git a/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java b/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java index 93799d9..bbff508 100644 --- a/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java +++ b/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java @@ -19,7 +19,7 @@ @Autowired private NotifyLogHandler notifyLogHandler; - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") private void execute(){ ReturnT<String> returnT = notifyLogHandler.start(); if (!returnT.isSuccess()) { diff --git a/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java b/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java index 95a8a29..39652b4 100644 --- a/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java +++ b/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java @@ -19,7 +19,7 @@ @Autowired private OverYearLogHandler overYearLogHandler; - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") private void execute(){ ReturnT<String> returnT = overYearLogHandler.start(); if (!returnT.isSuccess()) { diff --git a/src/main/java/com/zy/asrs/task/PlcLogScheduler.java b/src/main/java/com/zy/asrs/task/PlcLogScheduler.java index 708392f..61c7e8a 100644 --- a/src/main/java/com/zy/asrs/task/PlcLogScheduler.java +++ b/src/main/java/com/zy/asrs/task/PlcLogScheduler.java @@ -19,7 +19,7 @@ @Autowired private PlcLogHandler plcLogHandler; - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") private void execute(){ ReturnT<String> returnT = plcLogHandler.start(); if (!returnT.isSuccess()) { diff --git a/src/main/java/com/zy/asrs/task/WorkLogScheduler.java b/src/main/java/com/zy/asrs/task/WorkLogScheduler.java index 06a0624..148f081 100644 --- a/src/main/java/com/zy/asrs/task/WorkLogScheduler.java +++ b/src/main/java/com/zy/asrs/task/WorkLogScheduler.java @@ -23,7 +23,7 @@ @Autowired private WrkMastService wrkMastService; - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/1 * * * * ? ") private void execute(){ List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData(); if (wrkMasts.isEmpty()) { diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java index 805637f..12b4c6d 100644 --- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java @@ -78,6 +78,11 @@ agvWrkMastLogService.save(agvWrkMast); //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗� agvWrkDetlLogService.save(wrkNo); + } else { + if (!agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { + agvWrkMast.setSourceLocNo(""); + } + agvWrkMastService.updateById(agvWrkMast); } switch (agvWrkMast.getIoType()){ @@ -258,6 +263,7 @@ String orderNo = getOrderNoByWrkNo(wrkNo); //淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚 agvWrkMast.setWrkSts(207L); + agvWrkMast.setModiTime(new Date()); agvWrkMastService.updateById(agvWrkMast); //淇敼婧愬簱浣嶇姸鎬佷负O if (agvWrkMast.getIoType() == 110) { @@ -349,6 +355,7 @@ } //淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚 agvWrkMast.setWrkSts(207L); + agvWrkMast.setModiTime(new Date()); agvWrkMastService.updateById(agvWrkMast); //淇敼婧愬簱浣嶇姸鎬佷负O agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); @@ -394,6 +401,7 @@ } agvWrkMast.setWrkSts(202L); + agvWrkMast.setModiTime(new Date()); agvWrkMastService.updateById(agvWrkMast); if(agvWrkMast.getIoType() == 1){ //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y @@ -459,6 +467,7 @@ Map<String, Object> devNoMap = devNoMaps.get(0); if((int)devNoMap.get("num") < maxWrokNum){ agvWrkMast.setLocNo(devNoMap.get("dev_no").toString()); + agvWrkMast.setModiTime(new Date()); agvWrkMastService.updateById(agvWrkMast); log.info("after锛�" + devNoMap.toString() + ", wrkNo:" + agvWrkMast.getWrkNo() + ", locNo: " + agvWrkMast.getLocNo()); } diff --git a/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java index e5723f7..4488530 100644 --- a/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java @@ -242,6 +242,7 @@ } agvWrkMast.setWrkSts(201L); agvWrkMast.setLocNo(devpNo.getDevNo()); + agvWrkMast.setModiTime(new Date()); agvWrkMast.setLogErrMemo("start3-doHandMove2"); agvWrkMastService.updateById(agvWrkMast); agvWrkMast.setModiTime(new Date()); diff --git a/src/main/webapp/static/js/agvWrkMast/wrkMast.js b/src/main/webapp/static/js/agvWrkMast/wrkMast.js index 1fd852b..6887bf7 100644 --- a/src/main/webapp/static/js/agvWrkMast/wrkMast.js +++ b/src/main/webapp/static/js/agvWrkMast/wrkMast.js @@ -21,7 +21,7 @@ cols: [[ {type: 'checkbox'} ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�',sort: true, width: 85} - ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿',sort: true, width: 160} + ,{field: 'modiTime$', align: 'center',title: '宸ヤ綔鏃堕棿',sort: true, width: 160} ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'} ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�'} ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�',width: 80} @@ -57,6 +57,7 @@ // ,{field: 'crnStrTime$', align: 'center',title: '鍫嗗灈鏈哄惎鍔ㄦ椂闂�'} // ,{field: 'crnEndTime$', align: 'center',title: '鍫嗗灈鏈哄仠姝㈡椂闂�'} // ,{field: 'refIotime$', align: 'center',title: '鎷f枡鏃堕棿'} + ,{field: 'appeTime$', align: 'center',title: '寮�濮嬫椂闂�', hide:false, width: 160} ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true} ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true, width: 160} // ,{field: 'memo', align: 'center',title: '澶囨敞'} diff --git a/src/main/webapp/static/js/agvWrkMastLog/wrkMastLog.js b/src/main/webapp/static/js/agvWrkMastLog/wrkMastLog.js index 867626e..c29516e 100644 --- a/src/main/webapp/static/js/agvWrkMastLog/wrkMastLog.js +++ b/src/main/webapp/static/js/agvWrkMastLog/wrkMastLog.js @@ -28,7 +28,7 @@ ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�'} ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅'} ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true} - ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true} + ,{field: 'appeTime$', align: 'center',title: '寮�濮嬫椂闂�', hide:false} ,{field: 'barcode', align: 'center',title: '璐ф灦鐮�'} ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80} ]], -- Gitblit v1.9.1