From 4545b915123fb7b7535b697f6e82b12f525f8b71 Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期六, 16 七月 2022 21:16:19 +0800
Subject: [PATCH] 工序检验接口编写

---
 VueWebApi/DLL/DAL/ErpSyncMesDAL.cs                             |   37 +
 VueWebApi/obj/Release/VueWebApi.pdb                            |    0 
 VueWebApi/obj/Debug/VueWebApi.csproj.CoreCompileInputs.cache   |    2 
 VueWebApi/Logs/2022-07-15.TXT                                  |    0 
 VueWebApi/DLL/BLL/QualityManagementBLL.cs                      |   88 +++
 VueWebApi/Controllers/QualityManagementController.cs           |  214 ++++++++
 .vs/VueWebApi/v16/.suo                                         |    0 
 VueWebApi/DLL/DAL/ProductionManagementDAL.cs                   |   36 
 VueWebApi/DLL/DAL/LoginDAL.cs                                  |    2 
 VueWebApi/Tools/ChannelActionFilterAttribute.cs                |   39 +
 VueWebApi/VueWebApi.csproj                                     |    3 
 VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb     |    0 
 VueWebApi/VueWebApi.csproj.user                                |    2 
 VueWebApi/Logs/2022-07-14.TXT                                  |    0 
 VueWebApi/bin/VueWebApi.pdb                                    |    0 
 VueWebApi/obj/Release/VueWebApi.csproj.CoreCompileInputs.cache |    2 
 VueWebApi/Controllers/ErpSyncMesController.cs                  |   15 
 VueWebApi/DLL/DAL/ProductModelDAL.cs                           |   10 
 VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user |    9 
 VueWebApi/DLL/BLL/ErpSyncMesBLL.cs                             |    9 
 VueWebApi/bin/VueWebApi.xml                                    |   94 +++
 VueWebApi/Logs/2022-07-16.TXT                                  |   23 
 /dev/null                                                      |    0 
 VueWebApi/Tools/ScanStartReport.cs                             |   18 
 VueWebApi/obj/Debug/VueWebApi.pdb                              |    0 
 VueWebApi/obj/Release/Package/PackageTmp/grf/外协收料标签.grf        |  310 ++++++++++++
 VueWebApi/DLL/DAL/QualityManagementDAL.cs                      |  571 ++++++++++++++++++++++
 27 files changed, 1,432 insertions(+), 52 deletions(-)

diff --git a/.vs/VueWebApi/v16/.suo b/.vs/VueWebApi/v16/.suo
index f6e33f1..b65966c 100644
--- a/.vs/VueWebApi/v16/.suo
+++ b/.vs/VueWebApi/v16/.suo
Binary files differ
diff --git a/VueWebApi/Controllers/ErpSyncMesController.cs b/VueWebApi/Controllers/ErpSyncMesController.cs
index cd9b80b..bdcccf3 100644
--- a/VueWebApi/Controllers/ErpSyncMesController.cs
+++ b/VueWebApi/Controllers/ErpSyncMesController.cs
@@ -64,6 +64,10 @@
         #endregion
 
         #region[鍩虹璁剧疆:寰�鏉ュ崟浣嶅悓姝
+        /// <summary>
+        /// 鍩虹璁剧疆:寰�鏉ュ崟浣嶅悓姝�
+        /// </summary>
+        /// <returns></returns>
         [Route(template: "SeaveSearchPartner")]
         [HttpPost]
         public HttpResponseMessage SeaveSearchPartner()
@@ -73,5 +77,16 @@
             return TJson.toJson(mes);
         }
         #endregion
+
+        #region[鐢熶骇绠$悊锛氱敓浜ц鍗曞悓姝
+        [Route(template: "SeaveSearchErpOrder")]
+        [HttpPost]
+        public HttpResponseMessage SeaveSearchErpOrder()
+        {
+            var username = HttpContext.Current.Request.Cookies["admin"].Value.ToString(); //鎿嶄綔浜哄憳
+            mes = ErpSyncMesBLL.SeaveSearchErpOrder(username);
+            return TJson.toJson(mes);
+        }
+        #endregion
     }
 }
