From d03656c5be5357c07deebc5858e6f8d4bd661706 Mon Sep 17 00:00:00 2001
From: 杨乐 <yang.le.192@qq.com>
Date: 星期三, 26 一月 2022 16:25:38 +0800
Subject: [PATCH] Merge branch 'master' of http://101.37.171.70:10101/r/MES-WEB-API

---
 WebAPI/Controllers/生产管理/报工台工序/Sc_MESBeginStepWorkBillController.cs |  346 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 325 insertions(+), 21 deletions(-)

diff --git "a/WebAPI/Controllers/\347\224\237\344\272\247\347\256\241\347\220\206/\346\212\245\345\267\245\345\217\260\345\267\245\345\272\217/Sc_MESBeginStepWorkBillController.cs" "b/WebAPI/Controllers/\347\224\237\344\272\247\347\256\241\347\220\206/\346\212\245\345\267\245\345\217\260\345\267\245\345\272\217/Sc_MESBeginStepWorkBillController.cs"
index 525b482..1e72ff2 100644
--- "a/WebAPI/Controllers/\347\224\237\344\272\247\347\256\241\347\220\206/\346\212\245\345\267\245\345\217\260\345\267\245\345\272\217/Sc_MESBeginStepWorkBillController.cs"
+++ "b/WebAPI/Controllers/\347\224\237\344\272\247\347\256\241\347\220\206/\346\212\245\345\267\245\345\217\260\345\267\245\345\272\217/Sc_MESBeginStepWorkBillController.cs"
@@ -600,21 +600,35 @@
 
         public static DataSet Sc_GetMESProductReportBillList(string sWhere)
         {
+            //string sql = string.Format(@"select a.HInterID, a.HBillNo,a.HDate,a.HBillType,a.HBillStatus,a.HMaterID,m.HNumber HMaterCode,m.HName HMaterName,m.HModel HMaterSpec 
+            //                             ,b.HSourceID,s.HNumber HSourceCode,s.HName HSourceName,a.HGroupID,g.HNumber HGroupCode,g.HName HGroupName
+            //                             ,b.HEmpID,b.HEmpNumber,e.HName HEmpName,a.HMaker,a.HMakeDate, '宸ュ簭姹囨姤' HReportType  
+            //                             ,b.HQty,a.HICMOBillNo,a.HICMOInterID,pr.HProcNo,b.HProcID,p.HNumber HProcNumber,p.HName HProcName
+            //                             ,b.HSourceInterID,b.HSourceEntryID,b.HSourceBillNo,b.HSourceBillType
+            //                             from Sc_ProcessReportMain a 
+            //                             inner join Sc_ProcessReportSub b on a.HInterID=B.HInterID
+            //                             inner join (select max(HProcNo) HProcNo,max(HProcID) HProcID 
+            //                             from Sc_ProcessPlanSub group by HBillNo,HSourceBillNo) 
+            //                             pr on b.HProcID=pr.HProcID 
+            //                             left join Gy_Process p on b.HProcID=p.HItemID
+            //                             left join Gy_Material m on a.HMaterID=m.hitemid
+            //                             left join Gy_Source s on b.HSourceID=s.HItemID
+            //                             left join Gy_Group g on a.HGroupID=g.HItemID
+            //                             left join Gy_Employee e on b.HEmpID=e.HItemID " + sWhere+"  and HRelationInterID='0'");
             string sql = string.Format(@"select a.HInterID, a.HBillNo,a.HDate,a.HBillType,a.HBillStatus,a.HMaterID,m.HNumber HMaterCode,m.HName HMaterName,m.HModel HMaterSpec 
-                                         ,b.HSourceID,s.HNumber HSourceCode,s.HName HSourceName,a.HGroupID,g.HNumber HGroupCode,g.HName HGroupName
-                                         ,b.HEmpID,b.HEmpNumber,e.HName HEmpName,a.HMaker,a.HMakeDate, '宸ュ簭姹囨姤' HReportType  
-                                         ,b.HQty,a.HICMOBillNo,a.HICMOInterID,pr.HProcNo,b.HProcID,p.HNumber HProcNumber,p.HName HProcName
-                                         ,b.HSourceInterID,b.HSourceEntryID,b.HSourceBillNo,b.HSourceBillType
-                                         from Sc_ProcessReportMain a 
-                                         inner join Sc_ProcessReportSub b on a.HInterID=B.HInterID
-                                         inner join (select max(HProcNo) HProcNo,max(HProcID) HProcID 
-                                         from Sc_ProcessPlanSub group by HBillNo,HSourceBillNo) 
-                                         pr on b.HProcID=pr.HProcID 
-                                         left join Gy_Process p on b.HProcID=p.HItemID
-                                         left join Gy_Material m on a.HMaterID=m.hitemid
-                                         left join Gy_Source s on b.HSourceID=s.HItemID
-                                         left join Gy_Group g on a.HGroupID=g.HItemID
-                                         left join Gy_Employee e on b.HEmpID=e.HItemID " + sWhere+"  and HRelationInterID='0'");
+                                   ,a.HSourceID,s.HNumber HSourceCode,s.HName HSourceName,a.HGroupID,g.HNumber HGroupCode,g.HName HGroupName
+                                   ,a.HWorkManID,e.HName HWorkManName,a.HMaker,a.HMakeDate, a.HReportType  
+                                   ,a.HQty,a.HICMOBillNo,a.HICMOInterID,a.HICMOEntryID,pr.HProcNo,a.HProcID,p.HNumber HProcNumber,p.HName HProcName  
+                                   ,a.HSourceInterID,a.HSourceEntryID,a.HSourceBillNo, a.HSourceBillType
+                                   from Sc_ICMOBillWorkQtyStatus_Tmp a 
+                                   inner join (select max(HProcNo) HProcNo,max(HProcID) HProcID 
+                                   from Sc_ProcessPlanSub group by HBillNo,HSourceBillNo) 
+                                   pr on a.HProcID=pr.HProcID 
+                                   left join Gy_Process p on a.HProcID=p.HItemID
+                                   left join Gy_Material m on a.HMaterID=m.hitemid
+                                   left join Gy_Source s on a.HSourceID=s.HItemID
+                                   left join Gy_Group g on a.HGroupID=g.HItemID
+                                   left join Gy_Employee e on a.HWorkManID=e.HItemID " + sWhere + " and HRelationInterID='0'");
             return new SQLHelper.ClsCN().RunProcReturn(sql, "Sc_ICMOBillWorkQtyStatus_Tmp");
         }
         #endregion
@@ -631,7 +645,8 @@
         {
             try
             {
-                ds = new SQLHelper.ClsCN().RunProcReturn("select isnull(sum(HQty),0) HQty,isnull(sum(HBadCount),0) HBadQty,isnull(sum(HWasterQty),0) HWasterQty   from Sc_ProcessReportSub with (nolock)" + sWhere, "Sc_ProcessReportSub");
+                //ds = new SQLHelper.ClsCN().RunProcReturn("select isnull(sum(HQty),0) HQty,isnull(sum(HBadCount),0) HBadQty,isnull(sum(HWasterQty),0) HWasterQty   from Sc_ProcessReportSub with (nolock)" + sWhere, "Sc_ProcessReportSub");
+                ds = new SQLHelper.ClsCN().RunProcReturn("select isnull(sum(HQty),0) HQty,isnull(sum(HBadQty),0) HBadQty,isnull(sum(HWasterQty),0) HWasterQty   from Sc_ICMOBillWorkQtyStatus_Tmp with (nolock)" + sWhere, "Sc_ICMOBillWorkQtyStatus_Tmp");
                 if (ds.Tables[0].Rows.Count > 0)
                 {
                     objJsonResult.code = "1";
@@ -665,9 +680,9 @@
         /// </summary>
         /// <param name="msg"></param>
         /// <returns></returns>
-        [Route("Sc_MESBeginStepWorkBill/SaveGetMESProductReportFrom")]
+        [Route("Sc_MESBeginStepWorkBill/SaveGetMESProductReportFromxxx")]
         [HttpPost]
-        public object SaveGetMESProductReportFrom([FromBody] JObject msg)
+        public object SaveGetMESProductReportFromxxx([FromBody] JObject msg)
         {
             var _value = msg["msg"].ToString();
             string msg1 = _value.ToString();
@@ -849,9 +864,9 @@
         /// <param name="IsAudit">瀹℃牳(0),鍙嶅鏍�(1)</param>
         /// <param name="CurUserName">瀹℃牳浜�</param>
         /// <returns></returns>
-        [Route("Sc_MESBeginStepWorkBill/MESProductAuditProcessReportList")]
+        [Route("Sc_MESBeginStepWorkBill/MESProductAuditProcessReportListxxxx")]
         [HttpGet]
-        public object MESProductAuditProcessReportList(int HSourceID, int HSourceInterID, int HSourceEntryID, string HSourceBillNo, int HICMOInterID, int HICMOEntryID, int HInterID, int IsAudit, string CurUserName)
+        public object MESProductAuditProcessReportListxxxx(int HSourceID, int HSourceInterID, int HSourceEntryID, string HSourceBillNo, int HICMOInterID, int HICMOEntryID, int HInterID, int IsAudit, string CurUserName)
         {
             string ModRightNameCheck = "MES_ProductReport_Check";
             DBUtility.ClsPub.CurUserName = CurUserName;
@@ -1048,7 +1063,7 @@
                 //}
 
                 string sHSourceType = HSourceBillType;
-                string BillType = "3711";  //鍗曟嵁绫诲瀷 (鐢熶骇姹囨姤鍗�)
+                string BillType = "3714";  //鍗曟嵁绫诲瀷 (宸ュ簭姹囨姤鍗�)
                                            //寰楀埌mainid
                 long HInterID = DBUtility.ClsPub.CreateBillID(BillType, ref DBUtility.ClsPub.sExeReturnInfo);
                 //oCN.BeginTran();
@@ -1072,6 +1087,7 @@
                 //    return objJsonResult;
                 //}
 
+
                 WebS.ClsSc_ICMOReportBillMain model = new WebS.ClsSc_ICMOReportBillMain();
                 model.HInterID = HInterID;
                 model.HBillNo = ScMaxWork;
@@ -1080,12 +1096,13 @@
                 model.HDate = DateTime.Now;
                 model.HRemark = "";
                 model.HMaker = HMaker;
-                model.HEmpID = 0;
+                model.HEmpID = int.Parse(Czybm.ToString());
                 //model.HGroupID = DBUtility.ClsPub.isLong(ds.Tables[0].Rows[0]["HGroupID"]);
                 //model.HDeptID= DBUtility.ClsPub.isLong(ds0.Tables[0].Rows[0]["HDeptID"]);
                 //model.HPRDORGID = DBUtility.ClsPub.isLong(ds0.Tables[0].Rows[0]["HPRDORGID"]);
                 model.HMainSourceInterID = HICMOInterID;
                 model.HMainSourceEntryID = HICMOEntryID;
+                
 
                 //oWebs.Timeout = 30000;
                 bool flag = oWebs.set_SaveICMOProductReportBill_LayuiYqn(model, workcode, HSourceID, sHSourceType, HProcID, ref DBUtility.ClsPub.sErrInfo);
@@ -1120,5 +1137,292 @@
         }
         #endregion
 
+
+        #region 鎶ュ伐骞冲彴(宸ュ簭)浜ч噺姹囨姤淇濆瓨/缂栬緫--鏂�
+        /// <summary>
+        /// 鎶ュ伐骞冲彴(宸ュ簭)浜ч噺姹囨姤
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        [Route("Sc_MESBeginStepWorkBill/SaveGetMESProductReportFrom")]
+        [HttpPost]
+        public object SaveGetMESProductReportFrom([FromBody] JObject msg)
+        {
+            var _value = msg["msg"].ToString();
+            string msg1 = _value.ToString();
+            string[] sArray = msg1.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
+            string msg2 = sArray[0].ToString();
+            string refSav = sArray[1].ToString();
+            string s = "";
+            ListModels oListModels = new ListModels();
+            try
+            {
+                DLL.ClsSc_ICMOStepBillWorkQtyStatus_Tmp oBill = new DLL.ClsSc_ICMOStepBillWorkQtyStatus_Tmp();
+                List<Models.ClsSc_ICMOBillWorkQtyStatus_Tmp> lsmain = new List<Models.ClsSc_ICMOBillWorkQtyStatus_Tmp>();
+                msg2 = msg2.Replace("\\", "");
+                msg2 = msg2.Replace("\n", "");  //\n
+                lsmain = oListModels.getObjectByJson_Gy_MESProductReportFrom(msg2);
+                foreach (Models.ClsSc_ICMOBillWorkQtyStatus_Tmp oItem in lsmain)
+                {
+                    if (refSav == "Add")
+                    {
+                        //鍗曟嵁鍙锋槸鍚﹂噸澶�
+                        if (BillNew1.IsExistBillNo(ref ClsPub.sExeReturnInfo, oItem.HBillNo, BillStatus, BillOld1.omodel.HInterID))
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "鍗曟嵁鍙烽噸澶嶏紒涓嶅厑璁镐繚瀛橈紒";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                    }
+                    if (refSav == "Update")
+                    {
+                        if (BillOld1.ShowBill(oItem.HInterID, ref s) == false)
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "姝ゅ崟鎹湁璇紒";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                        //鍒ゆ柇鏄惁鍙紪杈�
+                        if (BillOld1.omodel.HChecker != "" && BillOld1.omodel.HChecker != null)
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "姝ゅ崟鎹凡缁忚瀹℃牳锛屼笉鍏佽淇敼锛�";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                        if (BillOld1.omodel.HBillStatus > 1)
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "姝ゅ崟鎹浜庝笉鍙紪杈戠姸鎬侊紝涓嶅厑璁镐慨鏀癸紒";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                        if (!DBUtility.Xt_BaseBillFun.Fun_AllowEditBill(BillOld1, ref s))
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = s + "锛屼笉鍏佽淇敼";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                    }
+
+                    oItem.HBillType = "3724";
+                    oItem.HBillSubType = "3724";
+                    oItem.HReportType = 3;//锛�1鏉$爜鎵弿锛�2鏈哄櫒姹囨姤锛�3鎵嬪伐褰曞叆锛�
+                    oItem.HBillStatus = 1;   //鍗曟嵁鐘舵�侊紙1鏈锛�2瀹℃牳閫氳繃锛�3鍏抽棴锛�4浣滃簾锛�5瀹℃牳閫�鍥�,6瀹℃牳涓�,7宸查槄锛�8宸插洖澶嶏紝9缁撴锛�10楠岃瘉,11涓嬭揪锛�12寮�宸�,13鐢宠瀹℃壒,15鐢宠妫�楠岋紝16 鍒ゅ畾鍚堟牸锛�17鍒ゅ畾涓嶅悎鏍硷級     
+                    if (DBUtility.ClsPub.isStrNull(oItem.HDate) == "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "淇濆瓨澶辫触锛佹病鏈夊崟鎹棩鏈燂紝鏃犳硶淇濆瓨锛�";
+                        objJsonResult.data = 1;
+                        return objJsonResult;
+                    }
+                    oBill.omodel = oItem;
+                }
+
+                //淇濆瓨
+                //淇濆瓨瀹屾瘯鍚庡鐞�
+                bool bResult;
+                if (oBill.omodel.HInterID == 0)
+                {
+                    bResult = oBill.AddBill(ref DBUtility.ClsPub.sExeReturnInfo);
+                    if (bResult)
+                    {
+                        objJsonResult.HInterID = DBUtility.ClsPub.sExeReturnInfo; //杩斿洖涓籌D
+                        //绯荤粺鍙傛暟  鑷姩瀹℃牳
+                        string sReturn = "";
+                        if (oSystemParameter.ShowBill(ref sReturn) == true)
+                        {
+                            if (oSystemParameter.omodel.Sc_ICMOBillWorkQtyStatus_AutoCheck == "Y") //绯荤粺鍙傛暟  鑷姩瀹℃牳 
+                            {
+                                objJsonResult.Verify = "Y";
+                            }
+                            else
+                            {
+                                objJsonResult.Verify = "N";
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    bResult = oBill.ModifyBill(oBill.omodel.HInterID, ref DBUtility.ClsPub.sExeReturnInfo);
+                    objJsonResult.Verify = "N";
+                }
+                if (bResult)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 1;
+                    objJsonResult.Message = "淇濆瓨鎴愬姛锛�";
+                    objJsonResult.data = 1;
+                    return objJsonResult;
+                }
+                else
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "淇濆瓨澶辫触锛�";
+                    objJsonResult.data = 1;
+                    return objJsonResult;
+                }
+            }
+            catch (Exception e)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = e.Message;
+                objJsonResult.data = 1;
+                return objJsonResult;
+            }
+        }
+        #endregion
+
+        #region 鎶ュ伐骞冲彴浜ч噺姹囨姤瀹℃牳銆佸弽瀹℃牳
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="HInterID">鍗曟嵁ID</param>
+        /// <param name="IsAudit">瀹℃牳(0),鍙嶅鏍�(1)</param>
+        /// <param name="CurUserName">瀹℃牳浜�</param>
+        /// <returns></returns>
+        [Route("Sc_MESBeginStepWorkBill/MESProductAuditProcessReportList")]
+        [HttpGet]
+        public object MESProductAuditProcessReportList(int HSourceID, int HSourceInterID, int HSourceEntryID, string HSourceBillNo, int HICMOInterID, int HICMOEntryID, int HInterID, int IsAudit, string CurUserName)
+        {
+            string ModRightNameCheck = "MES_ProcExchReport_Check";
+            DBUtility.ClsPub.CurUserName = CurUserName;
+            try
+            {
+                string StrMessage = "";
+                //瀹℃牳鏉冮檺
+                if (!WebClsPub.Security_Log(ModRightNameCheck, 1, false, CurUserName, ref StrMessage))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = StrMessage;
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+                if (HInterID <= 0)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "HInterID灏忎簬0锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+                Int64 lngBillKey = 0;
+                lngBillKey = DBUtility.ClsPub.isLong(HInterID);
+                DLL.ClsSc_ICMOStepBillWorkQtyStatus_Tmp oBill = new DLL.ClsSc_ICMOStepBillWorkQtyStatus_Tmp();
+                //鏌ョ湅鏄惁宸插鏍�,鍏抽棴,浣滃簾
+                if (oBill.ShowBill(lngBillKey, ref DBUtility.ClsPub.sExeReturnInfo))
+                {
+                    if (oBill.omodel.HCloseMan.Trim() != "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁宸插叧闂�!涓嶈兘鍐嶆瀹℃牳锛�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+                    if (oBill.omodel.HDeleteMan.Trim() != "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁宸蹭綔搴�!涓嶈兘鍐嶆瀹℃牳锛�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+                    if (IsAudit == 0)  //瀹℃牳鍒ゆ柇
+                    {
+                        if (oBill.omodel.HChecker.Trim() != "")
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "鍗曟嵁宸插鏍�!涓嶈兘鍐嶆瀹℃牳锛�";
+                            objJsonResult.data = null;
+                            return objJsonResult;
+                        }
+                    }
+                    if (IsAudit == 1) //鍙嶅鏍稿垽鏂�
+                    {
+                        if (oBill.omodel.HChecker.Trim() == "")
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "鍗曟嵁鏈鏍�!涓嶉渶瑕佸弽瀹℃牳!";
+                            objJsonResult.data = null;
+                            return objJsonResult;
+                        }
+                    }
+                }
+                else
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鍗曟嵁涓嶅瓨鍦�!鍘熷洜:" + DBUtility.ClsPub.sExeReturnInfo;
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+                if (IsAudit == 0) //瀹℃牳鎻愪氦
+                {
+                    //瀹℃牳鎻愪氦
+                    if (oBill.CheckBill(HSourceID, HSourceInterID, HSourceEntryID, HSourceBillNo, HICMOInterID, HICMOEntryID, lngBillKey, ref DBUtility.ClsPub.sExeReturnInfo) == true)
+                    {
+                        objJsonResult.code = "1";
+                        objJsonResult.count = 1;
+                        objJsonResult.Message = "瀹℃牳鎴愬姛";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+                    else
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "瀹℃牳澶辫触!鍘熷洜:" + DBUtility.ClsPub.sExeReturnInfo;
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+                }
+                if (IsAudit == 1) //鍙嶅鏍告彁浜�
+                {
+                    //鍙嶅鏍告彁浜bandonCheck
+                    if (oBill.AbandonCheck(HSourceID, HSourceInterID, HSourceEntryID, HSourceBillNo, HICMOInterID, HICMOEntryID, lngBillKey, ref DBUtility.ClsPub.sExeReturnInfo) == true)
+                    {
+                        objJsonResult.code = "1";
+                        objJsonResult.count = 1;
+                        objJsonResult.Message = "鍙嶅鏍告垚鍔�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+                    else
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍙嶅鏍稿け璐�!鍘熷洜:" + DBUtility.ClsPub.sExeReturnInfo;
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+                }
+                return objJsonResult;
+            }
+            catch (Exception e)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "瀹℃牳澶辫触鎴栬�呭弽瀹℃牳澶辫触锛�" + e.ToString();
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+        }
+        #endregion
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1