From f30358a20ae9a74ee7f6c604a8d102c1b9b24659 Mon Sep 17 00:00:00 2001 From: lsh <lsh123456> Date: 星期二, 25 六月 2024 16:24:26 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 224 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 195 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index c8ff8f9..788004e 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -11,10 +11,7 @@ import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; -import com.zy.asrs.utils.CodeDetectionUtil; -import com.zy.asrs.utils.RouteUtils; -import com.zy.asrs.utils.Utils; -import com.zy.asrs.utils.VersionUtils; +import com.zy.asrs.utils.*; import com.zy.common.model.LocTypeDto; import com.zy.common.model.MatDto; import com.zy.common.model.SearchLocParam; @@ -30,9 +27,7 @@ import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.*; -import com.zy.core.model.command.CrnCommand; -import com.zy.core.model.command.LedCommand; -import com.zy.core.model.command.RgvCommand; +import com.zy.core.model.command.*; import com.zy.core.model.cpmmandParam.CrnCommandParam; import com.zy.core.model.protocol.*; import com.zy.core.properties.SlaveProperties; @@ -1167,6 +1162,7 @@ } return false; } + public synchronized boolean crnStnToOutStnTwo(CrnSlave.CrnStn crnStn ,Integer conStation) { try{ Date now = new Date(); @@ -1288,6 +1284,7 @@ } return false; } + public synchronized boolean crnStnToOutStnThree(CrnSlave.CrnStn crnStn ) { try{ // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 @@ -2938,6 +2935,7 @@ } } } + public synchronized boolean storeFinishedExecuteOne(CrnSlave crn) { try{ // 鑾峰彇鍫嗗灈鏈轰俊鎭� @@ -3003,6 +3001,7 @@ } return false; } + public synchronized boolean storeFinishedExecuteTwo(CrnSlave crn) { try{ // 鑾峰彇鍫嗗灈鏈轰俊鎭� @@ -3094,6 +3093,7 @@ } return false; } + public synchronized boolean storeFinishedExecuteThree(CrnSlave crn) { try{ // 鑾峰彇鍫嗗灈鏈轰俊鎭� @@ -3613,6 +3613,7 @@ } } } + /** * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� */ @@ -4418,7 +4419,7 @@ public synchronized void jarMastGenerate() { for (JarSlave jarSlave : slaveProperties.getJar()) { try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ continue; } for(JarSlave.StaStn staStn : jarSlave.getJarInSta()){ @@ -4473,7 +4474,7 @@ if (!Cools.isEmpty(basJarMast)){ continue; } - WrkMastExecute wrkMastExecute = wrkMastExecuteService.getWrkMastByWrkNo(wrkMast.getWrkNo().longValue()); + WrkMastExecute wrkMastExecute = wrkMastExecuteService.getWrkMastExecuteByWrkNo(wrkMast.getWrkNo().longValue()); if (!Cools.isEmpty(wrkMastExecute)){ continue; } @@ -4605,7 +4606,7 @@ for (JarSlave jarSlave : slaveProperties.getJar()) { int i = jarSlave.getId()>2? 1:0; try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ continue; } @@ -4670,11 +4671,14 @@ public synchronized boolean[] jarWrkMastExecuteGenerateBurial(boolean[] signExecute,Integer sign) { for (JarSlave jarSlave : slaveProperties.getJar()) { + if (jarSlave.getId()<5){ + continue; + } try{ if (signExecute[jarSlave.getId()-5]){ continue; } - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ signExecute[jarSlave.getId()-5] = true; continue; } @@ -4716,11 +4720,14 @@ public synchronized boolean[] jarWrkMastExecuteGenerateSte(boolean[] signExecute,Integer sign) { for (JarSlave jarSlave : slaveProperties.getJar()) { + if (jarSlave.getId()<5){ + continue; + } try{ if (signExecute[jarSlave.getId()-5]){ continue; } - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ continue; } @@ -4774,7 +4781,7 @@ */ public synchronized boolean jarWrkMastExecuteGenerate1(JarSlave jarSlave,Integer sign) { try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ return false; } List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ @@ -4847,13 +4854,13 @@ && !jarOtherProtocol.isLeftDoor() && jarOtherProtocol.leftDoorOpen==0 && jarOtherProtocol.leftDoorClose==0){ if (!jarProtocol.isLeftDoor() && basJarMast.getStatus()==0){ //鐢熸垚寮�闂ㄤ换鍔� OpenTheDoor - if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),1,1})){ + if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvNo(),1,1})){ log.error("JarWrkMastExecute浠诲姟鍒涘缓===>鎵ц寮傚父===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); } return true; } else if (jarProtocol.statusType == JarStatusType.WAITING3 && jarProtocol.isLeftDoor()){ //鐢熸垚鍏ョ~鍖栫綈浠诲姟 - if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),5,1})){ + if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvNo(),5,1})){ log.error("JarWrkMastExecute浠诲姟鍒涘缓===>鎵ц寮傚父===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); } return true; @@ -4881,7 +4888,7 @@ */ public synchronized boolean jarWrkMastExecuteGenerate2(JarSlave jarSlave,Integer sign) { try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ return false; } List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ @@ -4928,7 +4935,7 @@ && !jarProtocol.isRightDoor() && jarProtocol.isLeftDoor() && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ //鍏宠繘鏂欓棬 - if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMastSign,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),2,1})){ + if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMastSign,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvNo(),2,1})){ log.error("JarWrkMastExecute浠诲姟鍒涘缓===>鎵ц寮傚父===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMastSign)); } return true; @@ -4950,7 +4957,7 @@ */ public synchronized boolean jarWrkMastExecuteGenerate3(JarSlave jarSlave,Integer sign) { try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ return false; } List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ @@ -4997,7 +5004,7 @@ && !jarProtocol.isLeftDoor() && !jarProtocol.isRightDoor() && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ //寮�鍑烘枡闂� - if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMastSign,basJar.getJarNo(),new int[]{basJar.getOutSteId(),basJar.getOutRgvId(),3,1})){ + if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMastSign,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),3,1})){ log.error("JarWrkMastExecute浠诲姟鍒涘缓===>鎵ц寮傚父===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMastSign)); } return true; @@ -5019,7 +5026,7 @@ */ public synchronized boolean jarWrkMastExecuteGenerate4(JarSlave jarSlave,Integer sign) { try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ return false; } List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ @@ -5067,7 +5074,7 @@ && !jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ //鍏宠繘鏂欓棬 - if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByJarIdMin,basJar.getJarNo(),new int[]{basJar.getOutSteId(),basJar.getOutRgvId(),3,1})){ + if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByJarIdMin,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),3,1})){ log.error("JarWrkMastExecute浠诲姟鍒涘缓===>鎵ц寮傚父===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); } return true; @@ -5089,7 +5096,7 @@ */ public synchronized boolean jarWrkMastExecuteGenerate5(JarSlave jarSlave,Integer sign) { try{ - if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){ + if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ return false; } List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ @@ -5136,7 +5143,7 @@ //闂ㄤ綔涓� 鏃� if (jarProtocol.isAutoing() && jarProtocol.jarErr==0){ //鍏宠繘鏂欓棬 - if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByJarIdMin,basJar.getBurial(),new int[]{basJar.getOutSteId(),basJar.getOutRgvId(),3,1})){ + if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByJarIdMin,basJar.getBurial(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),3,1})){ log.error("JarWrkMastExecute浠诲姟鍒涘缓===>鎵ц寮傚父===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); } return true; @@ -5154,6 +5161,9 @@ /** * 鍒ゆ柇STE灏忚溅鐘舵�� //瀹屾垚 + * 1锛欰闈� 杩涙枡闈� + * 2锛欱闈� 鍑烘枡闈� + * 3锛氬喎鍗存ЫB闈� 涓婅緭閫佺嚎 */ public synchronized boolean jarWrkMastExecuteGenerateSteStatus(Integer steNo,Integer type) { try{ @@ -5201,9 +5211,17 @@ } return false; } - /** - * 鍒ゆ柇RGV灏忚溅鐘舵�� //瀹屾垚 - */ + + /* + * 鍒ゆ柇RGV灏忚溅鐘舵�� //瀹屾垚 + * RGV1;//灏忚溅鏃犺揣绌洪棽 + * RGV2;//灏忚溅杈撻�佺嚎鍙栬揣鍒颁綅 + * RGV3;//灏忚溅杩愯涓� + * RGV3;//灏忚溅杩愯涓� + * RGV4;//灏忚溅鏀瑰乏渚ц揣鐗╃洰鏍囩珯 鍙�1锛堝乏锛夎揣鐗� + * RGV5;//灏忚溅鏀瑰彸渚ц揣鐗╃洰鏍囩珯 鍙�2锛堝彸锛夎揣鐗� + * RGV6;//涓婁綅鏈烘竻闄ゅ钩绉昏溅璧勬枡 + * */ public synchronized boolean jarWrkMastExecuteGenerateRgvStatus(Integer rgvNo,Integer rgvPlcId,Integer type) { try{ //妫�娴婻GV鐘舵�� @@ -5217,6 +5235,7 @@ if (staProtocolRGV == null) { return false; } + return staProtocolRGV.rgvBoolean(type); } catch (Exception e){ log.error("{}鍙稲GV鐘舵�佸垽鏂姸鎬佸紓甯�,寮傚父鍘熷洜={}",rgvNo,e.getMessage()); @@ -5242,6 +5261,46 @@ return false; } + /* + * JarWrkMastExecute浠诲姟鍒涘缓==>涓嬪彂 + * Action + * */ + public synchronized void jarWrkMastExecuteAction(Integer sign) { + try{ + List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.sselectWrkMastExecuteByTypeAndIoTyper(0, 0); + for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ + /* + * 浠诲姟绫诲瀷 0: 鏈煡 + * 1: 寮�杩涙枡闂� 2: 鍏宠繘鏂欓棬 3: 寮�鍑烘枡闂� 4: 鍏冲嚭鏂欓棬 + * 5: 鍏ョ~鍖栫綈 + * 6: 鍏ュ喎鍗存Ы + * 7: 绌挎杞﹁繘鍐峰嵈妲� 8: 绌挎杞︾寮�鍐峰嵈妲� + * 9: 鍑哄喎鍗存Ы + * 10锛欰=>B 11:B=>A + * */ + switch (wrkMastExecute.getIoType()){ + case 1: + jarWrkMastExecuteActionExecute1(wrkMastExecute,sign); + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + } + } + } catch (Exception e){ + + } + + } + /** * JarWrkMastExecute浠诲姟瀹屾垚 //鏈畬鎴� */ @@ -5253,24 +5312,131 @@ } } + /** + * JarWrkMastExecute浠诲姟鍒涘缓==>涓嬪彂 //鏈畬鎴� + * 寮�杩涙枡闂� + * 浠诲姟涓嬪彂 + */ + public synchronized boolean jarWrkMastExecuteActionExecute1(WrkMastExecute wrkMastExecute,Integer sign) { + try{ + List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); + if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){ + return false; + } + + // 鑾峰彇纭寲缃愪俊鎭� + JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); + JarProtocol jarProtocol = jarThread.getJarProtocol(); + if (jarProtocol == null) { + return false; + } + if (jarProtocol.modeType != JarModeType.AUTO){ + return false; + } + + BasJar basJar = basJarMapper.selectByJarNo(jarProtocol.getJarNo()); + if (Cools.isEmpty(basJar)){ + log.error("{}鍙风~鍖栫綈鏌ヨ璁惧妗f鏃犱俊鎭紒锛侊紒",jarProtocol.getJarNo()); + return false; + } + + //鍒ゆ柇灏忚溅鐘舵�� + if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ + return false; + } + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); + if (staProtocolRGV == null) { + return false; + } else { + staProtocolRGV = staProtocolRGV.clone(); + } + if (staProtocolRGV == null) { + return false; + } + if (staProtocolRGV.rgvBoolean(1)){ + + //闂ㄤ綔涓� 鏃� + //鑷姩銆佺┖闂层�� 杩涙枡浠叧闂渶鎵撳紑 + if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 + && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ + if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ + //绉昏蛋 == > 2 + } else { + //鐩存帴寮�闂� + + } + } + return false; + } else { + log.error("jarWrkMastExecuteActionExecute1===>鎵ц寮傚父===銆婻GV涓嶆弧瓒虫潯浠讹紝绛夊緟===銆嬪紓甯告暟鎹細BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); + return false; + } + + } catch (Exception e){ + log.error("jarWrkMastExecuteActionExecute1浠诲姟鎵ц涓嬪彂寮傚父==銆媤rkMastExecute={},寮傚父鍘熷洜={}",wrkMastExecute,e.getMessage()); + } + return false; + } + /* * Rgv 鍔ㄤ綔 * */ - public synchronized boolean jarRgvTake(Integer rgvNo,WrkMastExecute wrkMastExecute,Integer type){ + public synchronized boolean jarRgvTake(WrkMastExecute wrkMastExecute,Integer endRow){ + try { + StaProtocol staProtocol = new StaProtocol(); + staProtocol.setSiteId(wrkMastExecute.getRgvId()); + staProtocol.setEndRow(endRow.shortValue()); + // 涓嬪彂绔欑偣淇℃伅 + if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(9, staProtocol))) { + log.error("骞宠 杞gv鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={},浠诲姟鏁版嵁={},涓嬪彂鏁版嵁={}", wrkMastExecute.getRgvId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocol)); + return false; + } + return true; + }catch (Exception e){ + log.error("骞宠 杞gv鍛戒护涓嬪彂澶辫触锛孯gv鍙�={},浠诲姟鏁版嵁={},endRow={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(endRow)); + } return false; } /* * Ste 鍔ㄤ綔 * */ - public synchronized boolean jarSteTake(Integer steNo,WrkMastExecute wrkMastExecute,Integer type){ + public synchronized boolean jarSteTake(WrkMastExecute wrkMastExecute,Integer startLoad,Integer endLoad,SteTaskModeType steTaskModeType,boolean complete){ + try { + SteCommand steCommand = new SteCommand(); + steCommand.setSteNo(wrkMastExecute.getSteId()); + steCommand.setStartLoad(startLoad); + steCommand.setEndLoad(endLoad); + steCommand.setTaskModeType(steTaskModeType); + steCommand.setComplete(complete); + if (!MessageQueue.offer(SlaveType.Ste, steCommand.getSteNo(), new Task(2, steCommand))) { + log.error("绌挎杞te鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={},浠诲姟鏁版嵁={},涓嬪彂鏁版嵁={},complete={}", steCommand.getSteNo(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steCommand),complete); + return false; + } + return true; + }catch (Exception e){ + log.error("绌挎杞te鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={},浠诲姟鏁版嵁={},complete={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(complete)); + } return false; } /* * Jar 鍔ㄤ綔 * */ - public synchronized boolean jarDoorTake(Integer jarNo,WrkMastExecute wrkMastExecute,Integer type){ + public synchronized boolean jarDoorTake(WrkMastExecute wrkMastExecute,JarTaskModeType jarTaskModeType){ + try{ + JarCommand jarCommand = new JarCommand(); + jarCommand.setJarNo(wrkMastExecute.getJarId()); + jarCommand.setTaskModeType(jarTaskModeType); + if (!MessageQueue.offer(SlaveType.Jar, jarCommand.getJarNo(), new Task(2, jarCommand))) { + log.error("纭寲缃怞ar鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={},浠诲姟鏁版嵁={},涓嬪彂鏁版嵁={}", jarCommand.getJarNo(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarCommand)); + return false; + } + return true; + }catch (Exception e){ + log.error("纭寲缃怞ar鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={},浠诲姟鏁版嵁={},涓嬪彂鏁版嵁={}", wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarTaskModeType)); + } return false; } -- Gitblit v1.9.1