diff --git a/VueWebApi/Controllers/QualityManagementController.cs b/VueWebApi/Controllers/QualityManagementController.cs
new file mode 100644
index 0000000..eebad04
--- /dev/null
+++ b/VueWebApi/Controllers/QualityManagementController.cs
@@ -0,0 +1,214 @@
+锘縰sing Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Web;
+using System.Web.Http;
+using VueWebApi.DLL.BLL;
+using VueWebApi.Models;
+using VueWebApi.Tools;
+
+namespace VueWebApi.Controllers
+{
+    [RoutePrefix(prefix: "api/QualityManagement")]
+    [ControllerGroup("璐ㄩ噺绠$悊", "鍦ㄧ嚎鎺ュ彛")]
+    public class QualityManagementController : ApiController
+    {
+        //瀹氫箟鍏ㄥ眬淇℃伅杩斿洖鍙橀噺
+        ToMessage mes = new ToMessage();
+        RedisHelper redis = new RedisHelper();
+
+
+        #region[璐ㄩ噺绠$悊,缂洪櫡瀹氫箟鏌ヨ鍒楄〃]
+        /// <summary>
+        /// 璐ㄩ噺绠$悊,缂洪櫡瀹氫箟鏌ヨ鍒楄〃
+        /// </summary>
+        /// <param name="defectcode">缂洪櫡浠g爜</param>
+        /// <param name="defectname">缂洪櫡鍚嶇О</param>
+        /// <param name="defectdescr">缂洪櫡鎻忚堪</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勫垯</param>
+        /// <returns></returns>
+        [Route(template: "DedectSearch")]
+        [HttpGet]
+        public HttpResponseMessage DedectSearch(string defectcode = null, string defectname = null, string defectdescr = null, int page = 0, int rows = 0, string prop = null, string order = null)
+        {
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = QualityManagementBLL.DedectSearch(defectcode, defectname, defectdescr, startNum, endNum, prop, order);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[璐ㄩ噺绠$悊锛岀己闄峰畾涔夋柊澧炪�佺紪杈戞彁浜
+        /// <summary>
+        /// 璐ㄩ噺绠$悊锛岀己闄峰畾涔夋柊澧炪�佺紪杈戞彁浜�
+        /// </summary>
+        /// <param name="obj">鎻愪氦鏁版嵁</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateDedect")]
+        [HttpPost]
+        public HttpResponseMessage AddUpdateDedect([FromBody] JObject obj)
+        {
+            string defectcode = obj["defectcode"].ToString();    //缂洪櫡浠g爜
+            string defectname = obj["defectname"].ToString(); //缂洪櫡鍚嶇О
+            string defectdescr = obj["defectdescr"].ToString(); //缂洪櫡鎻忚堪
+            string opertype = obj["OperType"].ToString();  //鎿嶄綔绫诲瀷
+            var username = HttpContext.Current.Request.Cookies["admin"].Value.ToString(); //鎿嶄綔浜哄憳
+            mes = QualityManagementBLL.AddUpdateDedect(defectcode, defectname, defectdescr, opertype, username);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[璐ㄩ噺绠$悊锛岀己闄峰畾涔夊垹闄
+        /// <summary>
+        /// 璐ㄩ噺绠$悊锛岀己闄峰畾涔夊垹闄�
+        /// </summary>
+        /// <param name="defectcode">缂洪櫡浠g爜</param>
+        /// <returns></returns>
+        [Route(template: "DeleteDedect")]
+        [HttpPost]
+        public HttpResponseMessage DeleteDedect(string defectcode)
+        {
+            mes = QualityManagementBLL.DeleteDedect(defectcode);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+
+
+        #region[宸ュ簭妫�楠屾爣鍑嗗垪琛ㄦ煡璇
+        /// <summary>
+        /// 宸ュ簭妫�楠屾爣鍑嗗垪琛ㄦ煡璇�
+        /// </summary>
+        /// <param name="stanedcode">鏍囧噯浠g爜</param>
+        /// <param name="stanedname">鏍囧噯鍚嶇О</param>
+        /// <param name="staneddescr">鏍囧噯鎻忚堪</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勬牸</param>
+        /// <returns></returns>
+        [Route(template: "StepCheckStanedSearch")]
+        [HttpGet]
+        public HttpResponseMessage StepCheckStanedSearch(string stanedcode = null, string stanedname = null, string staneddescr = null, int page = 0, int rows = 0, string prop = null, string order = null)
+        {
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = QualityManagementBLL.StepCheckStanedSearch(stanedcode, stanedname, staneddescr, startNum, endNum, prop, order);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗙紪杈戣幏鍙栨暟鎹甝
+        /// <summary>
+        /// 宸ュ簭妫�楠屾爣鍑嗙紪杈戣幏鍙栨暟鎹�
+        /// </summary>
+        /// <param name="defectcode">宸ュ簭妫�楠屾爣鍑嗙紪鐮�</param>
+        /// <returns></returns>
+        [Route(template: "EditStepCheckStanedSearch")]
+        [HttpPost]
+        public HttpResponseMessage EditStepCheckStanedSearch(string defectcode)
+        {
+            mes = QualityManagementBLL.EditStepCheckStanedSearch(defectcode);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戣幏鍙栨楠岄」鐩笅鎷夊垪琛╙
+        /// <summary>
+        /// 宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戣幏鍙栨楠岄」鐩笅鎷夊垪琛�
+        /// </summary>
+        /// <returns></returns>
+        [Route(template: "StepCheckItemSelect")]
+        [HttpGet]
+        public HttpResponseMessage StepCheckItemSelect()
+        {
+           mes = QualityManagementBLL.StepCheckItemSelect();
+           return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戞彁浜
+        /// <summary>
+        /// 宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戞彁浜�
+        /// </summary>
+        /// <param name="opertype">鎿嶄綔绫诲瀷</param>
+        /// <param name="json">鎻愪氦鏁版嵁</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateStepCheckStaned")]
+        [HttpPost]
+        public HttpResponseMessage AddUpdateStepCheckStaned(string opertype, RoutEdit json)
+        {
+            var username = HttpContext.Current.Request.Cookies["admin"].Value.ToString(); //鎿嶄綔浜哄憳
+            mes = QualityManagementBLL.AddUpdateStepCheckStaned(opertype, json, username);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+
+
+        #region[宸ュ簭妫�楠岄」鐩垪琛ㄦ煡璇
+        /// <summary>
+        /// 宸ュ簭妫�楠岄」鐩垪琛ㄦ煡璇�
+        /// </summary>
+        /// <param name="itemcode">妫�楠岄」鐩紪鐮�</param>
+        /// <param name="itemname">妫�楠岄」鐩悕绉�</param>
+        /// <param name="itemdescr">妫�楠岄」鐩弿杩�</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勫垯</param>
+        /// <returns></returns>
+        [Route(template: "StepCheckItemSearch")]
+        [HttpGet]
+        public HttpResponseMessage StepCheckItemSearch(string itemcode = null, string itemname = null, string itemdescr = null, int page = 0, int rows = 0, string prop = null, string order = null)
+        {
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = QualityManagementBLL.StepCheckItemSearch(itemcode, itemname, itemdescr, startNum, endNum, prop, order);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠岄」鐩柊澧炪�佺紪杈戞彁浜
+        /// <summary>
+        /// 宸ュ簭妫�楠岄」鐩柊澧炪�佺紪杈戞彁浜�
+        /// </summary>
+        /// <param name="obj">鎻愪氦鏁版嵁</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateStepCheckItem")]
+        [HttpPost]
+        public HttpResponseMessage AddUpdateStepCheckItem([FromBody] JObject obj)
+        {
+            string checkitemcode = obj["checkitemcode"].ToString();    //宸ュ簭妫�楠岄」鐩唬鐮�
+            string checkitemname = obj["checkitemname"].ToString(); //宸ュ簭妫�楠岄」鐩悕绉�
+            string checkitemdescr = obj["checkitemdescr"].ToString(); //宸ュ簭妫�楠岄」鐩弿杩�
+            string opertype = obj["OperType"].ToString();  //鎿嶄綔绫诲瀷
+            var username = HttpContext.Current.Request.Cookies["admin"].Value.ToString(); //鎿嶄綔浜哄憳
+            mes = QualityManagementBLL.AddUpdateStepCheckItem(checkitemcode, checkitemname, checkitemdescr, opertype, username);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠岄」鐩垹闄
+        /// <summary>
+        /// 宸ュ簭妫�楠岄」鐩垹闄�
+        /// </summary>
+        /// <param name="checkitemcode">妫�楠岄」鐩唬鐮�</param>
+        /// <returns></returns>
+        [Route(template: "DeleteStepCheckItem")]
+        [HttpPost]
+        public HttpResponseMessage DeleteStepCheckItem(string checkitemcode)
+        {
+            mes = QualityManagementBLL.DeleteStepCheckItem(checkitemcode);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+    }
+}
diff --git a/VueWebApi/DLL/BLL/ErpSyncMesBLL.cs b/VueWebApi/DLL/BLL/ErpSyncMesBLL.cs
index a9d05f8..937aebf 100644
--- a/VueWebApi/DLL/BLL/ErpSyncMesBLL.cs
+++ b/VueWebApi/DLL/BLL/ErpSyncMesBLL.cs
@@ -36,5 +36,14 @@
             return ErpSyncMesDAL.SeaveSearchPartner(username);
         }
         #endregion
+
+        #region[鐢熶骇绠$悊锛氱敓浜ц鍗曞悓姝
+        public static ToMessage SeaveSearchErpOrder(string username)
+        {
+            return ErpSyncMesDAL.SeaveSearchErpOrder(username);
+        }
+        #endregion
+
+
     }
 }
\ No newline at end of file
diff --git a/VueWebApi/DLL/BLL/QualityManagementBLL.cs b/VueWebApi/DLL/BLL/QualityManagementBLL.cs
new file mode 100644
index 0000000..1c913db
--- /dev/null
+++ b/VueWebApi/DLL/BLL/QualityManagementBLL.cs
@@ -0,0 +1,88 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using VueWebApi.DLL.DAL;
+using VueWebApi.Models;
+using VueWebApi.Tools;
+
+namespace VueWebApi.DLL.BLL
+{
+    public class QualityManagementBLL
+    {
+
+        #region[璐ㄩ噺绠$悊,缂洪櫡瀹氫箟鏌ヨ鍒楄〃]
+        public static ToMessage DedectSearch(string defectcode, string defectname, string defectdescr, int startNum, int endNum, string prop, string order)
+        {
+            return QualityManagementDAL.DedectSearch(defectcode, defectname, defectdescr, startNum, endNum, prop, order);
+        }
+        #endregion
+
+        #region[璐ㄩ噺绠$悊锛岀己闄峰畾涔夋柊澧炪�佺紪杈戞彁浜
+        public static ToMessage AddUpdateDedect(string defectcode, string defectname, string defectdescr, string opertype, string username)
+        {
+            return QualityManagementDAL.AddUpdateDedect(defectcode, defectname, defectdescr, opertype, username);
+        }
+        #endregion
+
+        #region[璐ㄩ噺绠$悊锛岀己闄峰畾涔夊垹闄
+        public static ToMessage DeleteDedect(string defectcode)
+        {
+            return QualityManagementDAL.DeleteDedect(defectcode);
+        }
+        #endregion
+
+
+
+        #region[宸ュ簭妫�楠屾爣鍑嗗垪琛ㄦ煡璇
+        public static ToMessage StepCheckStanedSearch(string stanedcode, string stanedname, string staneddescr, int startNum, int endNum, string prop, string order)
+        {
+            return QualityManagementDAL.StepCheckStanedSearch(stanedcode, stanedname, staneddescr, startNum, endNum, prop, order);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗙紪杈戣幏鍙栨暟鎹甝
+        public static ToMessage EditStepCheckStanedSearch(string defectcode)
+        {
+            return QualityManagementDAL.EditStepCheckStanedSearch(defectcode);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戣幏鍙栨楠岄」鐩笅鎷夊垪琛╙
+        public static ToMessage StepCheckItemSelect()
+        {
+            return QualityManagementDAL.StepCheckItemSelect();
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戞彁浜
+        public static ToMessage AddUpdateStepCheckStaned(string opertype, RoutEdit json, string username)
+        {
+            return QualityManagementDAL.AddUpdateStepCheckStaned(opertype,json,username);
+        }
+        #endregion
+
+
+
+        #region[宸ュ簭妫�楠岄」鐩垪琛ㄦ煡璇
+        public static ToMessage StepCheckItemSearch(string itemcode, string itemname, string itemdescr, int startNum, int endNum, string prop, string order)
+        {
+            return QualityManagementDAL.StepCheckItemSearch(itemcode, itemname, itemdescr, startNum,endNum, prop, order);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠岄」鐩柊澧炪�佺紪杈戞彁浜
+        public static ToMessage AddUpdateStepCheckItem(string checkitemcode, string checkitemname, string checkitemdescr, string opertype, string username)
+        {
+            return QualityManagementDAL.AddUpdateStepCheckItem(checkitemcode, checkitemname, checkitemdescr, opertype, username);
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠岄」鐩垹闄
+        public static ToMessage DeleteStepCheckItem(string checkitemcode)
+        {
+            return QualityManagementDAL.DeleteStepCheckItem(checkitemcode);
+        }
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/VueWebApi/DLL/DAL/ErpSyncMesDAL.cs b/VueWebApi/DLL/DAL/ErpSyncMesDAL.cs
index 94f4db8..e0747f4 100644
--- a/VueWebApi/DLL/DAL/ErpSyncMesDAL.cs
+++ b/VueWebApi/DLL/DAL/ErpSyncMesDAL.cs
@@ -157,5 +157,42 @@
             return mes;
         }
         #endregion
+
+        #region[鐢熶骇绠$悊锛氱敓浜ц鍗曞悓姝
+        public static ToMessage SeaveSearchErpOrder(string username)
+        {
+            var sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //瀛樺偍杩囩▼鍚�
+                sql = @"h_p_IFCLD_ERPMO";
+                dynamicParams.Add("@username", username);
+                bool a = DapperHelper.IsProcedure(sql, dynamicParams);
+                if (a)
+                {
+                    mes.code = "200";
+                    mes.count = 0;
+                    mes.Message = "鍚屾鐢熶骇璁㈠崟鎴愬姛!";
+                    mes.data = null;
+                }
+                else
+                {
+                    mes.code = "300";
+                    mes.count = 0;
+                    mes.Message = "鍚屾鐢熶骇璁㈠崟澶辫触!";
+                    mes.data = null;
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
     }
 }
\ No newline at end of file
diff --git a/VueWebApi/DLL/DAL/LoginDAL.cs b/VueWebApi/DLL/DAL/LoginDAL.cs
index 5f64da6..a243bb9 100644
--- a/VueWebApi/DLL/DAL/LoginDAL.cs
+++ b/VueWebApi/DLL/DAL/LoginDAL.cs
@@ -178,7 +178,7 @@
                 sql = @"update [dbo].[TUser] set password=@newpassword where usercode=@usercode and username=@username and password=@password";
                 list.Add(new { str = sql, parm = new { usercode = usercode, username = username, password = password, newpassword = newpassword } });
                 //鍐欏叆鎿嶄綔璁板綍琛�
-                sql = @"insert into T_Bas_User_Operlog(usercode,oper_date,oper_type,description,origin)";
+                sql = @"insert into T_Bas_User_Operlog(usercode,oper_date,oper_type,description,origin) values(@usercode,@oper_date,@oper_type,@description,@origin)";
                 list.Add(new
                 {
                     str = sql,
diff --git a/VueWebApi/DLL/DAL/ProductModelDAL.cs b/VueWebApi/DLL/DAL/ProductModelDAL.cs
index 642940f..3ab2f66 100644
--- a/VueWebApi/DLL/DAL/ProductModelDAL.cs
+++ b/VueWebApi/DLL/DAL/ProductModelDAL.cs
@@ -446,7 +446,7 @@
                             from TMateriel_Info A
                             left join TUom B on A.uom_code=B.code
                             left join TMateriel_Type C on A.materieltype_code=C.code
-                            left join T_Dict D on C.dict_code=D.code and D.dict_type='CHLX'
+                            left join T_Dict D on A.stocktype_code=D.code and D.dict_type='CHLX'
                             left join T_Sec_Stck T on A.stck_code=T.code 
                             where A.is_delete<>'1' " + search;
                 var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
@@ -474,13 +474,14 @@
             {
                 if (operType == "Add")
                 {
-                    var sql = @"insert into TMateriel_Info(partcode,partname,partspec,uom_code,materieltype_code,stck_code,maxqty,minqty,lm_user,lm_date) 
-                            values(@materialcode,@materialname,@materialspec,@uomcode,@materialtypecode,@warehousecode,@maxstockqty,@minstockqty,@username,@CreateDate)";
+                    var sql = @"insert into TMateriel_Info(partcode,partname,partspec,uom_code,stocktype_code,materieltype_code,stck_code,maxqty,minqty,lm_user,lm_date) 
+                            values(@materialcode,@materialname,@materialspec,@uomcode,@stocktypecode,@materialtypecode,@warehousecode,@maxstockqty,@minstockqty,@username,@CreateDate)";
                     dynamicParams.Add("@materialcode", materialcode);
                     dynamicParams.Add("@materialname", materialname);
                     dynamicParams.Add("@materialspec", materialspec);
                     dynamicParams.Add("@uomcode", uomcode);
                     dynamicParams.Add("@warehousecode", warehousecode);
+                    dynamicParams.Add("@stocktypecode", stocktypecode);
                     dynamicParams.Add("@materialtypecode", materialtypecode);
                     dynamicParams.Add("@minstockqty", minstockqty);
                     dynamicParams.Add("@maxstockqty", maxstockqty);
@@ -504,13 +505,14 @@
                 }
                 if (operType == "Update")
                 {
-                    var sql = @"update TMateriel_Info set partname=@materialname,partspec=@materialspec,uom_code=@uomcode,materieltype_code=@materialtypecode,stck_code=@warehousecode,
+                    var sql = @"update TMateriel_Info set partname=@materialname,partspec=@materialspec,uom_code=@uomcode,stocktype_code=@stocktypecode,materieltype_code=@materialtypecode,stck_code=@warehousecode,
                                 maxqty=@maxstockqty,minqty=@minstockqty,lm_user=@username,lm_date=@CreateDate where id=@materialid";
                     dynamicParams.Add("@materialid", materialid);
                     dynamicParams.Add("@materialname", materialname);
                     dynamicParams.Add("@materialspec", materialspec);
                     dynamicParams.Add("@uomcode", uomcode);
                     dynamicParams.Add("@warehousecode", warehousecode);
+                    dynamicParams.Add("@stocktypecode", stocktypecode);
                     dynamicParams.Add("@materialtypecode", materialtypecode);
                     dynamicParams.Add("@minstockqty", minstockqty);
                     dynamicParams.Add("@maxstockqty", maxstockqty);
diff --git a/VueWebApi/DLL/DAL/ProductionManagementDAL.cs b/VueWebApi/DLL/DAL/ProductionManagementDAL.cs
index fef2858..2f7a694 100644
--- a/VueWebApi/DLL/DAL/ProductionManagementDAL.cs
+++ b/VueWebApi/DLL/DAL/ProductionManagementDAL.cs
@@ -371,7 +371,7 @@
             try
             {
                 //鑾峰彇杞﹂棿涓嬫媺妗嗘暟鎹�
-                sql = @"select R.code,R.name  from TMateriel_Info A
+                sql = @"select R.code,R.name,A.default_route  from TMateriel_Info A
                         inner join  TMateriel_Route M on A.partcode=M.materiel_code
                         inner join  TFlw_Rout R on M.route_code=R.code
                         where A.partcode=@partcode ";
@@ -1337,13 +1337,13 @@
                 //鍒ゆ柇鏄惁鏈夋姤宸ヨ褰�(鏈夛細淇敼 鏃狅細鏂板)
                 sql = @"select *  from TK_Wrk_Record where wo_code=@wo_code and step_code=@step_code and style='B'";
                 dynamicParams.Add("@wo_code", mesordercode);
-                dynamicParams.Add("@stepcode", stepcode);
+                dynamicParams.Add("@step_code", stepcode);
                 var data = DapperHelper.selectdata(sql, dynamicParams);
                 if (data.Rows.Count > 0)
                 {
                     //淇敼鎶ュ伐璁板綍
-                    sql = @"update TK_Wrk_Record set good_qty=good+@reportqty,ng_qty=ng_qty+@ngqty
-                                lm_user=@username,lm_date=@CreateDate where wo_code=@mesordercode and step_code=@stepcode";
+                    sql = @"update TK_Wrk_Record set good_qty=good_qty+@reportqty,ng_qty=ng_qty+@ngqty,
+                                lm_user=@username,lm_date=@CreateDate where wo_code=@mesordercode and step_code=@stepcode and style='B'";
                     list.Add(new { str = sql, parm = new { reportqty = decimal.Parse(reportqty), ngqty = decimal.Parse(ngqty), mesordercode = mesordercode, stepcode = stepcode, username = username, CreateDate = date } });
                     //鍐欏叆瀛愯〃
                     for (int i = 0; i < arra.Length; i++)
@@ -1353,7 +1353,7 @@
                         list.Add(new { str = sql, parm = new { m_id = int.Parse(data.Rows[0]["ID"].ToString()), eqp_code = eqpcode, report_person = arra[i], report_date = date, report_qty = reportqty, usergroup_code = usergroupcode, ng_qty = ngqty, style = "B", lm_user = username, lm_date = date } });
 
                     }
-                    if (badcode != "" || badcode != null)
+                    if (badcode != "" &&  ngqty != "0")
                     {
                         //鍐欏叆缂洪櫡璁板綍琛�
                         for (int i = 0; i < arra1.Length; i++)
@@ -1383,7 +1383,7 @@
                         list.Add(new { str = sql, parm = new { m_id = int.Parse(dt.Rows[0]["ID"].ToString()), eqp_code = eqpcode, report_person = arra[i], report_date = date, report_qty = reportqty, usergroup_code = usergroupcode, ng_qty = ngqty, style = "B", lm_user = username, lm_date = date } });
 
                     }
-                    if (badcode != "" || badcode != null)
+                    if (badcode != "" && ngqty != "0")
                     {
                         //鍐欏叆缂洪櫡璁板綍琛�
                         for (int i = 0; i < arra1.Length; i++)
@@ -1452,11 +1452,11 @@
                 {
                     //淇敼鍙戞枡璁板綍
                     sql = @"update TK_Wrk_OutRecord set fqty=fqty+@fqty,lm_user=@username,lm_date=@CreateDate
-                             where wo_code=@mesordercode and step_code=@stepcode and wx_code=@wx_code";
+                             where wo_code=@mesordercode and step_code=@stepcode and wx_code=@wx_code and style='F'";
                     list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepcode = stepcode, wx_code = wxcode, fqty = decimal.Parse(fqty), username = username, CreateDate = date } });
                     //鍐欏叆瀛愯〃
-                    sql = @"insert into  TK_Wrk_OutRecordSub(m_id,wx_code,out_person,out_time,fqty,syle,lm_user,lm_date) 
-                                values(@m_id,@wx_code,@out_person,@out_time,@fqty,@lm_user,@lm_date)";
+                    sql = @"insert into  TK_Wrk_OutRecordSub(m_id,wx_code,out_person,out_time,fqty,style,lm_user,lm_date) 
+                                values(@m_id,@wx_code,@out_person,@out_time,@fqty,@style,@lm_user,@lm_date)";
                     list.Add(new { str = sql, parm = new { m_id = int.Parse(data.Rows[0]["ID"].ToString()), wx_code = wxcode, out_person = outuser, out_time = date, fqty = fqty, style = 'F', lm_user = username, lm_date = date } });
                 }
                 else
@@ -1528,7 +1528,7 @@
 
                 list.Clear();
                 //鍒ゆ柇鏄惁鏈夋敹鏂欒褰�(鏈夛細锛堝悓宸ュ崟+宸ュ簭+澶栧崗渚涙柟淇敼锛� 鏃狅細鏂板)
-                sql = @"select *  from TK_Wrk_OutRecord where wo_code=@wo_code and step_code=@step_code and wx_code=@wxcode and style='F'";
+                sql = @"select *  from TK_Wrk_OutRecord where wo_code=@wo_code and step_code=@step_code and wx_code=@wx_code and style='S'";
                 dynamicParams.Add("@wo_code", mesordercode);
                 dynamicParams.Add("@step_code", stepcode);
                 dynamicParams.Add("@wx_code", wxcode);
@@ -1536,21 +1536,21 @@
                 if (data.Rows.Count > 0)
                 {
                     //淇敼澶栧崗璁板綍涓昏〃
-                    sql = @"update TK_Wrk_OutRecord set sqty=sqty+@sqty,ng_qty=@ngqty,lm_user=@username,lm_date=@CreateDate
-                             where wo_code=@mesordercode and step_code=@stepcode and wx_code=@wx_code";
+                    sql = @"update TK_Wrk_OutRecord set sqty=sqty+@sqty,ng_qty=ng_qty+@ngqty,lm_user=@username,lm_date=@CreateDate
+                             where wo_code=@mesordercode and step_code=@stepcode and wx_code=@wx_code and style='S'";
                     list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepcode = stepcode, wx_code = wxcode, sqty = decimal.Parse(sqty), ngqty = decimal.Parse(ngqty), username = username, CreateDate = date } });
                     //鍐欏叆澶栧崗璁板綍瀛愯〃
-                    sql = @"insert into  TK_Wrk_OutRecordSub(m_id,wx_code,in_person,in_time,sqty,ng_qty,syle,lm_user,lm_date) 
-                                values(@m_id,@wx_code,@in_person,@in_time,@sqty,@ngqty,@lm_user,@lm_date)";
+                    sql = @"insert into  TK_Wrk_OutRecordSub(m_id,wx_code,in_person,in_time,sqty,ng_qty,style,lm_user,lm_date) 
+                                values(@m_id,@wx_code,@in_person,@in_time,@sqty,@ngqty,@style,@lm_user,@lm_date)";
                     list.Add(new { str = sql, parm = new { m_id = int.Parse(data.Rows[0]["ID"].ToString()), wx_code = wxcode, in_person = inuser, in_time = date, sqty = sqty, ngqty = ngqty, style = 'S', lm_user = username, lm_date = date } });
 
-                    if (badcode != "" || badcode != null)
+                    if (badcode != "" && ngqty != "0")
                     {
                         //鍐欏叆缂洪櫡璁板綍琛�
                         for (int i = 0; i < arra1.Length; i++)
                         {
                             sql = @"insert into  CSR_WorkRecord_Defect(record_id,wo_code,partnumber,step_seq,step_code,defect_qty,defect_code,style,lm_user,lm_date) 
-                                values(@record_id,@wo_code,@partcode,@stepseq,@stepcode,@ngqty,@defect_code,@stepcode,@style,@lm_user,@lm_date)";
+                                values(@record_id,@wo_code,@partcode,@stepseq,@stepcode,@ngqty,@defect_code,@style,@lm_user,@lm_date)";
                             list.Add(new { str = sql, parm = new { record_id = int.Parse(data.Rows[0]["ID"].ToString()), wo_code = mesordercode, partcode = partcode, stepseq = stepseq, stepcode = stepcode, ngqty = ngqty, defect_code = arra1[i], style = "S", lm_user = username, lm_date = date } });
 
                         }
@@ -1571,13 +1571,13 @@
                                 values(@m_id,@wxcode,@in_person,@in_time,@sqty,@ng_qty,@style,@lm_user,@lm_date)";
                     list.Add(new { str = sql, parm = new { m_id = int.Parse(dt.Rows[0]["ID"].ToString()), wxcode = wxcode, in_person = inuser, in_time = date, sqty = sqty, ng_qty = ngqty, style = "S", lm_user = username, lm_date = date } });
 
-                    if (badcode != "" || badcode != null)
+                    if (badcode != "" && ngqty != "0")
                     {
                         //鍐欏叆缂洪櫡璁板綍琛�
                         for (int i = 0; i < arra1.Length; i++)
                         {
                             sql = @"insert into  CSR_WorkRecord_Defect(record_id,wo_code,partnumber,step_seq,step_code,defect_qty,defect_code,style,lm_user,lm_date) 
-                                values(@record_id,@wo_code,@partcode,@stepseq,@stepcode,@ngqty,@defect_code,@stepcode,@style,@lm_user,@lm_date)";
+                                values(@record_id,@wo_code,@partcode,@stepseq,@stepcode,@ngqty,@defect_code,@style,@lm_user,@lm_date)";
                             list.Add(new { str = sql, parm = new { record_id = int.Parse(dt.Rows[0]["ID"].ToString()), wo_code = mesordercode, partcode = partcode, stepseq = stepseq, stepcode = stepcode, ngqty = ngqty, defect_code = arra1[i], style = "S", lm_user = username, lm_date = date } });
 
                         }
diff --git a/VueWebApi/DLL/DAL/QualityManagementDAL.cs b/VueWebApi/DLL/DAL/QualityManagementDAL.cs
new file mode 100644
index 0000000..f0cf516
--- /dev/null
+++ b/VueWebApi/DLL/DAL/QualityManagementDAL.cs
@@ -0,0 +1,571 @@
+锘縰sing Dapper;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Web;
+using VueWebApi.Models;
+using VueWebApi.Tools;
+
+namespace VueWebApi.DLL.DAL
+{
+    public class QualityManagementDAL
+    {
+        public static DataTable dt;    //瀹氫箟鍏ㄥ眬鍙橀噺dt
+        public static bool res;       //瀹氫箟鍏ㄥ眬鍙橀噺dt
+        public static ToMessage mes = new ToMessage(); //瀹氫箟鍏ㄥ眬杩斿洖淇℃伅瀵硅薄
+        public static string strProcName = ""; //瀹氫箟鍏ㄥ眬sql鍙橀噺
+        public static List<SqlParameter> listStr = new List<SqlParameter>(); //瀹氫箟鍏ㄥ眬鍙傛暟闆嗗悎
+        public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
+
+
+        #region[璐ㄩ噺绠$悊,缂洪櫡瀹氫箟鏌ヨ鍒楄〃]
+        public static ToMessage DedectSearch(string defectcode, string defectname, string defectdescr, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (defectcode != "" && defectcode != null)
+                {
+                    search += "and code=@defectcode ";
+                    dynamicParams.Add("@defectcode", defectcode);
+                }
+                if (defectname != "" && defectname != null)
+                {
+                    search += "and name like '%'+@defectname+'%' ";
+                    dynamicParams.Add("@defectname", defectname);
+                }
+                if (defectdescr != "" && defectdescr != null)
+                {
+                    search += "and descr like '%'+@defectdescr+'%' ";
+                    dynamicParams.Add("@defectdescr", defectdescr);
+                }
+
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select code,name,descr,lm_user,lm_date  from TDefect where is_delete<>'1' " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[璐ㄩ噺绠$悊锛岀己闄峰畾涔夋柊澧炪�佺紪杈戞彁浜
+        public static ToMessage AddUpdateDedect(string defectcode, string defectname, string defectdescr, string opertype, string username)
+        {
+            var sql = "";
+            var dynamicParams = new DynamicParameters();
+            List<object> list = new List<object>();
+            try
+            {
+                if (opertype == "Add")
+                {
+                    //鍐欏叆缂洪櫡瀹氫箟瀹氫箟琛�
+                    sql = @"insert into TDefect(code,name,descr,lm_user,lm_date)
+                                values(@defectcode,@defectname,@defectdescr,@username,@CreateDate)";
+                    list.Add(new
+                    {
+                        str = sql,
+                        parm = new
+                        {
+                            defectcode = defectcode,
+                            defectname = defectname,
+                            defectdescr = defectdescr,
+                            username = username,
+                            CreateDate = DateTime.Now.ToString()
+                        }
+                    });
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.Message = "缂洪櫡瀹氫箟鏂板鎴愬姛!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.Message = "缂洪櫡瀹氫箟鏂板澶辫触!";
+                        mes.data = null;
+                    }
+                }
+                if (opertype == "Update")
+                {
+                    sql = @"update TDefect set name=@defectname,descr=@defectdescr,lm_user=@username,lm_date=@CreateDate where code=@defectcode";
+                    list.Add(new
+                    {
+                        str = sql,
+                        parm = new
+                        {
+                            defectcode = defectcode,
+                            defectname = defectname,
+                            defectdescr = defectdescr,
+                            username = username,
+                            CreateDate = DateTime.Now.ToString()
+                        }
+                    });
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.Message = "缂洪櫡瀹氫箟淇敼鎴愬姛!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.Message = "缂洪櫡瀹氫箟淇敼澶辫触!";
+                        mes.data = null;
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[璐ㄩ噺绠$悊锛岀己闄峰畾涔夊垹闄
+        public static ToMessage DeleteDedect(string defectcode)
+        {
+            var sql = "";
+            List<object> list = new List<object>();
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                sql = @"select * from  CSR_WorkRecord_Defect  where defect_code=@defectcode";
+                dynamicParams.Add("@defectcode", defectcode);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                if (data.Rows.Count > 0)
+                {
+                    mes.code = "300";
+                    mes.count = 0;
+                    mes.Message = "褰撳墠缂洪櫡椤瑰凡鐢熸垚鎶ュ伐缂洪櫡璁板綍,涓嶅厑璁稿垹闄�!";
+                    mes.data = null;
+                    return mes;
+                }
+
+                sql = @"delete TDefect  where code=@defectcode";
+                list.Add(new { str = sql, parm = new { defectcode = defectcode } });
+
+                bool aa = DapperHelper.DoTransaction(list);
+                if (aa)
+                {
+                    mes.code = "200";
+                    mes.count = 0;
+                    mes.Message = "缂洪櫡鍒犻櫎鎴愬姛!";
+                    mes.data = null;
+                }
+                else
+                {
+                    mes.code = "300";
+                    mes.count = 0;
+                    mes.Message = "缂洪櫡鍒犻櫎澶辫触!";
+                    mes.data = null;
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+
+
+        #region[宸ュ簭妫�楠屾爣鍑嗗垪琛ㄦ煡璇
+        public static ToMessage StepCheckStanedSearch(string stanedcode, string stanedname, string staneddescr, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (stanedcode != "" && stanedcode != null)
+                {
+                    search += "and code=@stanedcode ";
+                    dynamicParams.Add("@stanedcode", stanedcode);
+                }
+                if (stanedname != "" && stanedname != null)
+                {
+                    search += "and name like '%'+@stanedname+'%' ";
+                    dynamicParams.Add("@stanedname", stanedname);
+                }
+                if (staneddescr != "" && staneddescr != null)
+                {
+                    search += "and descr like '%'+@staneddescr+'%' ";
+                    dynamicParams.Add("@staneddescr", staneddescr);
+                }
+
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select code,name,descr,lm_user,lm_date  from TStepCheckStandard where is_delete<>'1' " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗙紪杈戣幏鍙栨暟鎹甝
+        public static ToMessage EditStepCheckStanedSearch(string defectcode)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鑾峰彇宸ュ簭妫�楠屾爣鍑嗕俊鎭�
+                sql = @"select code,name,descr
+                        from TStepCheckStandard
+                        where code=@defectcode and is_delete<>'1'";
+                dynamicParams.Add("@defectcode", defectcode);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+
+                RoutEdit rout = new RoutEdit();
+                rout.code = data.Rows[0]["CODE"].ToString();
+                rout.name = data.Rows[0]["NAME"].ToString();
+                rout.description = data.Rows[0]["DESCR"].ToString();
+
+                //鏍规嵁宸ュ簭妫�楠屾爣鍑嗙紪鐮佽幏鍙栧叧鑱旂殑宸ュ簭妫�楠岄」鐩俊鎭�
+                sql = @"select B.code,B.name,A.stepcheckitem_desc  from TStepCheckStandardSub A
+                        left join TStepCheckItem  B on A.stepcheckitem_code=B.code
+                        where B.is_delete<>'1' and A.stepstaned_code=@stepstaned_code order by A.stepcheckitem_seq asc";
+                dynamicParams.Add("@stepstaned_code", rout.code);
+                var data0 = DapperHelper.selectdata(sql, dynamicParams);
+                rout.Data = data0;
+
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.data = rout;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戣幏鍙栨楠岄」鐩笅鎷夊垪琛╙
+        public static ToMessage StepCheckItemSelect()
+        {
+            string sql = "";
+            try
+            {
+                //鑾峰彇宸ュ簭鐐规椤圭洰鏁版嵁
+                sql = @"select code,name,descr from TStepCheckItem where is_delete<>'1' ";
+                var data = DapperHelper.selecttable(sql);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戞彁浜
+        public static ToMessage AddUpdateStepCheckStaned(string opertype, RoutEdit json, string username)
+        {
+            var sql = "";
+            var dynamicParams = new DynamicParameters();
+            List<object> list = new List<object>();
+            try
+            {
+                if (opertype == "Add")
+                {
+                    //鏂板宸ュ簭妫�楠屾爣鍑嗕富琛�
+                    sql = @"insert into TStepCheckStandard(code,name,descr,lm_user,lm_date) values(@code,@name,@descr,@lm_user,@lm_date)";
+                    list.Add(new { str = sql, parm = new { code = json.code, name = json.name, descr = json.description, lm_user = username, lm_date = DateTime.Now.ToString() } });
+                    for (int i = 0; i < json.Data.Rows.Count; i++)
+                    {
+                        //鏂板宸ュ簭妫�楠屾爣鍑嗗瓙琛�
+                        sql = @"insert TStepCheckStandardSub (stepstaned_code,stepcheckitem_seq,stepcheckitem_code,stepcheckitem_desc,lm_user,lm_date) 
+                                values(@stepstaned_code,@stepcheckitem_seq,@stepcheckitem_code,@stepcheckitem_desc,@lm_user,@lm_date)";
+                        list.Add(new { str = sql, parm = new { stepstaned_code = json.code, stepcheckitem_seq = Convert.ToInt32(json.Data.Rows[i]["STEPCHECKITEM_SEQ"].ToString()), stepcheckitem_code = json.Data.Rows[i]["STEPCHECKITEM_CODE"].ToString(), stepcheckitem_desc= json.Data.Rows[i]["STEPCHECKITEM_DESC"].ToString(), lm_user = username, lm_date = DateTime.Now.ToString() } });
+                    }
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.Message = "鏂板鎿嶄綔鎴愬姛!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.Message = "鏂板鎿嶄綔澶辫触!";
+                        mes.data = null;
+                    }
+                }
+                if (opertype == "Update") 
+                {
+                    //鍒犻櫎宸ュ簭妫�楠屾爣鍑嗗瓙琛�
+                    sql = @"delete from TStepCheckStandard where stepstaned_code=@stepstaned_code";
+                    list.Add(new { str = sql, parm = new { stepstaned_code = json.code} });
+                    //淇敼宸ュ簭妫�楠屾爣鍑嗕富琛�
+                    sql = @"update  TStepCheckStandard set name=@stepstaned_name,descr=@stepstaned_desc where stepstaned_code=@stepstaned_code";
+                    list.Add(new { str = sql, parm = new { stepstaned_name = json.code, stepstaned_desc=json.description } });
+                    //鏂板宸ュ簭妫�楠屾爣鍑嗗瓙琛�
+                    for (int i = 0; i < json.Data.Rows.Count; i++)
+                    {
+                        //鏂板宸ュ簭妫�楠屾爣鍑嗗瓙琛�
+                        sql = @"insert TStepCheckStandardSub (stepstaned_code,stepcheckitem_seq,stepcheckitem_code,stepcheckitem_desc,lm_user,lm_date) 
+                                values(@stepstaned_code,@stepcheckitem_seq,@stepcheckitem_code,@stepcheckitem_desc,@lm_user,@lm_date)";
+                        list.Add(new { str = sql, parm = new { stepstaned_code = json.code, stepcheckitem_seq = Convert.ToInt32(json.Data.Rows[i]["STEPCHECKITEM_SEQ"].ToString()), stepcheckitem_code = json.Data.Rows[i]["STEPCHECKITEM_CODE"].ToString(), stepcheckitem_desc = json.Data.Rows[i]["STEPCHECKITEM_DESC"].ToString(), lm_user = username, lm_date = DateTime.Now.ToString() } });
+                    }
+
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.Message = "鏂板鎿嶄綔鎴愬姛!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.Message = "鏂板鎿嶄綔澶辫触!";
+                        mes.data = null;
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+
+
+        #region[宸ュ簭妫�楠岄」鐩垪琛ㄦ煡璇
+        public static ToMessage StepCheckItemSearch(string itemcode, string itemname, string itemdescr, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (itemcode != "" && itemcode != null)
+                {
+                    search += "and code=@itemcode ";
+                    dynamicParams.Add("@itemcode", itemcode);
+                }
+                if (itemname != "" && itemname != null)
+                {
+                    search += "and name like '%'+@itemname+'%' ";
+                    dynamicParams.Add("@itemname", itemname);
+                }
+                if (itemdescr != "" && itemdescr != null)
+                {
+                    search += "and descr like '%'+@itemdescr+'%' ";
+                    dynamicParams.Add("@itemdescr", itemdescr);
+                }
+
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select code,name,descr,lm_user,lm_date  from TStepCheckItem where is_delete<>'1' " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠岄」鐩柊澧炪�佺紪杈戞彁浜
+        public static ToMessage AddUpdateStepCheckItem(string checkitemcode, string checkitemname, string checkitemdescr, string opertype, string username)
+        {
+            var sql = "";
+            var dynamicParams = new DynamicParameters();
+            List<object> list = new List<object>();
+            try
+            {
+                if (opertype == "Add")
+                {
+                    //鍐欏叆缂洪櫡瀹氫箟瀹氫箟琛�
+                    sql = @"insert into TStepCheckItem(code,name,descr,lm_user,lm_date)
+                                values(@checkitemcode,@checkitemname,@checkitemdescr,@username,@CreateDate)";
+                    list.Add(new
+                    {
+                        str = sql,
+                        parm = new
+                        {
+                            checkitemcode = checkitemcode,
+                            checkitemname = checkitemname,
+                            checkitemdescr = checkitemdescr,
+                            username = username,
+                            CreateDate = DateTime.Now.ToString()
+                        }
+                    });
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.Message = "宸ュ簭妫�楠岄」鐩柊澧炴垚鍔�!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.Message = "宸ュ簭妫�楠岄」鐩柊澧炲け璐�!";
+                        mes.data = null;
+                    }
+                }
+                if (opertype == "Update")
+                {
+                    sql = @"update TStepCheckItem set name=@checkitemname,descr=@checkitemdescr,lm_user=@username,lm_date=@CreateDate where code=@checkitemcode";
+                    list.Add(new
+                    {
+                        str = sql,
+                        parm = new
+                        {
+                            checkitemcode = checkitemcode,
+                            checkitemname = checkitemname,
+                            checkitemdescr = checkitemdescr,
+                            username = username,
+                            CreateDate = DateTime.Now.ToString()
+                        }
+                    });
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.Message = "宸ュ簭妫�楠岄」鐩慨鏀规垚鍔�!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.Message = "宸ュ簭妫�楠岄」鐩慨鏀瑰け璐�!";
+                        mes.data = null;
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[宸ュ簭妫�楠岄」鐩垹闄
+        public static ToMessage DeleteStepCheckItem(string checkitemcode)
+        {
+            var sql = "";
+            List<object> list = new List<object>();
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                sql = @"select * from  TStepCheckRecordSub  where checkitem_code=@checkitemcode";
+                dynamicParams.Add("@checkitemcode", checkitemcode);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                if (data.Rows.Count > 0)
+                {
+                    mes.code = "300";
+                    mes.count = 0;
+                    mes.Message = "褰撳墠妫�楠岄」椤瑰凡鐢熸垚妫�楠岃褰�,涓嶅厑璁稿垹闄�!";
+                    mes.data = null;
+                    return mes;
+                }
+
+                sql = @"update TStepCheckItem set is_delete='1'  where code=@checkitemcode";
+                list.Add(new { str = sql, parm = new { checkitemcode = checkitemcode } });
+
+                bool aa = DapperHelper.DoTransaction(list);
+                if (aa)
+                {
+                    mes.code = "200";
+                    mes.count = 0;
+                    mes.Message = "宸ュ簭妫�楠屽垹闄ゆ垚鍔�!";
+                    mes.data = null;
+                }
+                else
+                {
+                    mes.code = "300";
+                    mes.count = 0;
+                    mes.Message = "宸ュ簭妫�楠屽垹闄ゅけ璐�!";
+                    mes.data = null;
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/VueWebApi/Logs/2022-07-14.TXT b/VueWebApi/Logs/2022-07-14.TXT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/VueWebApi/Logs/2022-07-14.TXT
diff --git a/VueWebApi/Logs/2022-07-15.TXT b/VueWebApi/Logs/2022-07-15.TXT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/VueWebApi/Logs/2022-07-15.TXT
diff --git a/VueWebApi/Logs/2022-07-16.TXT b/VueWebApi/Logs/2022-07-16.TXT
new file mode 100644
index 0000000..582f1b9
--- /dev/null
+++ b/VueWebApi/Logs/2022-07-16.TXT
@@ -0,0 +1,23 @@
+ 【时间】:2022-07-16 20:45:16,651
+ 【级别】:ERROR
+ 【类名】:日志记录
+ 【线程ID】: 18 
+ 【文件地址】:D:\新凯迪MES\VueWebApi\VueWebApi\Tools\LogHelper.cs 第25行
+ 【日志内容】:
+消息类型:SqlException
+消息内容:“)”附近有语法错误。
+引发异常路径:/api/Login/UpdateUserPassword
+引发异常的方法:OnError
+引发异常源:.Net SqlClient Data Provider   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
+   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
+   在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
+   在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
+   在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
+   在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
+   在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
+   在 Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader)
+   在 Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command)
+   在 Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType)
+   在 VueWebApi.Tools.DapperHelper.DoTransaction(List`1 sqlList) 位置 D:\新凯迪MES\VueWebApi\VueWebApi\Tools\DapperHelper.cs:行号 391
+ 【日记详细】: 
+---------------------------------------------------------------------------------------------------------------
diff --git a/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user b/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
index 68e1f87..c53dca1 100644
--- a/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <_PublishTargetUrl>D:\缃戠珯鍙戝竷\XKDMesApi</_PublishTargetUrl>
-    <History>True|2022-06-30T07:04:41.6941982Z;True|2022-06-24T16:39:01.1080301+08:00;True|2022-06-17T13:23:15.1455451+08:00;True|2022-06-17T13:22:18.5517557+08:00;True|2022-06-17T13:19:27.7323818+08:00;True|2022-06-17T13:12:24.1252779+08:00;True|2022-06-17T13:09:20.4234258+08:00;True|2022-06-17T13:06:49.9869509+08:00;True|2022-06-17T12:58:54.6964621+08:00;False|2022-06-17T12:58:10.6767711+08:00;False|2022-06-17T12:57:08.9747950+08:00;False|2022-06-17T12:56:18.4650121+08:00;False|2022-06-17T12:55:57.9981927+08:00;True|2022-06-13T14:21:36.5610928+08:00;True|2022-06-13T11:41:39.4210151+08:00;True|2022-06-11T02:35:03.4727934+08:00;True|2022-06-11T02:31:13.7362660+08:00;True|2022-06-11T02:30:58.3616790+08:00;True|2022-06-11T01:57:04.4951468+08:00;True|2022-06-10T13:27:13.2097124+08:00;</History>
+    <History>True|2022-07-14T06:34:28.5093226Z;True|2022-07-14T13:59:59.7754985+08:00;True|2022-07-14T12:46:29.6685284+08:00;True|2022-07-14T09:22:25.9079652+08:00;True|2022-07-14T09:22:04.6797478+08:00;True|2022-07-14T09:10:45.0177607+08:00;True|2022-07-14T08:41:43.3026713+08:00;True|2022-07-14T08:27:32.7454972+08:00;True|2022-07-14T08:21:58.6572366+08:00;True|2022-07-14T08:17:59.2904747+08:00;True|2022-07-14T08:12:39.8483472+08:00;True|2022-06-30T15:04:41.6941982+08:00;True|2022-06-24T16:39:01.1080301+08:00;True|2022-06-17T13:23:15.1455451+08:00;True|2022-06-17T13:22:18.5517557+08:00;True|2022-06-17T13:19:27.7323818+08:00;True|2022-06-17T13:12:24.1252779+08:00;True|2022-06-17T13:09:20.4234258+08:00;True|2022-06-17T13:06:49.9869509+08:00;True|2022-06-17T12:58:54.6964621+08:00;False|2022-06-17T12:58:10.6767711+08:00;False|2022-06-17T12:57:08.9747950+08:00;False|2022-06-17T12:56:18.4650121+08:00;False|2022-06-17T12:55:57.9981927+08:00;True|2022-06-13T14:21:36.5610928+08:00;True|2022-06-13T11:41:39.4210151+08:00;True|2022-06-11T02:35:03.4727934+08:00;True|2022-06-11T02:31:13.7362660+08:00;True|2022-06-11T02:30:58.3616790+08:00;True|2022-06-11T01:57:04.4951468+08:00;True|2022-06-10T13:27:13.2097124+08:00;</History>
   </PropertyGroup>
   <ItemGroup>
     <File Include="Areas/HelpPage/HelpPage.css">
@@ -384,13 +384,13 @@
       <publishTime>11/28/2018 13:04:24</publishTime>
     </File>
     <File Include="bin/VueWebApi.dll">
-      <publishTime>07/13/2022 17:46:02</publishTime>
+      <publishTime>07/16/2022 21:11:40</publishTime>
     </File>
     <File Include="bin/VueWebApi.dll.config">
       <publishTime>06/15/2022 15:31:43</publishTime>
     </File>
     <File Include="bin/VueWebApi.pdb">
-      <publishTime>07/13/2022 17:46:02</publishTime>
+      <publishTime>07/16/2022 21:11:40</publishTime>
     </File>
     <File Include="bin/VueWebApi.xml">
       <publishTime>06/16/2022 14:26:01</publishTime>
@@ -887,6 +887,9 @@
     <File Include="grf/浜у搧娴佷紶鍗旳5.grf">
       <publishTime>06/30/2022 19:42:17</publishTime>
     </File>
+    <File Include="grf/澶栧崗鏀舵枡鏍囩.grf">
+      <publishTime>07/07/2022 16:11:14</publishTime>
+    </File>
     <File Include="grf/鎴愬搧鐗╂枡鏍囪瘑鍗�.grf">
       <publishTime>07/07/2022 15:45:42</publishTime>
     </File>
diff --git a/VueWebApi/Tools/ChannelActionFilterAttribute.cs b/VueWebApi/Tools/ChannelActionFilterAttribute.cs
index f219bd2..fa4b7e5 100644
--- a/VueWebApi/Tools/ChannelActionFilterAttribute.cs
+++ b/VueWebApi/Tools/ChannelActionFilterAttribute.cs
@@ -26,32 +26,43 @@
         /// <param name="actionContext"></param>
         public override void  OnActionExecuting(HttpActionContext actionContext)
         {
-            User loginUser = JsonConvert.DeserializeObject<User>(HttpContext.Current.Session["User"].ToString());
-            base.OnActionExecuting(actionContext);
-            //濡傛灉瀛樺湪
-            if (redis.Get<User>("LoginUserID" + loginUser.userid, 0).userid.ToString() != "")
+            try
             {
-                //鑾峰彇redis涓綋鍓嶇敤鎴蜂俊鎭�
-                User r_loginUser = redis.Get<User>("LoginUserID" + loginUser.userid, 0);
-                //濡傛灉session涓殑鐢ㄦ埛usercode鍜宺edis涓殑鐢ㄦ埛usercode鍖归厤
-                if (r_loginUser.usercode.Equals(loginUser.usercode))
+                var User = HttpContext.Current.Session["User"].ToString();
+                User loginUser = JsonConvert.DeserializeObject<User>(User);
+                base.OnActionExecuting(actionContext);
+                //濡傛灉瀛樺湪
+                if (redis.Get<User>("LoginUserID" + loginUser.userid, 0).userid.ToString() != "")
                 {
-                    //閲嶇疆杩囨湡鏃堕棿
-                    redis.Set<User>("LoginUserID" + loginUser.userid, loginUser, redis.secondsTimeOut, 0);
+                    //鑾峰彇redis涓綋鍓嶇敤鎴蜂俊鎭�
+                    User r_loginUser = redis.Get<User>("LoginUserID" + loginUser.userid, 0);
+                    //濡傛灉session涓殑鐢ㄦ埛usercode鍜宺edis涓殑鐢ㄦ埛usercode鍖归厤
+                    if (r_loginUser.usercode.Equals(loginUser.usercode))
+                    {
+                        //閲嶇疆杩囨湡鏃堕棿
+                        redis.Set<User>("LoginUserID" + loginUser.userid, loginUser, redis.secondsTimeOut, 0);
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.Message = "鐧诲綍宸茶秴鏃�,璇烽噸鏂扮櫥褰�!";
+                        actionContext.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.Ambiguous, Content = new StringContent(JsonConvert.SerializeObject(mes), Encoding.GetEncoding("UTF-8"), "application/json") };
+                    }
                 }
-                else
+                else //濡傛灉redis鐧诲綍鐢ㄦ埛涓笉瀛樺湪褰撳墠鐢ㄦ埛
                 {
                     mes.code = "300";
-                    mes.Message = "璐︽埛宸茶繃鏈�,璇烽噸鏂扮櫥褰�2!";
+                    mes.Message = "鐧诲綍宸茶秴鏃�,璇烽噸鏂扮櫥褰�!";
                     actionContext.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.Ambiguous, Content = new StringContent(JsonConvert.SerializeObject(mes), Encoding.GetEncoding("UTF-8"), "application/json") };
                 }
             }
-            else //濡傛灉redis鐧诲綍鐢ㄦ埛涓笉瀛樺湪褰撳墠鐢ㄦ埛
+            catch (Exception)
             {
                 mes.code = "300";
-                mes.Message = "璐︽埛宸茶繃鏈�,璇烽噸鏂扮櫥褰�1!";
+                mes.Message = "鐧诲綍宸茶秴鏃�,璇烽噸鏂扮櫥褰�!";
                 actionContext.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.Ambiguous, Content = new StringContent(JsonConvert.SerializeObject(mes), Encoding.GetEncoding("UTF-8"), "application/json") };
             }
+           
         }  
     }
 }
\ No newline at end of file
diff --git a/VueWebApi/Tools/ScanStartReport.cs b/VueWebApi/Tools/ScanStartReport.cs
index 0c8a35d..27f883d 100644
--- a/VueWebApi/Tools/ScanStartReport.cs
+++ b/VueWebApi/Tools/ScanStartReport.cs
@@ -69,12 +69,12 @@
                     if (dt.Rows.Count > 0) //鏈変笅閬撳伐搴�
                     {
                         rt.nextstepcode = dt.Rows[0]["STEPCODE"].ToString();//涓嬮亾宸ュ簭缂栫爜
-                        rt.nextstepcode = dt.Rows[0]["STEPNAME"].ToString();//涓嬮亾宸ュ簭鍚嶇О
+                        rt.nextstepname = dt.Rows[0]["STEPNAME"].ToString();//涓嬮亾宸ュ簭鍚嶇О
                     }
                     if (isend == "Y")  //褰撳墠宸ュ簭鏄湯閬撳伐搴�
                     {
                         rt.nextstepcode = data.Rows[0]["STEPCODE"].ToString();//褰撳墠宸ュ簭缂栫爜
-                        rt.nextstepcode = data.Rows[0]["STEPNAME"].ToString();//褰撳墠宸ュ簭鍚嶇О
+                        rt.nextstepname = data.Rows[0]["STEPNAME"].ToString();//褰撳墠宸ュ簭鍚嶇О
                     }
                 }
                 else
@@ -203,7 +203,7 @@
                                                     rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //浠诲姟鏁伴噺
                                                     rt.startqty = sybqty;                                                //寮�宸ユ暟閲�=鏈亾鍓╀綑鍙姤鏁伴噺
                                                     rt.noreportqty = sybqty;                                             //鏈姤鏁伴噺=鏈亾鍓╀綑鍙姤鏁伴噺
-                                                    rt.reportqty = 0;                                                    //宸叉姤鏁伴噺
+                                                    rt.reportqty = decimal.Parse(good_qty) + decimal.Parse(ng_qty);      //宸叉姤鏁伴噺=鏈亾鎶ュ伐鎬绘暟閲�+鏈亾鎶ュ伐鎬讳笉鑹�
                                                     mes.code = "200";
                                                     mes.count = 1;
                                                     mes.Message = "寮圭獥鎶ュ伐鐣岄潰!";
@@ -245,7 +245,7 @@
                                                     rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //浠诲姟鏁伴噺
                                                     rt.startqty = sybqty;                                                //寮�宸ユ暟閲�=鏈亾鍓╀綑鍙姤鏁伴噺
                                                     rt.noreportqty = sybqty;                                             //鏈姤鏁伴噺=鏈亾鍓╀綑鍙姤鏁伴噺
-                                                    rt.reportqty = 0;                                                    //宸叉姤鏁伴噺
+                                                    rt.reportqty = decimal.Parse(good_qty) + decimal.Parse(ng_qty);      //宸叉姤鏁伴噺=鏈亾鎶ュ伐鎬绘暟閲�+鏈亾鎶ュ伐鎬讳笉鑹�
                                                     mes.code = "200";
                                                     mes.count = 1;
                                                     mes.Message = "寮圭獥鎶ュ伐鐣岄潰!";
@@ -481,12 +481,12 @@
                     if (dt.Rows.Count > 0) //鏈変笅閬撳伐搴�
                     {
                         rt.nextstepcode = dt.Rows[0]["STEPCODE"].ToString();//涓嬮亾宸ュ簭缂栫爜
-                        rt.nextstepcode = dt.Rows[0]["STEPNAME"].ToString();//涓嬮亾宸ュ簭鍚嶇О
+                        rt.nextstepname = dt.Rows[0]["STEPNAME"].ToString();//涓嬮亾宸ュ簭鍚嶇О
                     }
                     if (isend == "Y")  //褰撳墠宸ュ簭鏄湯閬撳伐搴�
                     {
                         rt.nextstepcode = data.Rows[0]["STEPCODE"].ToString();//褰撳墠宸ュ簭缂栫爜
-                        rt.nextstepcode = data.Rows[0]["STEPNAME"].ToString();//褰撳墠宸ュ簭鍚嶇О
+                        rt.nextstepname = data.Rows[0]["STEPNAME"].ToString();//褰撳墠宸ュ簭鍚嶇О
                     }
                 }
                 else
@@ -797,7 +797,7 @@
                                                 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //浠诲姟鏁伴噺
                                                 rt.noreportqty = ksqty;                                              //鏈敹鏁伴噺=鏈亾鍙戞枡鏁伴噺
                                                 rt.reportqty = sqty + ng_qty;                                        //宸叉敹鏁伴噺                                   
-                                                rt.startqty = fqty;                                                  //鏀舵枡鏁伴噺=鏈亾鍙戞枡鏁伴噺      
+                                                rt.startqty = ksqty;                                                  //鏀舵枡鏁伴噺=鏈亾鍙戞枡鏁伴噺      
 
                                                 mes.code = "200";
                                                 mes.count = 3;
@@ -873,7 +873,7 @@
                                                     rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //浠诲姟鏁伴噺
                                                     rt.noreportqty = ksqty;                                              //鏈敹鏁伴噺=鏈亾鍙戞枡鏁伴噺
                                                     rt.reportqty = sqty + ng_qty;                                        //宸叉敹鏁伴噺                                   
-                                                    rt.startqty = fqty;                                                  //鏀舵枡鏁伴噺=鏈亾鍙戞枡鏁伴噺      
+                                                    rt.startqty = ksqty;                                                  //鏀舵枡鏁伴噺=鏈亾鍙戞枡鏁伴噺      
 
                                                     mes.code = "200";
                                                     mes.count = 3;
@@ -883,7 +883,7 @@
                                             }
                                             else
                                             {
-                                                decimal fqty = data1.AsEnumerable().Select(d => d.Field<Int32>("FQTY")).Sum();//鏈亾鍙戞枡鏁伴噺
+                                                decimal fqty = data1.AsEnumerable().Select(d => d.Field<decimal>("FQTY")).Sum();  //鏈亾鍙戞枡鏁伴噺
 
                                                 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //浠诲姟鏁伴噺
                                                 rt.noreportqty = fqty;                                               //鏈敹鏁伴噺=鏈亾鍙戞枡鏁伴噺
diff --git a/VueWebApi/VueWebApi.csproj b/VueWebApi/VueWebApi.csproj
index ffd75cc..cfd1bae 100644
--- a/VueWebApi/VueWebApi.csproj
+++ b/VueWebApi/VueWebApi.csproj
@@ -266,6 +266,7 @@
     <Compile Include="Controllers\MaterialManagerController.cs" />
     <Compile Include="Controllers\ProductionManagementController.cs" />
     <Compile Include="Controllers\ProductModelController.cs" />
+    <Compile Include="Controllers\QualityManagementController.cs" />
     <Compile Include="Controllers\SystemSettingController.cs" />
     <Compile Include="Controllers\ValuesController.cs" />
     <Compile Include="DLL\BLL\BasicSettingBLL.cs" />
@@ -277,6 +278,7 @@
     <Compile Include="DLL\BLL\MaterialManagerBLL.cs" />
     <Compile Include="DLL\BLL\ProductionManagementBLL.cs" />
     <Compile Include="DLL\BLL\ProductModelBLL.cs" />
+    <Compile Include="DLL\BLL\QualityManagementBLL.cs" />
     <Compile Include="DLL\BLL\SystemSettingBLL.cs" />
     <Compile Include="DLL\BLL\UserDataBLL.cs" />
     <Compile Include="DLL\DAL\BasicSettingDAL.cs" />
@@ -288,6 +290,7 @@
     <Compile Include="DLL\DAL\MaterialManagerDAL.cs" />
     <Compile Include="DLL\DAL\ProductionManagementDAL.cs" />
     <Compile Include="DLL\DAL\ProductModelDAL.cs" />
+    <Compile Include="DLL\DAL\QualityManagementDAL.cs" />
     <Compile Include="DLL\DAL\SystemSettingDAL.cs" />
     <Compile Include="DLL\DAL\UserDataDAL.cs" />
     <Compile Include="Global.asax.cs">
diff --git a/VueWebApi/VueWebApi.csproj.user b/VueWebApi/VueWebApi.csproj.user
index c43f84a..9bc68ca 100644
--- a/VueWebApi/VueWebApi.csproj.user
+++ b/VueWebApi/VueWebApi.csproj.user
@@ -8,7 +8,7 @@
     <IISExpressWindowsAuthentication />
     <IISExpressUseClassicPipelineMode />
     <UseGlobalApplicationHostFile />
-    <LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
+    <LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
     <NameOfLastUsedPublishProfile>D:\鏂板嚡杩狹ES\VueWebApi\VueWebApi\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
     <ProjectView>ShowAllFiles</ProjectView>
     <Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
diff --git a/VueWebApi/bin/VueWebApi.pdb b/VueWebApi/bin/VueWebApi.pdb
index b2b450a..0235295 100644
--- a/VueWebApi/bin/VueWebApi.pdb
+++ b/VueWebApi/bin/VueWebApi.pdb
Binary files differ
diff --git a/VueWebApi/bin/VueWebApi.xml b/VueWebApi/bin/VueWebApi.xml
index dfe9e26..a81dd65 100644
--- a/VueWebApi/bin/VueWebApi.xml
+++ b/VueWebApi/bin/VueWebApi.xml
@@ -883,6 +883,12 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:VueWebApi.Controllers.ErpSyncMesController.SeaveSearchPartner">
+            <summary>
+            鍩虹璁剧疆:寰�鏉ュ崟浣嶅悓姝�
+            </summary>
+            <returns></returns>
+        </member>
         <member name="M:VueWebApi.Controllers.GridReportController.MesOrderPrintSearch(System.String,System.String)">
             <summary>
             MES宸ュ崟鎵撳嵃
@@ -1539,6 +1545,94 @@
             <param name="eqpcode">璁惧缂栫爜</param>
             <returns></returns>
         </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.DedectSearch(System.String,System.String,System.String,System.Int32,System.Int32,System.String,System.String)">
+            <summary>
+            璐ㄩ噺绠$悊,缂洪櫡瀹氫箟鏌ヨ鍒楄〃
+            </summary>
+            <param name="defectcode">缂洪櫡浠g爜</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="defectdescr">缂洪櫡鎻忚堪</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.AddUpdateDedect(Newtonsoft.Json.Linq.JObject)">
+            <summary>
+            璐ㄩ噺绠$悊锛岀己闄峰畾涔夋柊澧炪�佺紪杈戞彁浜�
+            </summary>
+            <param name="obj">鎻愪氦鏁版嵁</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.DeleteDedect(System.String)">
+            <summary>
+            璐ㄩ噺绠$悊锛岀己闄峰畾涔夊垹闄�
+            </summary>
+            <param name="defectcode">缂洪櫡浠g爜</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.StepCheckStanedSearch(System.String,System.String,System.String,System.Int32,System.Int32,System.String,System.String)">
+            <summary>
+            宸ュ簭妫�楠屾爣鍑嗗垪琛ㄦ煡璇�
+            </summary>
+            <param name="stanedcode">鏍囧噯浠g爜</param>
+            <param name="stanedname">鏍囧噯鍚嶇О</param>
+            <param name="staneddescr">鏍囧噯鎻忚堪</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勬牸</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.EditStepCheckStanedSearch(System.String)">
+            <summary>
+            宸ュ簭妫�楠屾爣鍑嗙紪杈戣幏鍙栨暟鎹�
+            </summary>
+            <param name="defectcode">宸ュ簭妫�楠屾爣鍑嗙紪鐮�</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.StepCheckItemSelect">
+            <summary>
+            宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戣幏鍙栨楠岄」鐩笅鎷夊垪琛�
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.AddUpdateStepCheckStaned(System.String,VueWebApi.Models.RoutEdit)">
+            <summary>
+            宸ュ簭妫�楠屾爣鍑嗘柊澧炪�佺紪杈戞彁浜�
+            </summary>
+            <param name="opertype">鎿嶄綔绫诲瀷</param>
+            <param name="json">鎻愪氦鏁版嵁</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.StepCheckItemSearch(System.String,System.String,System.String,System.Int32,System.Int32,System.String,System.String)">
+            <summary>
+            宸ュ簭妫�楠岄」鐩垪琛ㄦ煡璇�
+            </summary>
+            <param name="itemcode">妫�楠岄」鐩紪鐮�</param>
+            <param name="itemname">妫�楠岄」鐩悕绉�</param>
+            <param name="itemdescr">妫�楠岄」鐩弿杩�</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.AddUpdateStepCheckItem(Newtonsoft.Json.Linq.JObject)">
+            <summary>
+            宸ュ簭妫�楠岄」鐩柊澧炪�佺紪杈戞彁浜�
+            </summary>
+            <param name="obj">鎻愪氦鏁版嵁</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.QualityManagementController.DeleteStepCheckItem(System.String)">
+            <summary>
+            宸ュ簭妫�楠岄」鐩垹闄�
+            </summary>
+            <param name="checkitemcode">妫�楠岄」鐩唬鐮�</param>
+            <returns></returns>
+        </member>
         <member name="M:VueWebApi.Controllers.SystemSettingController.EncodingRules(System.String,System.String,System.Int32,System.Int32,System.String,System.String)">
             <summary>
             缂栫爜瑙勫垯鏌ヨ
diff --git a/VueWebApi/obj/Debug/VueWebApi.csproj.AssemblyReference.cache b/VueWebApi/obj/Debug/VueWebApi.csproj.AssemblyReference.cache
deleted file mode 100644
index 629d18e..0000000
--- a/VueWebApi/obj/Debug/VueWebApi.csproj.AssemblyReference.cache
+++ /dev/null
Binary files differ
diff --git a/VueWebApi/obj/Debug/VueWebApi.csproj.CoreCompileInputs.cache b/VueWebApi/obj/Debug/VueWebApi.csproj.CoreCompileInputs.cache
index bcab3f4..202cf3b 100644
--- a/VueWebApi/obj/Debug/VueWebApi.csproj.CoreCompileInputs.cache
+++ b/VueWebApi/obj/Debug/VueWebApi.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-125a795aa5c2462dc5d311a148e283020224013c
+c44ce763bc75fbbb24393585b5dc481ba2772788
diff --git a/VueWebApi/obj/Debug/VueWebApi.pdb b/VueWebApi/obj/Debug/VueWebApi.pdb
index 0b5b35f..05f58f6 100644
--- a/VueWebApi/obj/Debug/VueWebApi.pdb
+++ b/VueWebApi/obj/Debug/VueWebApi.pdb
Binary files differ
diff --git a/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb b/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb
index b2b450a..0235295 100644
--- a/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb
+++ b/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb
Binary files differ
diff --git "a/VueWebApi/obj/Release/Package/PackageTmp/grf/\345\244\226\345\215\217\346\224\266\346\226\231\346\240\207\347\255\276.grf" "b/VueWebApi/obj/Release/Package/PackageTmp/grf/\345\244\226\345\215\217\346\224\266\346\226\231\346\240\207\347\255\276.grf"
new file mode 100644
index 0000000..7ba753d
--- /dev/null
+++ "b/VueWebApi/obj/Release/Package/PackageTmp/grf/\345\244\226\345\215\217\346\224\266\346\226\231\346\240\207\347\255\276.grf"
@@ -0,0 +1,310 @@
+锘縶
+	"Version":"6.8.2.2",
+	"Title":"浣犵殑鎶ヨ〃鏍囬",
+	"PrintAsDesignPaper":false,
+	"Font":{
+		"Name":"瀹嬩綋",
+		"Size":52500,
+		"Weight":400,
+		"Charset":134
+	},
+	"WatermarkAlignment":"BottomRight",
+	"Printer":{
+		"Size":256,
+		"Width":4,
+		"Height":7.5,
+		"Oriention":"Landscape",
+		"LeftMargin":0.1,
+		"TopMargin":0,
+		"RightMargin":0.1,
+		"BottomMargin":0
+	},
+	"DetailGrid":{
+		"CenterView":true,
+		"Border":{
+			"Pen":{
+				"Width":1.5
+			}
+		},
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"宸ュ崟缂栧彿",
+					"DBFieldName":"wo_code"
+				},
+				{
+					"Name":"浜у搧缂栫爜",
+					"DBFieldName":"partcode"
+				},
+				{
+					"Name":"浜у搧鍚嶇О",
+					"DBFieldName":"partname"
+				},
+				{
+					"Name":"涓嬮亾宸ュ簭",
+					"DBFieldName":"next_stepname"
+				},
+				{
+					"Name":"鏁伴噺",
+					"DBFieldName":"qty"
+				},
+				{
+					"Name":"浜岀淮鐮�",
+					"DBFieldName":"qrcode"
+				}
+			]
+		},
+		"ColumnContent":{
+			"Height":0,
+			"AdjustRowHeight":false
+		},
+		"ColumnTitle":{
+			"Height":0,
+			"RepeatStyle":"OnPage"
+		}
+	},
+	"Parameter":[
+		{
+			"Name":"Parameter1"
+		},
+		{
+			"Name":"Parameter2"
+		}
+	],
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":3.20146,
+			"Control":[
+				{
+					"Type":"Line",
+					"Name":"Line1",
+					"Left":0.211667,
+					"Top":0.105833,
+					"Width":6.91333
+				},
+				{
+					"Type":"Line",
+					"Name":"Line2",
+					"Left":0.21,
+					"Top":3.09563,
+					"Width":6.90729
+				},
+				{
+					"Type":"Line",
+					"Name":"Line3",
+					"Left":0.2,
+					"Top":0.105833,
+					"Height":2.99
+				},
+				{
+					"Type":"Line",
+					"Name":"Line4",
+					"Left":7.1,
+					"Top":0.105833,
+					"Height":2.98979
+				},
+				{
+					"Type":"Line",
+					"Name":"Line5",
+					"Left":2.40771,
+					"Top":0.105833,
+					"Height":2.98979
+				},
+				{
+					"Type":"Barcode",
+					"Name":"Barcode1",
+					"Left":0.423333,
+					"Top":0.291042,
+					"Width":1.82563,
+					"Height":1.66688,
+					"BarcodeType":"QRCode",
+					"CaptionPosition":"None",
+					"Text":"[#浜岀淮鐮�#]"
+				},
+				{
+					"Type":"Line",
+					"Name":"Line6",
+					"Left":2.40771,
+					"Top":0.873125,
+					"Width":4.68229
+				},
+				{
+					"Type":"Line",
+					"Name":"Line7",
+					"Left":2.40771,
+					"Top":1.64042,
+					"Width":4.68229
+				},
+				{
+					"Type":"Line",
+					"Name":"Line8",
+					"Left":0.21,
+					"Top":2.38125,
+					"Width":6.88
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox1",
+					"Left":0.396875,
+					"Top":2.51354,
+					"Width":1.00542,
+					"Height":0.423333,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"鏁伴噺:"
+				},
+				{
+					"Type":"MemoBox",
+					"Name":"MemoBox1",
+					"Left":1.34938,
+					"Top":2.51354,
+					"Width":0.978958,
+					"Height":0.4,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"[#鏁伴噺#]"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox2",
+					"Left":2.51,
+					"Top":0.185208,
+					"Width":1.69333,
+					"Height":0.635,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"宸ュ崟缂栧彿:"
+				},
+				{
+					"Type":"MemoBox",
+					"Name":"MemoBox2",
+					"Left":4.20688,
+					"Top":0.185208,
+					"Width":2.75,
+					"Height":0.66,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"[#宸ュ崟缂栧彿#]"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox3",
+					"Left":2.51,
+					"Top":0.9525,
+					"Width":1.69333,
+					"Height":0.635,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"浜у搧缂栫爜:"
+				},
+				{
+					"Type":"MemoBox",
+					"Name":"MemoBox3",
+					"Left":4.23333,
+					"Top":0.9525,
+					"Width":2.75,
+					"Height":0.66,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"[#浜у搧缂栫爜#]"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox4",
+					"Left":2.54,
+					"Top":1.71979,
+					"Width":1.69,
+					"Height":0.58,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"浜у搧鍚嶇О:"
+				},
+				{
+					"Type":"MemoBox",
+					"Name":"MemoBox4",
+					"Left":4.25979,
+					"Top":1.71979,
+					"Width":2.75167,
+					"Height":0.582083,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"[#浜у搧鍚嶇О#]"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox5",
+					"Left":2.56646,
+					"Top":2.48708,
+					"Width":1.69333,
+					"Height":0.529167,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"涓嬮亾宸ュ簭:"
+				},
+				{
+					"Type":"MemoBox",
+					"Name":"MemoBox5",
+					"Left":4.28625,
+					"Top":2.48708,
+					"Width":2.75,
+					"Height":0.53,
+					"PaddingTop":0,
+					"Font":{
+						"Name":"瀹嬩綋",
+						"Size":90000,
+						"Weight":400,
+						"Charset":134
+					},
+					"Text":"[#涓嬮亾宸ュ簭#]"
+				}
+			],
+			"RepeatOnPage":true
+		}
+	]
+}
\ No newline at end of file
diff --git a/VueWebApi/obj/Release/VueWebApi.csproj.CoreCompileInputs.cache b/VueWebApi/obj/Release/VueWebApi.csproj.CoreCompileInputs.cache
index 498d71e..1e1a7cd 100644
--- a/VueWebApi/obj/Release/VueWebApi.csproj.CoreCompileInputs.cache
+++ b/VueWebApi/obj/Release/VueWebApi.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-f4cc57ce654eabbfabfa8274d88d8d88dfe841c3
+5b4e84777a99a36edc80a7a5e9bfa2853c4cb60d
diff --git a/VueWebApi/obj/Release/VueWebApi.pdb b/VueWebApi/obj/Release/VueWebApi.pdb
index b2b450a..0235295 100644
--- a/VueWebApi/obj/Release/VueWebApi.pdb
+++ b/VueWebApi/obj/Release/VueWebApi.pdb
Binary files differ

--
Gitblit v1.9.3