From c576dd18c9781ef1b101aa63128b1c1d57ba010a Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期一, 22 四月 2024 09:05:22 +0800
Subject: [PATCH] 更新逻辑

---
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java |    7 ++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java                         |    1 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java                         |    9 +++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java                    |   25 +++++---
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java                                          |   17 -----
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java                                             |    3 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java    |   26 ++++++++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java          |    3 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                |    2 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java                 |    3 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java        |   36 ++++++++++++
 11 files changed, 101 insertions(+), 31 deletions(-)

diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
index e6eaef7..6fd4740 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
@@ -22,12 +22,7 @@
     private static String PlcMes = PLCAutoMes.class.getResource("/JsonFile/PlcMes.json").getPath();
     private static String PlcRead = PLCAutoMes.class.getResource("/JsonFile/PlcRead.json").getPath();
     private static String Plcframe = PLCAutoMes.class.getResource("/JsonFile/Plcframe.json").getPath();
-    //    private static String PlcParameter = PLCAutomaticParameterSettingReview2.class
-//            .getResource("/JsonFile/PlcParameter.json").getPath();
-//    private static String PlcSign = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcSign.json")
-//            .getPath();
-//    private static String PlcState = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcState.json")
-//            .getPath();
+
     private static String PlcAlarm = PLCAutoMes.class.getResource("/JsonFile/PlcAlarm.json").getPath();
     // private static String PlcTest = PLCAutoMes.class.getResource("/JsonFile/PlcTest.json").getPath();
 
@@ -67,19 +62,11 @@
 
             // readAndUpdateWordValues(PlcReadObject);
             readAndUpdateWordValues(PlcMesObject);
-//      readAndUpdateWordValues(PlcframeObject);
-            // readAndUpdateWordValues(PlcframeObject);
 
-            // readAndUpdateWordValues(plcStateObject);
-            //  int index = PlcMesObject.getPlcParameter("AddStart").getAddressIndex();
-            // System.out.println(index);
-            //  PlcMesObject.getPlcParameter("AddStart").getAddress(index);
-            // System.out.println(PlcMesObject.getPlcParameter("AddStart").getAddress(index));
             List<String> addresses = new ArrayList<>();
             addresses.add("FeedID");
             addresses.add("AddStart");
-            // System.out.println(addresses);
-            // System.out.println(PlcMesObject.getPlcParameterValues(addresses));
+
             List<String> addresses2 = new ArrayList<>();
             addresses2.add("FeedID");
             addresses2.add("FeedCarStatus");
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java
index 9a4a882..e9885db 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java
@@ -29,8 +29,7 @@
                 i++;
                 Thread.sleep(100);
                 DownGlassLogic plcService = plcServiceSupplier.get();
-                // plcService.performPlcActions();
-                //plcService.unloadpush();
+
 
                 //褰撲笅鐗囦换鍔¤〃鐘舵�佷负1鏃跺�欏皢鏁版嵁鎻掑叆鍒颁笅鐗囩幓鐠冧俊鎭〃
                 plcService.insertdownglassinfo();
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
index 4a6a297..989192a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -30,7 +30,7 @@
 
 
     //鏌ヨ纾ㄨ竟缂撳瓨鐞嗙墖绗煎唴璇︽儏
