From 120868517d50dce123ae803f4b387e5ffab1b1c3 Mon Sep 17 00:00:00 2001
From: wangyi <2946747746@qq.com>
Date: 星期一, 29 十二月 2025 16:37:35 +0800
Subject: [PATCH] 检验申请单 单据编辑以及单据列表功能

---
 WebAPI/Models/ClsQC_RequestCheckBillSub.cs                    |   32 +
 WebAPI/ListModels.cs                                          |   36 +
 WebAPI/Models/ClsQC_RequestCheckBillMain.cs                   |   52 ++
 WebAPI/Properties/PublishProfiles/FolderProfile11.pubxml.user |   10 
 WebAPI/WebAPI.csproj                                          |    4 
 WebAPI/Controllers/检验申请单/QC_RequestCheckBillController.cs     |  876 +++++++++++++++++++++++++++++++++++
 WebAPI/DLL/ClsQC_RequestCheckBill.cs                          |  477 +++++++++++++++++++
 7 files changed, 1,481 insertions(+), 6 deletions(-)

diff --git "a/WebAPI/Controllers/\346\243\200\351\252\214\347\224\263\350\257\267\345\215\225/QC_RequestCheckBillController.cs" "b/WebAPI/Controllers/\346\243\200\351\252\214\347\224\263\350\257\267\345\215\225/QC_RequestCheckBillController.cs"
new file mode 100644
index 0000000..39752af
--- /dev/null
+++ "b/WebAPI/Controllers/\346\243\200\351\252\214\347\224\263\350\257\267\345\215\225/QC_RequestCheckBillController.cs"
@@ -0,0 +1,876 @@
+锘縰sing DBUtility;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Web.Http;
+using WebAPI.Models;
+
+namespace WebAPI.Controllers
+{
+    public class QC_RequestCheckBillController : ApiController
+    {
+        public DBUtility.ClsPub.Enum_BillStatus BillStatus;
+        private json objJsonResult = new json();
+        public DataSet ds = new DataSet();
+        public SQLHelper.ClsCN oCn = new SQLHelper.ClsCN();
+        Pub_Class.ClsXt_SystemParameter oSystemParameter = new Pub_Class.ClsXt_SystemParameter();
+        public DLL.ClsQC_RequestCheckBill BillNew0 = new DLL.ClsQC_RequestCheckBill();
+        public DLL.ClsQC_RequestCheckBill BillOld0 = new DLL.ClsQC_RequestCheckBill();
+
+        #region 妫�楠岀敵璇峰崟鍒楄〃
+        [Route("QC_RequestCheckBill/GetRequestCheckBillList")]
+        [HttpGet]
+        public object GetRequestCheckBillList(string sWhere, string user)
+        {
+            try
+            {
+                List<object> columnNameList = new List<object>();
+
+                //鍒ゆ柇鏌ヨ鏉冮檺
+                if (!DBUtility.ClsPub.Security_Log("QC_RequestCheckBill_Query", 1, false, user))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鏃犳煡璇㈡潈闄�!";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                ds = oCn.RunProcReturn("select * from h_v_QC_RequestCheckBillList_Search " + sWhere + " order by 鏃ユ湡 desc, hmainid desc", "h_v_QC_RequestCheckBillList_Search");
+
+                foreach (DataColumn col in ds.Tables[0].Columns)
+                {
+                    Type dataType = col.DataType;
+                    string ColmString = "{\"ColmCols\":\"" + col.ColumnName + "\",\"ColmType\":\"" + dataType.Name + "\"}";
+                    columnNameList.Add(JsonConvert.DeserializeObject(ColmString));
+                }
+
+                objJsonResult.code = "1";
+                objJsonResult.count = 1;
+                objJsonResult.Message = "Success锛�";
+                objJsonResult.data = ds.Tables[0];
+                objJsonResult.list = columnNameList;
+                return objJsonResult;
+            }
+            catch (Exception ex)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "娌℃湁杩斿洖浠讳綍璁板綍锛�" + ex.ToString();
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+        }
+        #endregion
+
+        #region 妫�楠岀敵璇峰崟鍒犻櫎
+        [Route("QC_RequestCheckBill/set_DeleteBill")]
+        [HttpGet]
+        public object set_DeleteBill(string HInterID, string user)
+        {
+            // 缂栬緫鏉冮檺妫�鏌�
+            if (!DBUtility.ClsPub.Security_Log_second("QC_RequestCheckBill_Drop", 1, false, user))
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "鏃犲垹闄ゆ潈闄愶紒";
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+
+            Int64 lngBillKey = DBUtility.ClsPub.isLong(HInterID);
+            if (lngBillKey == 0)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "鍗曟嵁ID涓虹┖锛�";
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+
+            DLL.ClsQC_RequestCheckBill oBill = new DLL.ClsQC_RequestCheckBill();
+            if (oBill.ShowBill(lngBillKey, ref DBUtility.ClsPub.sExeReturnInfo))
+            {
+                if (oBill.omodel.HBillStatus > 1)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鍗曟嵁褰撳墠澶勪簬涓嶈兘鍒犻櫎鐘舵��,涓嶈兘鍒犻櫎锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                if (oBill.omodel.HChecker != "" && oBill.omodel.HChecker != null)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鍗曟嵁宸茬粡瀹℃牳,涓嶈兘鍒犻櫎锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                string s = "";
+                if (!DBUtility.Xt_BaseBillFun.Fun_AllowDeleteBill(oBill, ref s))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = s + "锛屼笉鍏佽鍒犻櫎";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                // 浼氳鏈熼棿鍒ゆ柇
+                int sYear = 0;
+                int sPeriod = 0;
+                DateTime HDate = DateTime.Now;
+                if (DBUtility.Xt_BaseBillFun.Fun_AllowYearPeriod(HDate, ref sYear, ref sPeriod, ref s) == false)
+                {
+                    objJsonResult.Message = s;
+                    return objJsonResult;
+                }
+
+                bool IsDete = oBill.DeleteBill(lngBillKey, ref DBUtility.ClsPub.sExeReturnInfo);
+                if (IsDete)
+                {
+                    objJsonResult.code = "1";
+                    objJsonResult.count = 1;
+                    objJsonResult.Message = DBUtility.ClsPub.sExeReturnInfo;
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+                else
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = DBUtility.ClsPub.sExeReturnInfo;
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+            }
+            else
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "鍗曟嵁鏈壘鍒�";
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+        }
+        #endregion
+
+        #region[妫�楠岀敵璇峰崟缂栬緫鏃惰幏鍙栨暟鎹甝
+        [Route("QC_RequestCheckBill/GetRequestCheckBillDetail")]
+        [HttpGet]
+        public ApiResult<DataSet> QC_RequestCheckBillListCheckDetai(string HID)
+        {
+            if (string.IsNullOrEmpty(HID))
+                return new ApiResult<DataSet> { code = -1, msg = "ID涓嶈兘涓虹┖" };
+            SQLHelper.ClsCN oCN = new SQLHelper.ClsCN();
+
+            var dataSet = oCN.RunProcReturn("select * from h_v_IF_RequestCheckBillList  where hmainid= " + HID + " ", "h_v_Sc_MouldProdInHouseBillList");
+            if (dataSet == null || dataSet.Tables[0].Rows.Count == 0)
+                return new ApiResult<DataSet> { code = -1, msg = "涓嶅瓨鍦ㄥ崟鍙�" };
+
+            return new ApiResult<DataSet> { code = 1, msg = "鏌ヨ鎴愬姛", data = dataSet };
+        }
+        #endregion
+
+        #region 鏍规嵁鐗╂枡鍐呯爜鑾峰彇鐗╂枡淇℃伅
+        [Route("QC_RequestCheckBill/getMaterialByMaterID")]
+        [HttpGet]
+        public ApiResult<DataTable> getMaterialByMaterID(Int64 HMaterID)
+        {
+            SQLHelper.ClsCN oCN = new SQLHelper.ClsCN();
+
+            string sql = "select a.HItemID HMaterID,a.HNumber HMaterNumber,a.HName HMaterName,a.HMaterRuleType,a.HModel HMaterModel,a.HUnitID, b.HNumber HUnitNumber, b.HName HUnitName, a.HMaterRuleExternType,  a.HMaterRuleExternType1" +
+                " from Gy_Material AS a " +
+                " LEFT OUTER JOIN Gy_Unit AS b on a.HUnitID = b.HItemID " +
+                " where a.HItemID =" + HMaterID;
+
+            var dataSet = oCN.RunProcReturn(sql, "Gy_Material");
+
+            if (dataSet == null || dataSet.Tables[0].Rows.Count == 0)
+                return new ApiResult<DataTable> { code = -1, msg = "涓嶅瓨鍦ㄨ鐗╂枡" };
+
+            return new ApiResult<DataTable> { code = 1, msg = "鏌ヨ鎴愬姛", data = dataSet.Tables[0] };
+        }
+        #endregion
+
+        #region 妫�楠岀敵璇峰崟瀹℃牳/鍙嶅鏍�
+        [Route("QC_RequestCheckBill/set_CheckBill")]
+        [HttpGet]
+        public object set_CheckBill(int HInterID, string CurUserName)
+        {
+            string ModRightNameCheck = "QC_RequestCheckBill_Check";
+            DBUtility.ClsPub.CurUserName = CurUserName;
+            DLL.ClsQC_RequestCheckBill oBill = new DLL.ClsQC_RequestCheckBill();
+
+            try
+            {
+                // 瀹℃牳鏉冮檺妫�鏌�
+                if (!DBUtility.ClsPub.Security_Log_second(ModRightNameCheck, 1, false, CurUserName))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "瀹℃牳澶辫触锛佹棤鏉冮檺锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                // 瀹℃牳鍓嶅垽鏂�
+                string s = "";
+                if (!DBUtility.Xt_BaseBillFun.Fun_AllowCheckBill(oBill, ref s))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = s + "锛屼笉鍏佽瀹℃牳";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                if (HInterID <= 0)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "HInterID灏忎簬0锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                // 妫�鏌ュ崟鎹姸鎬�
+                if (oBill.ShowBill(HInterID, 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 (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;
+                }
+
+                // 浼氳鏈熼棿鍒ゆ柇
+                int sYear = 0;
+                int sPeriod = 0;
+                DateTime HDate = DateTime.Now;
+                if (DBUtility.Xt_BaseBillFun.Fun_AllowYearPeriod(HDate, ref sYear, ref sPeriod, ref s) == false)
+                {
+                    objJsonResult.Message = s;
+                    return objJsonResult;
+                }
+
+                // 鎵ц瀹℃牳
+                if (oBill.CheckBill(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                {
+                    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;
+                }
+            }
+            catch (Exception e)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "瀹℃牳澶辫触锛�" + e.ToString();
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+        }
+
+        [Route("QC_RequestCheckBill/set_AbandonCheck")]
+        [HttpGet]
+        public object set_AbandonCheck(int HInterID, string CurUserName)
+        {
+            string ModRightNameCheck = "QC_RequestCheckBill_Check";
+            DBUtility.ClsPub.CurUserName = CurUserName;
+            DLL.ClsQC_RequestCheckBill oBill = new DLL.ClsQC_RequestCheckBill();
+
+            try
+            {
+                //鏉冮檺妫�鏌�
+                if (!DBUtility.ClsPub.Security_Log_second(ModRightNameCheck, 1, false, CurUserName))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鍙嶅鏍稿け璐ワ紒鏃犳潈闄愶紒";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                string s = "";
+                if (!DBUtility.Xt_BaseBillFun.Fun_AllowCheckBill(oBill, ref s))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = s + "锛屼笉鍏佽鍙嶅鏍�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                if (HInterID <= 0)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "HInterID灏忎簬0锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                // 妫�鏌ュ崟鎹姸鎬�
+                if (oBill.ShowBill(HInterID, 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 (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;
+                }
+
+                // 浼氳鏈熼棿鍒ゆ柇
+                int sYear = 0;
+                int sPeriod = 0;
+                DateTime HDate = DateTime.Now;
+                if (DBUtility.Xt_BaseBillFun.Fun_AllowYearPeriod(HDate, ref sYear, ref sPeriod, ref s) == false)
+                {
+                    objJsonResult.Message = s;
+                    return objJsonResult;
+                }
+
+                // 鎵ц鍙嶅鏍�
+                if (oBill.AbandonCheck(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                {
+                    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;
+                }
+            }
+            catch (Exception e)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "鍙嶅鏍稿け璐ワ紒" + e.ToString();
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+        }
+        #endregion
+
+        #region 璐ㄦ鐢宠鍗曚繚瀛�/缂栬緫
+        [Route("QC_RequestCheckBill/SaveRequestCheckBill")]
+        [HttpPost]
+        public object SaveRequestCheckBill([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 msg3 = sArray[1].ToString(); // 瀛愯〃鏁版嵁
+            string refSav = sArray[2].ToString(); // 鎿嶄綔绫诲瀷
+            string msg4 = sArray[3].ToString(); // 鐢ㄦ埛
+
+            DBUtility.ClsPub.CurUserName = msg4;
+
+            string UserName = "";
+            string s = "";
+            ListModels oListModels = new ListModels();
+
+            try
+            {
+                // 缂栬緫鏉冮檺妫�鏌�
+                if (!DBUtility.ClsPub.Security_Log_second("QC_RequestCheckBill_Edit", 1, false, msg4))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鏃犱繚瀛樻潈闄愶紒";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                DLL.ClsQC_RequestCheckBill oBill = new DLL.ClsQC_RequestCheckBill();
+                List<Models.ClsQC_RequestCheckBillMain> lsmain = new List<Models.ClsQC_RequestCheckBillMain>();
+
+                msg2 = msg2.Replace("\\", "").Replace("\n", "");
+                // 闇�瑕佸厛瀹炵幇杩欎釜鏂规硶
+                lsmain = oListModels.getObjectByJson_QC_RequestCheckBillMain1(msg2);
+
+                foreach (Models.ClsQC_RequestCheckBillMain oItem in lsmain)
+                {
+                    if (refSav == "Add")
+                    {
+                        // 妫�鏌ュ崟鎹彿鏄惁閲嶅
+                        if (BillNew0.IsExistBillNo(ref ClsPub.sExeReturnInfo, oItem.HBillNo, BillStatus, BillOld0.omodel.HInterID))
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "鍗曟嵁鍙烽噸澶嶏紒涓嶅厑璁镐繚瀛橈紒";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                    }
+
+                    if (refSav == "Update")
+                    {
+                        if (BillOld0.ShowBill(oItem.HInterID, ref s) == false)
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "姝ゅ崟鎹湁璇紒";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+
+                        if (BillOld0.omodel.HChecker != "" && BillOld0.omodel.HChecker != null)
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "姝ゅ崟鎹凡缁忚瀹℃牳锛屼笉鍏佽淇敼锛�";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+
+                        if (BillOld0.omodel.HBillStatus > 1)
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = "姝ゅ崟鎹浜庝笉鍙紪杈戠姸鎬侊紝涓嶅厑璁镐慨鏀癸紒";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+
+                        if (!DBUtility.Xt_BaseBillFun.Fun_AllowEditBill(BillOld0, ref s))
+                        {
+                            objJsonResult.code = "0";
+                            objJsonResult.count = 0;
+                            objJsonResult.Message = s + "锛屼笉鍏佽淇敼";
+                            objJsonResult.data = 1;
+                            return objJsonResult;
+                        }
+                    }
+
+                    UserName = oItem.HMaker;
+                    oItem.HBillType = "7525"; // 璐ㄦ鐢宠鍗曠被鍨�
+                    oItem.HYear = DateTime.Now.Year;  // 淇锛氱洿鎺ヤ娇鐢╥nt绫诲瀷
+                    oItem.HPeriod = DateTime.Now.Month; // 淇锛氱洿鎺ヤ娇鐢╥nt绫诲瀷
+                    oItem.HMakeDate = DateTime.Now; // 淇锛氱洿鎺ヤ娇鐢―ateTime绫诲瀷
+
+                    if (oItem.HDate == DateTime.MinValue)
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "淇濆瓨澶辫触锛佹病鏈夊崟鎹棩鏈燂紝鏃犳硶淇濆瓨锛�";
+                        objJsonResult.data = 1;
+                        return objJsonResult;
+                    }
+
+                    oBill.omodel = oItem;
+                }
+
+                // 澶勭悊瀛愯〃鏁版嵁
+                msg3 = msg3.Substring(1, msg3.Length - 2);
+                msg3 = msg3.Replace("\\", "").Replace("\n", "");
+
+                List<Models.ClsQC_RequestCheckBillSub> ls = new List<Models.ClsQC_RequestCheckBillSub>();
+                // 闇�瑕佸厛瀹炵幇杩欎釜鏂规硶
+                ls = oListModels.getObjectByJson_QC_RequestCheckBillSub(msg3);
+
+                int i = 0;
+                foreach (Models.ClsQC_RequestCheckBillSub oItemSub in ls)
+                {
+                    i++;
+                    oItemSub.HEntryID = i;
+                    oItemSub.HEntryCloseDate = null; 
+                    oItemSub.HCloseType = false;
+                    oItemSub.HSourceInterID = 0;
+                    oItemSub.HSourceEntryID = 0;
+                    oBill.DetailColl.Add(oItemSub);
+                }
+
+                // 浼氳鏈熼棿鍒ゆ柇
+                int sYear = 0;
+                int sPeriod = 0;
+                DateTime HDate = DateTime.Now;
+                if (DBUtility.Xt_BaseBillFun.Fun_AllowYearPeriod(HDate, ref sYear, ref sPeriod, ref s) == false)
+                {
+                    objJsonResult.Message = s;
+                    return objJsonResult;
+                }
+
+                // 鎵ц淇濆瓨
+                bool bResult;
+                if (refSav == "Add")
+                {
+                    bResult = oBill.AddBill(ref DBUtility.ClsPub.sExeReturnInfo);
+                }
+                else if (refSav == "Update")
+                {
+                    bResult = oBill.ModifyBill(oBill.omodel.HInterID, ref DBUtility.ClsPub.sExeReturnInfo);
+                }
+                else
+                {
+                    bResult = false;
+                }
+
+                if (bResult)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 1;
+                    objJsonResult.Message = "淇濆瓨鎴愬姛锛�";
+                    objJsonResult.data = 1;
+                    return objJsonResult;
+                }
+                else
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "淇濆瓨澶辫触锛�" + DBUtility.ClsPub.sExeReturnInfo;
+                    objJsonResult.data = 1;
+                    return objJsonResult;
+                }
+            }
+            catch (Exception e)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "淇濆瓨澶辫触锛�" + e.ToString();
+                objJsonResult.data = 1;
+                return objJsonResult;
+            }
+        }
+        #endregion
+
+       
+        #region 璐ㄦ鐢宠鍗曞叧闂�/鍙嶅叧闂�
+        [Route("QC_RequestCheckBill/CloseRequestCheckBill")]
+        [HttpGet]
+        public object CloseRequestCheckBill(int HInterID, int IsAudit, string CurUserName)
+        {
+            string ModRightNameCheck = "QC_RequestCheckBill_Close";
+            DBUtility.ClsPub.CurUserName = CurUserName;
+
+            try
+            {
+                //鏉冮檺妫�鏌�
+                if (!DBUtility.ClsPub.Security_Log_second(ModRightNameCheck, 1, false, CurUserName))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "鍏抽棴澶辫触锛佹棤鏉冮檺锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                if (HInterID <= 0)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "HInterID灏忎簬0锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                // 淇锛氫娇鐢� DLL 鍛藉悕绌洪棿鑰屼笉鏄� DAL
+                WebAPI.DLL.ClsQC_RequestCheckBill oBill = new WebAPI.DLL.ClsQC_RequestCheckBill();
+
+                // 妫�鏌ュ崟鎹姸鎬�
+                if (oBill.ShowBill(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                {
+                    if (oBill.omodel.HDeleteMan.Trim() != "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁宸蹭綔搴�!涓嶈兘杩涜鍏抽棴锛�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+
+                    if (oBill.omodel.HChecker.Trim() == "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁鏈鏍�!涓嶈兘杩涜鍏抽棴锛�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+
+                    if (IsAudit == 0 && oBill.omodel.HCloseMan.Trim() != "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁宸插叧闂�!涓嶈兘鍐嶆鍏抽棴锛�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+
+                    if (IsAudit == 1 && oBill.omodel.HCloseMan.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.CloseBill(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                    {
+                        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;
+                    }
+                }
+                else
+                {
+                    if (oBill.CancelClose(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                    {
+                        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;
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                objJsonResult.code = "0";
+                objJsonResult.count = 0;
+                objJsonResult.Message = "鎿嶄綔澶辫触锛�" + e.ToString();
+                objJsonResult.data = null;
+                return objJsonResult;
+            }
+        }
+        #endregion
+
+        #region 璐ㄦ鐢宠鍗曚綔搴�/鍙嶄綔搴�
+        [Route("QC_RequestCheckBill/DeleteRequestCheckBill")]
+        [HttpGet]
+        public object DeleteRequestCheckBill(int HInterID, int IsAudit, string CurUserName)
+        {
+            string ModRightNameCheck = "QC_RequestCheckBill_Delete";
+            DBUtility.ClsPub.CurUserName = CurUserName;
+
+            try
+            {
+                //鏉冮檺妫�鏌�
+                if (!DBUtility.ClsPub.Security_Log_second(ModRightNameCheck, 1, false, CurUserName))
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "浣滃簾澶辫触锛佹棤鏉冮檺锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                if (HInterID <= 0)
+                {
+                    objJsonResult.code = "0";
+                    objJsonResult.count = 0;
+                    objJsonResult.Message = "HInterID灏忎簬0锛�";
+                    objJsonResult.data = null;
+                    return objJsonResult;
+                }
+
+                
+                WebAPI.DLL.ClsQC_RequestCheckBill oBill = new WebAPI.DLL.ClsQC_RequestCheckBill();
+
+                // 妫�鏌ュ崟鎹姸鎬�
+                if (oBill.ShowBill(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                {
+                    if (oBill.omodel.HChecker.Trim() != "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁宸插鏍�!涓嶈兘杩涜浣滃簾锛�";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+
+                    if (IsAudit == 0 && oBill.omodel.HDeleteMan.Trim() != "")
+                    {
+                        objJsonResult.code = "0";
+                        objJsonResult.count = 0;
+                        objJsonResult.Message = "鍗曟嵁宸蹭綔搴�!涓嶈兘鍐嶄綔搴燂紒";
+                        objJsonResult.data = null;
+                        return objJsonResult;
+                    }
+
+                    if (IsAudit == 1 && oBill.omodel.HDeleteMan.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.Cancelltion(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                    {
+                        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;
+                    }
+                }
+                else
+                {
+                    if (oBill.AbandonCancelltion(HInterID, ref DBUtility.ClsPub.sExeReturnInfo))
+                    {
+                        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;
+                    }
+                }
+            }
+            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
diff --git a/WebAPI/DLL/ClsQC_RequestCheckBill.cs b/WebAPI/DLL/ClsQC_RequestCheckBill.cs
new file mode 100644
index 0000000..5250c37
--- /dev/null
+++ b/WebAPI/DLL/ClsQC_RequestCheckBill.cs
@@ -0,0 +1,477 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Data;
+using WebAPI.Models;
+
+namespace WebAPI.DLL
+{
+    public class ClsQC_RequestCheckBill : DBUtility.ClsXt_BaseBill
+    {
+        public Models.ClsQC_RequestCheckBillMain omodel = new Models.ClsQC_RequestCheckBillMain();
+        public List<Models.ClsQC_RequestCheckBillSub> DetailColl = new List<Models.ClsQC_RequestCheckBillSub>();
+
+        public ClsQC_RequestCheckBill()
+        {
+            base.MvarItemKeySub = "QC_RequestCheckBillSub";
+            base.MvarItemKeySub2 = "";
+            base.MvarItemKeySub3 = "";
+            base.MvarItemKeySub4 = "";
+            base.MvarItemKey = "QC_RequestCheckBillMain";
+            base.MvarReportTitle = "妫�楠岀敵璇峰崟";
+            base.BillType = "7525";
+            base.HBillSubType = "7525";
+        }
+
+        #region 鍥哄畾浠g爜
+        ~ClsQC_RequestCheckBill()
+        {
+            DetailColl = null;
+        }
+
+        #endregion
+
+        //淇敼鍗曟嵁
+        public override bool ModifyBill(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                oCn.BeginTran();
+
+                string mainSql = "UpDate QC_RequestCheckBillMain set  " +
+                " HBillNo='" + omodel.HBillNo + "'" +
+                ",HDate='" + omodel.HDate.ToString("yyyy-MM-dd HH:mm:ss") + "'" +
+                ",HYear='" + omodel.HYear.ToString() + "'" +
+                ",HPeriod='" + omodel.HPeriod.ToString() + "'" +
+                ",HRemark='" + omodel.HRemark + "'" +
+                ",HUpDater='" + DBUtility.ClsPub.CurUserName + "'" +
+                ",HUpDateDate=getdate()" +
+                ",HDeptID=" + omodel.HDeptID.ToString() +
+                ",HBatchNo='" + omodel.HBatchNo + "'" +
+                ",HCheckEmp=" + omodel.HCheckEmp.ToString() +
+                ",HProcID=" + omodel.HProcID.ToString() +
+                ",HGroupID=" + omodel.HGroupID.ToString() +
+                ",HShiftsID=" + omodel.HShiftsID.ToString() +
+                ",HTestType='" + omodel.HTestType + "'" +
+                ",HSourceOrgID=" + omodel.HSourceOrgID.ToString() +
+                ",HInspectOrgID=" + omodel.HInspectOrgID.ToString() +
+                ",HSourceID=" + omodel.HSourceID.ToString() +
+                ",HBackRemark='" + omodel.HBackRemark + "'" +
+                " where HInterID=" + lngBillKey.ToString();
+
+                //鏇存柊涓昏〃
+                oCn.RunProc(mainSql);
+
+                //鍒犻櫎鍏宠仈
+                DeleteRelation(ref sReturn, lngBillKey);
+                //鍒犻櫎瀛愯〃
+                DeleteBillSub(lngBillKey);
+
+                //鎻掑叆瀛愯〃
+                omodel.HInterID = (int)lngBillKey;
+                foreach (Models.ClsQC_RequestCheckBillSub oSub in DetailColl)
+                {
+                    string entryCloseDate = oSub.HEntryCloseDate.HasValue ?
+                        "'" + oSub.HEntryCloseDate.Value.ToString("yyyy-MM-dd HH:mm:ss") + "'" : "NULL";
+
+                    string subSql = "Insert into QC_RequestCheckBillSub " +
+                      " (HInterID,HEntryID,HCloseMan,HEntryCloseDate,HCloseType,HRemark" +
+                      ",HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney" +
+                      ",HMaterID,HUnitID,HQty,HSampleDamageQty" +
+                      ") values("
+                      + omodel.HInterID.ToString() + "," + oSub.HEntryID.ToString() +
+                      ",'" + oSub.HCloseMan + "'," + entryCloseDate +
+                      "," + Convert.ToString(oSub.HCloseType ? 1 : 0) + ",'" + oSub.HRemark + "'" +
+                      "," + oSub.HSourceInterID.ToString() + "," + oSub.HSourceEntryID.ToString() +
+                      ",'" + oSub.HSourceBillNo + "','" + oSub.HSourceBillType +
+                      "'," + oSub.HRelationQty.ToString() + "," + oSub.HRelationMoney.ToString() +
+                      "," + oSub.HMaterID.ToString() + "," + oSub.HUnitID.ToString() +
+                      "," + oSub.HQty.ToString() + "," + oSub.HSampleDamageQty.ToString() +
+                      ") ";
+
+                    oCn.RunProc(subSql);
+                }
+
+                sReturn = "淇敼鍗曟嵁鎴愬姛锛�";
+                oCn.Commit();
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = e.Message;
+                oCn.RollBack();
+                throw;
+            }
+        }
+
+        //鏂板鍗曟嵁
+        public override bool AddBill(ref string sReturn)
+        {
+            try
+            {
+                //妫�鏌ュ崟鎹彿鍜孖D鏄惁閲嶅
+                if (IsExistBillNo(ref DBUtility.ClsPub.sExeReturnInfo, omodel.HBillNo,
+                    Pub_Class.ClsPub.Enum_BillStatus.BillStatus_AddNew, omodel.HInterID))
+                {
+                    omodel.HBillNo = DBUtility.ClsPub.CreateBillCode(BillType, ref DBUtility.ClsPub.sExeReturnInfo, true);
+                }
+                if (IsExistMainID(ref DBUtility.ClsPub.sExeReturnInfo, omodel.HInterID,
+                    Pub_Class.ClsPub.Enum_BillStatus.BillStatus_AddNew))
+                {
+                    omodel.HInterID = (int)DBUtility.ClsPub.CreateBillID(BillType, ref DBUtility.ClsPub.sExeReturnInfo);
+                }
+
+                oCn.BeginTran();
+
+                string mainSql = "Insert Into QC_RequestCheckBillMain   " +
+                "(HBillType,HBillSubType,HInterID,HBillNo,HDate" +
+                ",HYear,HPeriod,HRemark,HMaker,HMakeDate" +
+                ",HBillStatus,HDeptID,HBatchNo,HCheckEmp,HProcID,HGroupID" +
+                ",HShiftsID,HTestType,HSourceOrgID,HInspectOrgID,HSourceID" +
+                ",HMainSourceBillType,HMainSourceInterID,HMainSourceEntryID,HMainSourceBillNo,HBackRemark" +
+                ") " +
+                " values('" + this.BillType + "','" + omodel.HBillSubType + "'," + omodel.HInterID.ToString() +
+                ",'" + omodel.HBillNo + "','" + omodel.HDate.ToString("yyyy-MM-dd HH:mm:ss") + "'" +
+                ", " + omodel.HYear.ToString() + "," + omodel.HPeriod.ToString() + ",'" + omodel.HRemark +
+                "','" + DBUtility.ClsPub.CurUserName + "',getdate()" +
+                ", 1" +
+                ", " + omodel.HDeptID.ToString() + ",'" + omodel.HBatchNo + "'," + omodel.HCheckEmp.ToString() +
+                "," + omodel.HProcID.ToString() + "," + omodel.HGroupID.ToString() +
+                ", " + omodel.HShiftsID.ToString() + ",'" + omodel.HTestType + "'," + omodel.HSourceOrgID.ToString() +
+                "," + omodel.HInspectOrgID.ToString() + "," + omodel.HSourceID.ToString() +
+                ",'" + omodel.HMainSourceBillType + "'," + omodel.HMainSourceInterID.ToString() +
+                "," + omodel.HMainSourceEntryID.ToString() + ",'" + omodel.HMainSourceBillNo + "','" + omodel.HBackRemark + "'" +
+                ") ";
+
+                //涓昏〃
+                oCn.RunProc(mainSql);
+
+                //鎻掑叆瀛愯〃
+                foreach (Models.ClsQC_RequestCheckBillSub oSub in DetailColl)
+                {
+                    string entryCloseDate = oSub.HEntryCloseDate.HasValue ?
+                        "'" + oSub.HEntryCloseDate.Value.ToString("yyyy-MM-dd HH:mm:ss") + "'" : "NULL";
+
+                    string subSql = "Insert into QC_RequestCheckBillSub " +
+                      " (HInterID,HEntryID,HCloseMan,HEntryCloseDate,HCloseType,HRemark" +
+                      ",HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney" +
+                      ",HMaterID,HUnitID,HQty,HSampleDamageQty" +
+                      ") values("
+                      + omodel.HInterID.ToString() + "," + oSub.HEntryID.ToString() +
+                      ",'" + oSub.HCloseMan + "'," + entryCloseDate +
+                      "," + Convert.ToString(oSub.HCloseType ? 1 : 0) + ",'" + oSub.HRemark + "'" +
+                      "," + oSub.HSourceInterID.ToString() + "," + oSub.HSourceEntryID.ToString() +
+                      ",'" + oSub.HSourceBillNo + "','" + oSub.HSourceBillType +
+                      "'," + oSub.HRelationQty.ToString() + "," + oSub.HRelationMoney.ToString() +
+                      "," + oSub.HMaterID.ToString() + "," + oSub.HUnitID.ToString() +
+                      "," + oSub.HQty.ToString() + "," + oSub.HSampleDamageQty.ToString() +
+                      ") ";
+
+                    oCn.RunProc(subSql);
+                }
+
+                sReturn = "鏂板鍗曟嵁鎴愬姛锛�";
+                oCn.Commit();
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = e.Message;
+                oCn.RollBack();
+                throw;
+            }
+        }
+
+        //鏄剧ず鍗曟嵁
+        public override bool ShowBill(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                //鏌ヨ涓昏〃
+                DataSet Ds = oCn.RunProcReturn("Select * from QC_RequestCheckBillMain Where HInterID=" + lngBillKey.ToString(), "QC_RequestCheckBillMain");
+                if (Ds.Tables[0].Rows.Count == 0)
+                {
+                    sReturn = "鍗曟嵁鏈壘鍒帮紒";
+                    return false;
+                }
+
+                //鍥哄畾璧嬪��
+                omodel.HYear = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HYear"]);
+                omodel.HPeriod = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HPeriod"]);
+                omodel.HBillType = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HBillType"]);
+                omodel.HBillSubType = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HBillSubType"]);
+                omodel.HInterID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HInterID"]);
+                omodel.HDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HDate"]);
+                omodel.HBillNo = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HBillNo"]);
+                omodel.HBillStatus = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HBillStatus"]);
+                omodel.HCheckItemNowID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HCheckItemNowID"]);
+                omodel.HCheckItemNextID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HCheckItemNextID"]);
+                omodel.HCheckFlowID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HCheckFlowID"]);
+                omodel.HRemark = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HRemark"]);
+                omodel.HBacker = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HBacker"]);
+                omodel.HBackDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HBackDate"]);
+                omodel.HBackRemark = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HBackRemark"]);
+                omodel.HChecker = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HChecker"]);
+                omodel.HCheckDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HCheckDate"]);
+                omodel.HMaker = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HMaker"]);
+                omodel.HMakeDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HMakeDate"]);
+                omodel.HUpDater = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HUpDater"]);
+                omodel.HUpDateDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HUpDateDate"]);
+                omodel.HCloseMan = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HCloseMan"]);
+                omodel.HCloseDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HCloseDate"]);
+                omodel.HCloseType = DBUtility.ClsPub.isBool(Ds.Tables[0].Rows[0]["HCloseType"]);
+                omodel.HDeleteMan = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HDeleteMan"]);
+                omodel.HDeleteDate = DBUtility.ClsPub.isDate(Ds.Tables[0].Rows[0]["HDeleteDate"]);
+                omodel.HMainSourceBillType = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HMainSourceBillType"]);
+                omodel.HMainSourceInterID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HMainSourceInterID"]);
+                omodel.HMainSourceEntryID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HMainSourceEntryID"]);
+                omodel.HMainSourceBillNo = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HMainSourceBillNo"]);
+                omodel.HPrintQty = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HPrintQty"]);
+
+                //鑷畾涔夊瓧娈佃祴鍊�
+                omodel.HSourceID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HSourceID"]);
+                omodel.HDeptID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HDeptID"]);
+                omodel.HBatchNo = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HBatchNo"]);
+                omodel.HCheckEmp = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HCheckEmp"]);
+                omodel.HProcID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HProcID"]);
+                omodel.HGroupID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HGroupID"]);
+                omodel.HShiftsID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HShiftsID"]);
+                omodel.HTestType = DBUtility.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["HTestType"]);
+                omodel.HSourceOrgID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HSourceOrgID"]);
+                omodel.HInspectOrgID = DBUtility.ClsPub.isInt(Ds.Tables[0].Rows[0]["HInspectOrgID"]);
+
+                //鏌ヨ瀛愯〃
+                DataSet DsSub = oCn.RunProcReturn("Select * from QC_RequestCheckBillSub Where HInterID=" + lngBillKey.ToString(), "QC_RequestCheckBillSub");
+                DetailColl.Clear();
+                for (int i = 0; i < DsSub.Tables[0].Rows.Count; i++)
+                {
+                    Models.ClsQC_RequestCheckBillSub oSub = new Models.ClsQC_RequestCheckBillSub();
+
+                    oSub.HInterID = DBUtility.ClsPub.isInt(DsSub.Tables[0].Rows[i]["HInterID"]);
+                    oSub.HBillNo_bak = DBUtility.ClsPub.isStrNull(DsSub.Tables[0].Rows[i]["HBillNo_bak"]);
+                    oSub.HEntryID = DBUtility.ClsPub.isInt(DsSub.Tables[0].Rows[i]["HEntryID"]);
+                    oSub.HSourceInterID = DBUtility.ClsPub.isInt(DsSub.Tables[0].Rows[i]["HSourceInterID"]);
+                    oSub.HSourceEntryID = DBUtility.ClsPub.isInt(DsSub.Tables[0].Rows[i]["HSourceEntryID"]);
+                    oSub.HSourceBillType = DBUtility.ClsPub.isStrNull(DsSub.Tables[0].Rows[i]["HSourceBillType"]);
+                    oSub.HSourceBillNo = DBUtility.ClsPub.isStrNull(DsSub.Tables[0].Rows[i]["HSourceBillNo"]);
+                    oSub.HRelationQty = DBUtility.ClsPub.isDoule(DsSub.Tables[0].Rows[i]["HRelationQty"]); // 浣跨敤 isDoule
+                    oSub.HRelationMoney = DBUtility.ClsPub.isDoule(DsSub.Tables[0].Rows[i]["HRelationMoney"]);
+                    oSub.HCloseMan = DBUtility.ClsPub.isStrNull(DsSub.Tables[0].Rows[i]["HCloseMan"]);
+                    oSub.HCloseType = DBUtility.ClsPub.isBool(DsSub.Tables[0].Rows[i]["HCloseType"]);
+                    oSub.HEntryCloseDate = DBUtility.ClsPub.isDate(DsSub.Tables[0].Rows[i]["HEntryCloseDate"]);
+                    oSub.HRemark = DBUtility.ClsPub.isStrNull(DsSub.Tables[0].Rows[i]["HRemark"]);
+                    oSub.HMaterID = DBUtility.ClsPub.isInt(DsSub.Tables[0].Rows[i]["HMaterID"]);
+                    oSub.HUnitID = DBUtility.ClsPub.isInt(DsSub.Tables[0].Rows[i]["HUnitID"]);
+                    oSub.HQty = DBUtility.ClsPub.isDoule(DsSub.Tables[0].Rows[i]["HQty"]);
+                    oSub.HSampleDamageQty = DBUtility.ClsPub.isDoule(DsSub.Tables[0].Rows[i]["HSampleDamageQty"]);
+
+                    DetailColl.Add(oSub);
+                }
+                sReturn = "鏄剧ず鍗曟嵁鎴愬姛锛�";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = e.Message;
+                throw;
+            }
+        }
+
+        //鍒犻櫎鍗曟嵁
+        public override bool DeleteBill(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                oCn.BeginTran();
+
+                //妫�鏌ユ槸鍚﹀彲浠ュ垹闄�
+                if (!CanDeleteBill(lngBillKey, ref sReturn))
+                {
+                    oCn.RollBack();
+                    return false;
+                }
+
+                //鍒犻櫎鍏宠仈琛ㄦ暟鎹�
+                DeleteRelation(ref sReturn, lngBillKey);
+
+                //鍒犻櫎瀛愯〃
+                oCn.RunProc("DELETE FROM QC_RequestCheckBillSub WHERE HInterID = " + lngBillKey);
+
+                //鍒犻櫎涓昏〃
+                oCn.RunProc("DELETE FROM QC_RequestCheckBillMain WHERE HInterID = " + lngBillKey);
+
+                sReturn = "鍒犻櫎鍗曟嵁鎴愬姛锛�";
+                oCn.Commit();
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = e.Message;
+                oCn.RollBack();
+                throw;
+            }
+        }
+
+        //妫�鏌ユ槸鍚﹀彲浠ュ垹闄�
+        private bool CanDeleteBill(Int64 lngBillKey, ref string sReturn)
+        {
+            DataSet ds = oCn.RunProcReturn(
+                "SELECT HBillStatus, HChecker FROM QC_RequestCheckBillMain WHERE HInterID = " + lngBillKey,
+                "QC_RequestCheckBillMain");
+
+            if (ds.Tables[0].Rows.Count == 0)
+            {
+                sReturn = "鍗曟嵁涓嶅瓨鍦紒";
+                return false;
+            }
+
+            int billStatus = DBUtility.ClsPub.isInt(ds.Tables[0].Rows[0]["HBillStatus"]);
+            string checker = DBUtility.ClsPub.isStrNull(ds.Tables[0].Rows[0]["HChecker"]);
+
+            if (billStatus > 1)
+            {
+                sReturn = "鍗曟嵁褰撳墠澶勪簬涓嶈兘鍒犻櫎鐘舵�侊紒";
+                return false;
+            }
+
+            if (!string.IsNullOrEmpty(checker))
+            {
+                sReturn = "鍗曟嵁宸茬粡瀹℃牳锛屼笉鑳藉垹闄わ紒";
+                return false;
+            }
+
+            return true;
+        }
+
+        // 娉ㄦ剰锛氫互涓嬫柟娉曢渶瑕佹鏌ュ熀绫绘槸鍚︽槸 virtual 鎴� abstract
+        // 濡傛灉鍩虹被娌℃湁杩欎簺鏂规硶锛岄渶瑕佸垹闄ゆ垨娣诲姞 new 鍏抽敭瀛�
+
+        // 瀹℃牳鍗曟嵁
+        public new bool CheckBill(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                string sql = "Update QC_RequestCheckBillMain " +
+                    " Set HChecker = '" + DBUtility.ClsPub.CurUserName +
+                    "', HCheckDate = getdate(), HBillStatus = 2 " +
+                    " Where HInterID = " + lngBillKey.ToString();
+
+                oCn.RunProc(sql);
+
+                sReturn = "瀹℃牳鍗曟嵁鎴愬姛锛�";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = "瀹℃牳鍗曟嵁澶辫触锛�" + e.Message;
+                return false;
+            }
+        }
+
+        // 鍙嶅鏍稿崟鎹�
+        public new bool AbandonCheck(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                string sql = "Update QC_RequestCheckBillMain " +
+                    " Set HChecker = '', HCheckDate = NULL, HBillStatus = 1 " +
+                    " Where HInterID = " + lngBillKey.ToString();
+
+                oCn.RunProc(sql);
+
+                sReturn = "鍙嶅鏍稿崟鎹垚鍔燂紒";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = "鍙嶅鏍稿崟鎹け璐ワ細" + e.Message;
+                return false;
+            }
+        }
+
+        // 鍏抽棴鍗曟嵁
+        public new bool CloseBill(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                string sql = "Update QC_RequestCheckBillMain " +
+                    " Set HCloseMan = '" + DBUtility.ClsPub.CurUserName +
+                    "', HCloseDate = getdate(), HBillStatus = 3 " +
+                    " Where HInterID = " + lngBillKey.ToString();
+
+                oCn.RunProc(sql);
+
+                sReturn = "鍏抽棴鍗曟嵁鎴愬姛锛�";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = "鍏抽棴鍗曟嵁澶辫触锛�" + e.Message;
+                return false;
+            }
+        }
+
+        // 鍙嶅叧闂崟鎹�
+        public new bool CancelClose(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                string sql = "Update QC_RequestCheckBillMain " +
+                    " Set HCloseMan = '', HCloseDate = NULL, HBillStatus = 2 " +
+                    " Where HInterID = " + lngBillKey.ToString();
+
+                oCn.RunProc(sql);
+
+                sReturn = "鍙嶅叧闂崟鎹垚鍔燂紒";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = "鍙嶅叧闂崟鎹け璐ワ細" + e.Message;
+                return false;
+            }
+        }
+
+        // 浣滃簾鍗曟嵁
+        public new bool Cancelltion(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                string sql = "Update QC_RequestCheckBillMain " +
+                    " Set HDeleteMan = '" + DBUtility.ClsPub.CurUserName +
+                    "', HDeleteDate = getdate(), HBillStatus = 4 " +
+                    " Where HInterID = " + lngBillKey.ToString();
+
+                oCn.RunProc(sql);
+
+                sReturn = "浣滃簾鍗曟嵁鎴愬姛锛�";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = "浣滃簾鍗曟嵁澶辫触锛�" + e.Message;
+                return false;
+            }
+        }
+
+        // 鍙嶄綔搴熷崟鎹�
+        public new bool AbandonCancelltion(Int64 lngBillKey, ref string sReturn)
+        {
+            try
+            {
+                string sql = "Update QC_RequestCheckBillMain " +
+                    " Set HDeleteMan = '', HDeleteDate = NULL, HBillStatus = 1 " +
+                    " Where HInterID = " + lngBillKey.ToString();
+
+                oCn.RunProc(sql);
+
+                sReturn = "鍙嶄綔搴熷崟鎹垚鍔燂紒";
+                return true;
+            }
+            catch (Exception e)
+            {
+                sReturn = "鍙嶄綔搴熷崟鎹け璐ワ細" + e.Message;
+                return false;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/WebAPI/ListModels.cs b/WebAPI/ListModels.cs
index f9f6120..c6ce47b 100644
--- a/WebAPI/ListModels.cs
+++ b/WebAPI/ListModels.cs
@@ -4342,10 +4342,44 @@
 
 
         /// <summary>
+        /// 灏咼SON瀛楃涓茶浆鎹负璐ㄦ鐢宠鍗曞瓙琛ㄥ璞″垪琛�
+        /// </summary>
+        /// <param name="jsonString">JSON瀛楃涓�</param>
+        /// <returns>璐ㄦ鐢宠鍗曞瓙琛ㄥ璞″垪琛�</returns>
+        public List<Models.ClsQC_RequestCheckBillSub> getObjectByJson_QC_RequestCheckBillSub(string jsonString)
+        {
+            // 濡傛灉jsonString宸茬粡鏄暟缁勬牸寮忥紙浠寮�澶达紝浠缁撳熬锛夛紝灏变笉闇�瑕佸啀鍔燵]
+            if (!jsonString.StartsWith("[") && !jsonString.EndsWith("]"))
+            {
+                jsonString = "[" + jsonString + "]";
+            }
+
+            List<Models.ClsQC_RequestCheckBillSub> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Models.ClsQC_RequestCheckBillSub>>(jsonString);
+            return list;
+        }
+
+
+        /// <summary>
+        /// 灏咼SON瀛楃涓茶浆鎹负璐ㄦ鐢宠鍗曚富琛ㄥ璞″垪琛�
+        /// </summary>
+        /// <param name="jsonString">JSON瀛楃涓�</param>
+        /// <returns>璐ㄦ鐢宠鍗曚富琛ㄥ璞″垪琛�</returns>
+        public List<Models.ClsQC_RequestCheckBillMain> getObjectByJson_QC_RequestCheckBillMain1(string jsonString)
+        {
+            // 濡傛灉jsonString宸茬粡鏄暟缁勬牸寮忥紙浠寮�澶达紝浠缁撳熬锛夛紝灏变笉闇�瑕佸啀鍔燵]
+            if (!jsonString.StartsWith("[") && !jsonString.EndsWith("]"))
+            {
+                jsonString = "[" + jsonString + "]";
+            }
+
+            List<Models.ClsQC_RequestCheckBillMain> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Models.ClsQC_RequestCheckBillMain>>(jsonString);
+            return list;
+        }
+        /// <summary>
         /// 
         /// </summary>
         /// <param name="jsonString"></param>
-        /// <returns></returns>
+        /// <returns></returns>    
         public List<Models.ClsKf_ICStockBillMain> getObjectByJson_Kf_ICStockBillMain(string jsonString)
         {
             jsonString = "[" + jsonString.ToString() + "]";
diff --git a/WebAPI/Models/ClsQC_RequestCheckBillMain.cs b/WebAPI/Models/ClsQC_RequestCheckBillMain.cs
new file mode 100644
index 0000000..c5a6785
--- /dev/null
+++ b/WebAPI/Models/ClsQC_RequestCheckBillMain.cs
@@ -0,0 +1,52 @@
+锘縰sing System;
+
+namespace WebAPI.Models
+{
+    public class ClsQC_RequestCheckBillMain
+    {
+        // 鍩虹瀛楁
+        public int HYear { get; set; }
+        public int HPeriod { get; set; }
+        public string HBillType { get; set; }
+        public string HBillSubType { get; set; }
+        public int HInterID { get; set; }
+        public DateTime HDate { get; set; }
+        public string HBillNo { get; set; }
+        public int HBillStatus { get; set; } 
+        public int HCheckItemNowID { get; set; }
+        public int HCheckItemNextID { get; set; }
+        public int HCheckFlowID { get; set; }
+        public string HRemark { get; set; }
+        public string HBacker { get; set; }
+        public DateTime? HBackDate { get; set; }
+        public string HBackRemark { get; set; }
+        public string HChecker { get; set; }
+        public DateTime? HCheckDate { get; set; }
+        public string HMaker { get; set; }
+        public DateTime? HMakeDate { get; set; }
+        public string HUpDater { get; set; }
+        public DateTime? HUpDateDate { get; set; }
+        public string HCloseMan { get; set; }
+        public DateTime? HCloseDate { get; set; }
+        public bool HCloseType { get; set; }
+        public string HDeleteMan { get; set; }
+        public DateTime? HDeleteDate { get; set; }
+        public string HMainSourceBillType { get; set; }
+        public int HMainSourceInterID { get; set; }
+        public int HMainSourceEntryID { get; set; }
+        public string HMainSourceBillNo { get; set; }
+        public int HPrintQty { get; set; }
+
+        // 鑷畾涔夊瓧娈�
+        public int HSourceID { get; set; }
+        public int HDeptID { get; set; }
+        public string HBatchNo { get; set; }
+        public int HCheckEmp { get; set; }
+        public int HProcID { get; set; }
+        public int HGroupID { get; set; }
+        public int HShiftsID { get; set; }
+        public string HTestType { get; set; }
+        public int HSourceOrgID { get; set; }
+        public int HInspectOrgID { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/WebAPI/Models/ClsQC_RequestCheckBillSub.cs b/WebAPI/Models/ClsQC_RequestCheckBillSub.cs
new file mode 100644
index 0000000..a8315a8
--- /dev/null
+++ b/WebAPI/Models/ClsQC_RequestCheckBillSub.cs
@@ -0,0 +1,32 @@
+锘縰sing System;
+
+namespace WebAPI.Models
+{
+    public class ClsQC_RequestCheckBillSub
+    {
+        // 涓昏〃鍏宠仈瀛楁
+        public int HInterID { get; set; }
+        public string HBillNo_bak { get; set; }
+        public int HEntryID { get; set; }
+
+        // 鐘舵�佸瓧娈�
+        public string HCloseMan { get; set; }
+        public DateTime? HEntryCloseDate { get; set; }
+        public bool HCloseType { get; set; }
+        public string HRemark { get; set; }
+
+        // 婧愬崟鍏宠仈瀛楁
+        public int HSourceInterID { get; set; }
+        public int HSourceEntryID { get; set; }
+        public string HSourceBillNo { get; set; }
+        public string HSourceBillType { get; set; }
+        public double HRelationQty { get; set; }      // dec(18,8) 瀵瑰簲 double
+        public double HRelationMoney { get; set; }    // dec(18,8) 瀵瑰簲 double
+
+        // 鑷畾涔夊瓧娈�
+        public int HMaterID { get; set; }
+        public int HUnitID { get; set; }
+        public double HQty { get; set; }              // money 瀵瑰簲 double
+        public double HSampleDamageQty { get; set; }  // dec(18,8) 瀵瑰簲 double
+    }
+}
\ No newline at end of file
diff --git a/WebAPI/Properties/PublishProfiles/FolderProfile11.pubxml.user b/WebAPI/Properties/PublishProfiles/FolderProfile11.pubxml.user
index a052877..210b24d 100644
--- a/WebAPI/Properties/PublishProfiles/FolderProfile11.pubxml.user
+++ b/WebAPI/Properties/PublishProfiles/FolderProfile11.pubxml.user
@@ -5,7 +5,7 @@
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <_PublishTargetUrl>D:\gz\缃戠珯鍙戝竷\MES-WEB-API</_PublishTargetUrl>
-    <History>True|2025-12-26T00:20:29.5411144Z;True|2025-12-26T08:16:26.6662581+08:00;False|2025-12-26T08:16:07.5700329+08:00;True|2025-12-25T17:07:24.9496892+08:00;True|2025-12-25T17:04:00.1314291+08:00;True|2025-12-25T16:53:07.6258358+08:00;True|2025-12-25T16:47:09.1816088+08:00;True|2025-12-25T11:23:19.3812293+08:00;True|2025-12-25T11:15:13.7273857+08:00;</History>
+    <History>True|2025-12-29T08:07:54.9198175Z;True|2025-12-29T16:03:22.7326283+08:00;True|2025-12-29T14:48:43.2998704+08:00;True|2025-12-29T13:15:31.9190907+08:00;False|2025-12-29T13:14:50.6997009+08:00;False|2025-12-29T13:14:43.3747902+08:00;True|2025-12-29T11:23:10.8799366+08:00;True|2025-12-29T10:28:51.7449005+08:00;True|2025-12-29T10:16:49.3899978+08:00;True|2025-12-29T10:12:43.7936956+08:00;True|2025-12-29T10:11:56.0271637+08:00;True|2025-12-29T08:50:47.5622375+08:00;False|2025-12-29T08:50:28.9083964+08:00;True|2025-12-26T17:03:30.4685598+08:00;True|2025-12-26T15:03:24.1797813+08:00;True|2025-12-26T14:44:52.6944631+08:00;True|2025-12-26T14:39:46.7764533+08:00;True|2025-12-26T14:36:47.1612784+08:00;True|2025-12-26T14:32:05.2128659+08:00;True|2025-12-26T14:29:20.7607039+08:00;True|2025-12-26T08:47:33.3798643+08:00;True|2025-12-26T08:20:29.5411144+08:00;True|2025-12-26T08:16:26.6662581+08:00;False|2025-12-26T08:16:07.5700329+08:00;True|2025-12-25T17:07:24.9496892+08:00;True|2025-12-25T17:04:00.1314291+08:00;True|2025-12-25T16:53:07.6258358+08:00;True|2025-12-25T16:47:09.1816088+08:00;True|2025-12-25T11:23:19.3812293+08:00;True|2025-12-25T11:15:13.7273857+08:00;</History>
   </PropertyGroup>
   <ItemGroup>
     <File Include="apiapp.json">
@@ -294,13 +294,13 @@
       <publishTime>11/24/2014 19:18:48</publishTime>
     </File>
     <File Include="bin/WebAPI.dll">
-      <publishTime>12/26/2025 08:20:24</publishTime>
+      <publishTime>12/29/2025 16:07:50</publishTime>
     </File>
     <File Include="bin/WebAPI.pdb">
-      <publishTime>12/26/2025 08:20:24</publishTime>
+      <publishTime>12/29/2025 16:07:50</publishTime>
     </File>
     <File Include="bin/WebAPI.XmlSerializers.dll">
-      <publishTime>12/26/2025 08:20:27</publishTime>
+      <publishTime>12/29/2025 16:07:54</publishTime>
     </File>
     <File Include="bin/WebGrease.dll">
       <publishTime>07/18/2013 01:03:52</publishTime>
@@ -504,7 +504,7 @@
       <publishTime>11/12/2025 10:43:47</publishTime>
     </File>
     <File Include="Web.config">
-      <publishTime>12/25/2025 11:15:12</publishTime>
+      <publishTime>12/26/2025 08:47:33</publishTime>
     </File>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/WebAPI/WebAPI.csproj b/WebAPI/WebAPI.csproj
index d68b5df..eab5ccb 100644
--- a/WebAPI/WebAPI.csproj
+++ b/WebAPI/WebAPI.csproj
@@ -670,10 +670,12 @@
     <Compile Include="Controllers\鍩虹璧勬枡\鍩虹璧勬枡\Gy_PlanImplementation_ReportController.cs" />
     <Compile Include="Controllers\鍩虹璧勬枡\鍩虹璧勬枡\Gy_PNLInfoTypeLevelController.cs" />
     <Compile Include="Controllers\鍩虹璧勬枡\鍩虹璧勬枡\Gy_ShelfLifeNearExpiryController.cs" />
+    <Compile Include="Controllers\妫�楠岀敵璇峰崟\QC_RequestCheckBillController.cs" />
     <Compile Include="Controllers\椤圭洰绠$悊\宸ョ▼椤圭洰\PM_ProjectBill_WorkController.cs" />
     <Compile Include="DLL\ClsGy_ItemMoney_Ctl.cs" />
     <Compile Include="DLL\ClsSc_MESStopRestoreWorkBill.cs" />
     <Compile Include="DLL\ClsSc_PackUnionBillBarCode_temp_Ctl.cs" />
+    <Compile Include="DLL\ClsQC_RequestCheckBill.cs" />
     <Compile Include="Models\ClsGy_Billorigin.cs" />
     <Compile Include="Models\ClsSc_MESStopRestoreWorkBillMain.cs" />
     <Compile Include="Models\ClsSc_MESStopRestoreWorkBillSub.cs" />
@@ -938,6 +940,8 @@
     <Compile Include="Models\SBGL\SBBB\Sb_EquipMentCollectionTechParam.cs" />
     <Compile Include="Models\Sc_StationOutBillSub_Sup.cs" />
     <Compile Include="Models\Gy_MateNumRelation_Sec.cs" />
+    <Compile Include="Models\ClsQC_RequestCheckBillMain.cs" />
+    <Compile Include="Models\ClsQC_RequestCheckBillSub.cs" />
     <Compile Include="Models\Xs_SendGoodsPlanBillMain.cs" />
     <Compile Include="Models\鍩虹璧勬枡\ClsGy_EmployeeSub.cs" />
     <Compile Include="Models\鍩虹璧勬枡\Gy_ColorClass.cs" />

--
Gitblit v1.9.1