-    @ApiOperation("鏌ヨ纾ㄨ竟缂撳瓨鐞嗙墖绗煎唴璇︽儏")
+    @ApiOperation("鏌ヨ缂撳瓨鐞嗙墖绗煎唴璇︽儏")
     @GetMapping("/selectStorageCage")
     @ResponseBody
     public Result selectEdgStorageCage () {
@@ -40,6 +40,30 @@
 
 
 
+    @ApiOperation("娣诲姞缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氱鍐呯粦瀹氱幓鐠�  鍙傛暟(DownStorageCageDetails downStorageCageDetails)")
+    @PostMapping("/insertEdgStorageCage")
+    @ResponseBody
+    public Result insertEdgStorageCage(@RequestBody DownStorageCageDetails downStorageCageDetails) {
+        boolean isSucess=downStorageCageDetailsService.updatedownStorageCageDetails(downStorageCageDetails);
+        return Result.build(200,"娣诲姞鎴愬姛",1);
+    }
+    @ApiOperation("淇敼缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氬绗煎唴鏍呮牸杩涜銆愬惎鐢�/绂佺敤銆�/ 銆愭洿鎹€�戠鍐呮爡鏍肩幓鐠冧俊鎭�")
+    @PostMapping("/updateEdgStorageCage")
+    @ResponseBody
+    public Result updateEdgStorageCage(@RequestBody DownStorageCageDetails downStorageCageDetails) {
+        boolean isSucess=downStorageCageDetailsService.updatedownStorageCageDetails(downStorageCageDetails);
+        return Result.build(200,"鏇存崲鎴愬姛",1);
+    }
+    @ApiOperation("鍒犻櫎缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愭竻闄ゃ��")
+    @PostMapping("/deleteEdgStorageCage")
+    @ResponseBody
+    public Result deleteEdgStorageCage(@RequestBody DownStorageCageDetails downStorageCageDetails) {
+        boolean isSucess=downStorageCageDetailsService.updatedownStorageCageDetails(downStorageCageDetails);
+        return Result.build(200,"鍒犻櫎鎴愬姛",1);
+    }
+
+
+
 
 //
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
index e747ab1..1617790 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -15,36 +17,43 @@
  * @author zhoush
  * @since 2024-03-27
  */
+@ApiModel(description = "<p> 缂撳瓨</p>")
 @Data
 @EqualsAndHashCode(callSuper = false)
 public class DownStorageCage implements Serializable {
 
+    @ApiModelProperty(hidden = true)
     private static final long serialVersionUID = 1L;
 
     /**
      * 涓嬬墖鍓嶇悊鐗囩琛╥d
      */
+    @ApiModelProperty(value = "涓嬬墖鍓嶇悊鐗囩琛╥d", position = 2)
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /**
      * 璁惧id
      */
+    @ApiModelProperty(value = "璁惧id", position = 3)
     private Integer deviceId;
 
     /**
      * 鏍呮牸鍙�
      */
+    @ApiModelProperty(value = "鏍呮牸鍙�", position = 4)
     private Integer slot;
 
     /**
      * 鍚敤鐘舵��
      */
+    @ApiModelProperty(value = "鍚敤鐘舵��", position = 5)
     private String enableState;
 
     /**
      * 鍓╀綑
      */
+    @ApiModelProperty(value = "鍓╀綑", position = 6)
     private Integer remainWidth;
 
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java
index 382665d..1aa2bdf 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java
@@ -29,8 +29,11 @@
     public static final String RESULT_IN_OUT = "3";
     @Autowired
     private DownStorageCageDetailsMapper selectInfo;
-    private GlassInfoService GlassInfoService;
+    @Autowired
+    private GlassInfoService glassInfoService;
+    @Autowired
     private DownStorageCageService downStorageCageService;
+    @Autowired
     private DownGlassTaskService downGlassTaskService;
 
 
@@ -65,11 +68,11 @@
      */
 
     public boolean processInto(String Number) {
-        GlassInfoService = WebSocketServer.applicationContext.getBean(GlassInfoService.class);
+        glassInfoService = WebSocketServer.applicationContext.getBean(GlassInfoService.class);
         downStorageCageService = WebSocketServer.applicationContext.getBean(DownStorageCageService.class);
 
         //鎸塱d鏌ヨ鐜荤拑淇℃伅琛ㄩ噷鐨勭幓鐠�
-        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        GlassInfo GlassInfo = glassInfoService.selectGlassId(Number);
         PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
         //瀛樺湪姝ょ幓鐠冪紪鍙�
         if (GlassInfo != null) {
@@ -92,6 +95,7 @@
                 selectInfo.insertCacheTask(GlassInfo.getId() + "", "0", item.getSlot() + "", "1", GlassInfo.getWidth(), GlassInfo.getHeight(), GlassInfo.getFilmsid(), GlassInfo.getThickness(), GlassInfo.getFlowcardId());
 
                 S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
+
                //瀹屾垚鍚庢彃鍏ュ皬鐗囨暟鎹埌缂撳瓨琛�
                 return true;
             }
@@ -111,9 +115,12 @@
         String G13 = S7control.getinstance().ReadWord("DB14.58", 1).get(0) + "";
         PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
 
+
         List<DownStorageCageDetails> list = downStorageCageService.getCacheOut(1, 5);
         List<DownStorageCageDetails> list2 = downStorageCageService.getCacheOut(6, 10);
         List<DownStorageCageDetails> list3 = downStorageCageService.getCacheOut(1, 10);
+        GlassInfo Maxglass=glassInfoService.selectGlassId("2");;
+
         // 浼樺厛 瓒呭嚭灏哄浼樺厛浜哄伐鍑虹墖 浜哄伐澶勭悊
         if (!list3.isEmpty()) {
             DownStorageCageDetails item3 = list3.get(0);
@@ -130,20 +137,18 @@
         }
 
         //鍚屾椂璇锋眰 浼樺厛鍚庣鍑虹墖
-        else if (!list3.isEmpty()) {
+        else if (!list3.isEmpty()&&Maxglass.equals(list3.get(0))) {
             DownStorageCageDetails item3 = list3.get(0);
             if (G06.equals("0") && G11.equals("0")) {
-
                 String endcell = "11";
                 String SendEndcell = "1";
-
                 selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId());
                 S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell);
                 S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                 return true;
             }
         }
-        // 鎸夌収椤哄簭绗﹀悎鍓嶇鍑虹墖
+        // 鎸夌収澶у皬绗﹀悎鍓嶇鍑虹墖
         else if (!list.isEmpty()) {
             DownStorageCageDetails item = list.get(0);
             if (G06.equals("0") && G11.equals("1")) {
@@ -185,7 +190,7 @@
     public boolean selectMessageId(String Number) {
         //鏌ヨ鏄惁瀛樺湪
 
-        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        GlassInfo GlassInfo = glassInfoService.selectGlassId(Number);
         if (GlassInfo == null) {
             //杩斿洖 涓嶅瓨鍦�
             return false;
@@ -202,7 +207,7 @@
 
     public boolean deleteMessageId(String Number) {
         //鏌ヨ鏄惁瀛樺湪
-        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        GlassInfo GlassInfo = glassInfoService.selectGlassId(Number);
         if (GlassInfo == null) {
             //杩斿洖 涓嶅瓨鍦�
             return false;
@@ -218,7 +223,7 @@
      */
     public boolean isExist(String Number) {
         //鏌ヨ鏄惁瀛樺湪
-        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        GlassInfo GlassInfo = glassInfoService.selectGlassId(Number);
         if (GlassInfo == null) {
             //杩斿洖 涓嶅瓨鍦�
             return false;
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
index 9bc7a7b..b71fc94 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -9,5 +9,6 @@
 
     void addDownStorageCageDetails(DownStorageCageDetails details);
 
-
+    //淇敼鐞嗙墖绗煎唴淇℃伅
+    boolean updatedownStorageCageDetails(DownStorageCageDetails details);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
index f54c837..343af18 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -24,5 +24,6 @@
     List<Map> getCacheInfo();
     List<DownStorageCageDetails> getIsExistIntoCacheByLayoutAndSequence(Integer tempering_layout_id, Integer tempering_feed_sequence, double width);
     List<DownStorageCageDetails> getIsExistIntoCacheByLayout(Integer tempering_layout_id, double width);
-
+    List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width);
+    List<DownStorageCageDetails> IsExistIntoCacheByflowcardid(String flowcardid, double width);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
index dd58aa6..fb0e5b0 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -33,7 +33,12 @@
 
 
 
-
+    @Override
+    //淇敼鐞嗙墖绗煎唴淇℃伅 鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑 銆愭坊鍔�/鍒犻櫎/鏇存崲銆�
+    public boolean updatedownStorageCageDetails(DownStorageCageDetails details){
+        baseMapper.updateById(details);
+        return true;
+    }
 
 
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
index 40c62bb..1e0b006 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -119,6 +119,41 @@
     }
 
     @Override
+    public List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width) {
+        log.info(" 鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿  鎵惧埌鐩稿悓娴佺▼鍗″彿鐨勭┖鏍�");
+
+        List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList(
+                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>()
+                        .select("escd.*")
+                        .leftJoin("down_storage_cage_details escd on t.slot = escd.slot")
+                        .isNotNull("escd.slot")
+                        .eq("escd.flow_card_id", flowcardid)
+                        .gt("t.remain_width", width)
+                        .orderByAsc("escd.tempering_feed_sequence")
+        );
+        return list;
+    }
+
+
+
+    @Override
+    public List<DownStorageCageDetails> IsExistIntoCacheByflowcardid(String flowcardid, double width) {
+        log.info(" 鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿");
+        List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList(
+                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>()
+                        .select("escd.*")
+                        .leftJoin("down_storage_cage_details escd on t.slot = escd.slot")
+                        .isNotNull("escd.slot")
+                        .lt("escd.flow_card_id", flowcardid)
+                        // 鏉′欢 t.remain_width - width > 0
+                        .apply("t.remain_width - " + width + " > 0")
+                        .orderByDesc("escd.tempering_layout_id, escd.tempering_feed_sequence")
+        );
+        return list;
+    }
+
+
+    @Override
     public List<DownStorageCageDetails> getIsExistIntoCacheByLayout(Integer tempering_layout_id, double width) {
         log.info(" 鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿");
         List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList(
@@ -139,4 +174,5 @@
 
 
 
+
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
index 4019774..7d16a94 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
@@ -21,4 +21,5 @@
     List<Map<String, Object>> getFlowCardId();
 
     GlassInfo selectGlassId(String id);
+//    List<GlassInfo> getmaxglass(GlassInfo glassInfo);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
index d064db4..b3d9cc9 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -42,6 +42,8 @@
         return baseMapper.selectMaps(new QueryWrapper<GlassInfo>().select("DISTINCT flowcard_id"));
     }
 
+
+
     @Override
     public GlassInfo selectGlassId(String id) {
         QueryWrapper<GlassInfo> queryWrapper = new QueryWrapper<>();

--
Gitblit v1.8.0