yangle
2025-01-09 69b06dbacab4cbb00985e4bfcc8a39ac8134fce0
WFormSynchronizeData_SMR/WFormSynchronizeData_SMR/Form1.cs
@@ -15,177 +15,201 @@
{
    public partial class Form1 : Form
    {
       public DBHelper oCN = new DBHelper();
        public DBHelper oCN = new DBHelper();
        public Form1()
        {
            InitializeComponent();
        }
        //读取数据
        private void  btnReadData_Click(object sender, EventArgs e)
        private void btnReadData_Click(object sender, EventArgs e)
        {
            int year = DateTime.Now.Year;
            string month = DateTime.Now.Month.ToString();
            string day = DateTime.Now.Day.ToString();
            //if (month.Length < 2) {
            //    month = "0" + month;
            //}
            //if (day.Length < 2)
            //{
            //    day = "0" + day;
            //}
            string dataTime = DateTime.Now.ToString("yyyyMMdd");
            //CustomWriteLog("1:" + dataTime, DateTime.Now.ToString("yyyy-MM-dd"));
            ////判断是否有这个文件
            bool flag = File.Exists($@"D:\{year}\{month}\{day}\{dataTime}.txt");
            //bool flag = File.Exists($@"C:\Users\admin\Desktop\新建文件夹 (2)\20231123.txt");
            //CustomWriteLog("2:" + flag, DateTime.Now.ToString("yyyy-MM-dd"));
            if (flag)
            DataTable list = oCN.RunProcReturn("select  * from Sb_EquipMentCollection_SN  WITH(NOLOCK) where HFlag=0  order by HCreateTime", "Sb_EquipMentCollection_SN").Tables[0];
            //循环集合
            for (int i = 0; i < list.Rows.Count; i++)
            {
                StreamReader stream = new StreamReader($@"D:\{year}\{month}\{day}\{dataTime}.txt", Encoding.GetEncoding("gb2312"));
                //CustomWriteLog("3:"+ $@"D:\{year}\{month}\{day}\{dataTime}.txt", DateTime.Now.ToString("yyyy-MM-dd"));
                //StreamReader stream = new StreamReader($@"C:\Users\admin\Desktop\新建文件夹 (2)\20231123.txt",Encoding.GetEncoding("gb2312"));
                string FileData = stream.ReadToEnd();
                stream.Close();
                FileData = FileData.Substring(0, FileData.Length - 1);
                FileData = "[" + FileData + "]";
                //CustomWriteLog("4:" + FileData, DateTime.Now.ToString("yyyy-MM-dd"));
                //JSON序列化转换字典集合
                List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
                List<object> DataList = JsonConvert.DeserializeObject<List<object>>(FileData);
                foreach (JObject item in DataList)
                {
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    foreach (var itm in item.Properties())
                    {
                        dic.Add(itm.Name, itm.Value.ToString());
                    }
                    list.Add(dic);
                }
                //CustomWriteLog("5:" + list.Count, DateTime.Now.ToString("yyyy-MM-dd"));
                //获取当前时间
                DateTime ActionTime = DateTime.Parse(DateTime.Now.AddMinutes(-1).ToString("yyyy-MM-dd  HH:mm:ss"));
                DateTime EndTime = DateTime.Parse(DateTime.Now.AddMinutes(1).ToString("yyyy-MM-dd  HH:mm:00"));
                //循环集合
                for (int i = 0; i < list.Count; i++)
                {
                    DateTime NowTime = DateTime.Parse(list[i]["HDate"].ToString());
                    if (NowTime >= ActionTime && NowTime < EndTime)
                    {
                        string HResult = list[i]["HResult"].ToString();
                bool flag = false;
                string HResult = list.Rows[i]["HResult"].ToString();
                string HBadCodeSN = list.Rows[i]["HBarCode"].ToString();
                string HCreateTime = list.Rows[i]["HCreateTime"].ToString();
                //开始事务
                oCN.BeginTran();
                        //CustomWriteLog("6:" + HResult, DateTime.Now.ToString("yyyy-MM-dd"));
                        if (HResult == "OK")
                        {
                            HResultOK(list[i]);
                        }
                        else if (HResult == "NG")
                        {
                            HResultNG(list[i]);
                        }
                    }
                    else
                    {
                        //CustomWriteLog("时间不在保存范围内", DateTime.Now.ToString("yyyy-MM-dd"));
                    }
                if (HResult == "OK")
                {
                    flag=HResultOK(list.Rows[i]);
                }
                else if (HResult == "NG")
                {
                    flag = HResultNG(list.Rows[i]);
                }
                if (flag) {
                    oCN.RunProc("update Sb_EquipMentCollection_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "' and HCreateTime='"+ HCreateTime + "'");
                    //结束事务
                    oCN.Commit();
                }
            }
        }
        public void HResultOK(Dictionary<string, string> dic)
        public bool HResultOK(DataRow dic)
        {
            try
            {
                string HBadCodeSN = dic["HBadCodeSN"].ToString();
                bool flag = false;
                string HBadCodeSN = dic["HBarCode"].ToString();
                HBadCodeSN = TM_ZH(HBadCodeSN);
                bool flag = SNHBardCodeList(HBadCodeSN);
                int num = SNHBardCodeList(HBadCodeSN);
                if (flag)
                if (num == 0)
                {
                    getAdd(dic, HBadCodeSN, "OK");
                    flag = getOutBillAdd(dic, HBadCodeSN, "OK");
                }
                else if (num == 1)
                {
                    //判断这个条码之前的状态是否为NG
                    DataSet ds = oCN.RunProcReturn(@"select * from Sb_EquipMentCollection_SN  WITH(NOLOCK) where HBarCode='" + HBadCodeSN + "' and HCreateTime<'" + dic["HCreateTime"].ToString() + "' and HResult='NG'", "Sb_EquipMentCollection_SN");
                    //查询出站单是否包含条码
                    DataSet ds1 = oCN.RunProcReturn(@"select a.HSourceID,a.HProcID,* from Sc_StationOutBillMain a WITH(NOLOCK)
inner join Sc_StationOutBillSub_SN sn WITH(NOLOCK) on a.HInterID=sn.HInterID
left join Gy_Source s WITH(NOLOCK) on a.HSourceID=s.HItemID
left join Gy_Process p WITH(NOLOCK) on a.HProcID=p.HItemID
where  p.HNumber='" + dic["HProcNumber"].ToString() + "' and sn.HBarCode='" + HBadCodeSN + "'", "Sc_StationOutBillSub_SN");
                    if (ds.Tables[0].Rows.Count > 0 && ds1.Tables[0].Rows.Count == 0)
                    {
                        flag = getOKOutBillAdd(dic, HBadCodeSN, "OK");
                    }
                    else
                    {
                        if (ds1.Tables[0].Rows.Count > 0)
                        {
                            flag = true;
                            //oCN.RollBack();
                        }
                        else
                        {
                            flag = getOutBillAdd(dic, HBadCodeSN, "OK");
                        }
                    }
                }
                else if (num == 2)
                {
                    flag = false;
                }
                return flag;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                //objJsonResult.code = "0";
                //objJsonResult.count = 0;
                //objJsonResult.Message = "没有返回任何记录!" + e.ToString();
                //objJsonResult.data = null;
                //return objJsonResult;
                string HBadCodeSN = dic["HBarCode"].ToString();
                CustomWriteLog("条码:" + HBadCodeSN + ",错误原因:" + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
        public void HResultNG(Dictionary<string, string> dic)
        public bool HResultNG(DataRow dic)
        {
            try
            {
                string HBadCodeSN = dic["HBadCodeSN"].ToString();
                bool flag = false;
                int num = 0;
                string HBadCodeSN = dic["HBarCode"].ToString();
                HBadCodeSN = TM_ZH(HBadCodeSN);
                bool flag = SNHBardCodeList(HBadCodeSN);
                num = SNHBardCodeList(HBadCodeSN);
                if (flag)
                if (num == 0 || num == 1)
                {
                    getAdd(dic, HBadCodeSN, "NG");
                    //开始事务
                    oCN.BeginTran();
                    flag = getOutBillAdd(dic, HBadCodeSN, "NG");
                    //反写条码状态
                    oCN.RunProc("update Gy_BarCodeBill set HStatus='不良',HRemark='"+dic["HBadReason"].ToString()+"' where HBarCode='" + HBadCodeSN + "'");
                    //结束事务
                    oCN.Commit();
                    if (flag)
                    {
                        //新增不良汇报
                        flag = getBadBillAdd(dic);
                        //反写条码状态
                        oCN.RunProc("update Gy_BarCodeBill set HStatus='不良',HRemark='" + dic["HType"].ToString() + "' where HBarCode='" + HBadCodeSN + "'");
                    }
                }
                else if (num == 2)
                {
                    flag = false;
                }
                return flag;
            }
            catch (Exception e)
            {
                //回滚事务
                oCN.RollBack();
                //objJsonResult.code = "0";
                //objJsonResult.count = 0;
                //objJsonResult.Message = "没有返回任何记录!" + e.ToString();
                //objJsonResult.data = null;
                //return objJsonResult;
                string HBadCodeSN = dic["HBarCode"].ToString();
                CustomWriteLog("条码:" + HBadCodeSN + ",错误原因:"+e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
        public bool getAdd(Dictionary<string, string> dic,string HBadCodeSN,string HResult) {
        //新增出站汇报单
        public bool getOutBillAdd(DataRow dic, string HBadCodeSN, string HResult)
        {
            try
            {
                //获取绑定流转卡
                DataSet ds = oCN.RunProcReturn(@"select * from Gy_BarCodeBill where HBarCode='" + HBadCodeSN + "'", "Gy_BarCodeBill");
                DataSet ds = oCN.RunProcReturn(@"select * from Gy_BarCodeBill WITH(NOLOCK) where HBarCode='" + HBadCodeSN + "'", "Gy_BarCodeBill");
                string HProcExchBillNo = ds.Tables[0].Rows[0]["HSourceBillNo"].ToString();
                string HProcNumber = dic["HProcNumber"].ToString();
                ds = oCN.RunProcReturn("select * from Gy_Source where HNumber='" + dic["HSouceNumber"].ToString() + "' ", "Gy_Source");
                ds = oCN.RunProcReturn("select * from Gy_Source WITH(NOLOCK) where HNumber='" + dic["HSourceCode"].ToString() + "' ", "Gy_Source");
                long HSourceID = 0;
                if (ds.Tables[0].Rows.Count != 0) {
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HSourceID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产资源ID
                }
                ds = oCN.RunProcReturn("select * from Gy_Department where HNumber='" + dic["HDeptNumber"].ToString() + "' ", "Gy_Department");
                long HDeptID = 0;
                //查询职员
                ds = oCN.RunProcReturn("select * from Gy_Employee WITH(NOLOCK) where HNumber='" + dic["HEmpCode"].ToString() + "' ", "Gy_Employee");
                long HEmpIDs = 0;
                string HEmpName = "";
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HDeptID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产部门
                    HEmpIDs = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//职员ID
                    HEmpName = ds.Tables[0].Rows[0]["HName"].ToString();
                }
                ds = oCN.RunProcReturn(@"select   b.HProcNo,b.HProcID,a.HMaterID,a.HQty,a.HInterID,HEntryID,a.HICMOInterID,a.HICMOEntryID,a.HICMOBillNo from Sc_ProcessExchangeBillMain a
inner join Sc_ProcessExchangeBillSub b on a.HInterID=b.HInterID
left join Gy_Process p on  b.HProcID=p.HItemID
                long HDeptID = 0;
                long HPRDOrgIDs = 0;
                string sReturn = "";
                if (GetSingleSystemParameter("WMS_CampanyName", ref sReturn) == "杭州斯莫尔")
                {
                    HDeptID = 389505;
                    HPRDOrgIDs = 100199;
                }
                else {
                    //ds = oCN.RunProcReturn("select * from Gy_Department where HNumber='" + dic["HDeptNumber"].ToString() + "' ", "Gy_Department");
                    //if (ds.Tables[0].Rows.Count != 0)
                    //{
                    //    HDeptID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产部门
                    //}
                    HDeptID = 0;
                }
                ds = oCN.RunProcReturn(@"select   a.HWorkShopID,b.HProcNo,b.HProcID,a.HMaterID,a.HQty,a.HInterID,HEntryID,a.HICMOInterID,a.HICMOEntryID,a.HICMOBillNo,b.HCenterID  from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
inner join Sc_ProcessExchangeBillSub b WITH(NOLOCK) on a.HInterID=b.HInterID
left join Gy_Process p WITH(NOLOCK) on  b.HProcID=p.HItemID
where a.HBillNo='" + HProcExchBillNo + "'  and p.HNumber='" + HProcNumber + "'", "Sc_ProcessExchangeBillMain");
                string sExeReturnInfo = "";
                long HMainInterID = 0;
                string BillType = "3791";
                string HBillSubType = "3791";
                string HWorkShopID= ds.Tables[0].Rows[0]["HWorkShopID"].ToString();
                int HBillStatus = 1;
                string HMaker = "";//制单人
                string HMaker = HEmpName;//制单人
                string HMouldNum = "";//模穴号
                int HYear = DateTime.Now.Year;
                double HPeriod = DateTime.Now.Month;
@@ -212,8 +236,8 @@
                long HPayProcID = 0;//核算工序ID
                long HGroupID = 22;//班组ID 白班
                long HEmpID = 0;//操作员ID
                long HEmpID2 = 0;////操作员2ID
                long HEmpID = HEmpIDs;//操作员ID
                long HEmpID2 = HEmpIDs;////操作员2ID
                string HBarCode = HProcExchBillNo;//条形码
                string HAddr = "";
                string HBarCodeMaker = "";
@@ -226,7 +250,7 @@
                double HPrice = 0;
                double HMoney = 0;
                double HBadCount = 0;//不良数量
                long HCenterID = 0;//工作中心ID
                long HCenterID = long.Parse(ds.Tables[0].Rows[0]["HCenterID"].ToString());//工作中心ID
                string HProcNo = ds.Tables[0].Rows[0]["HProcNo"].ToString();//流水号
                string HOrderProcNO = "";//订单跟踪号
                string HSourceNameList = "";//设备清单
@@ -240,26 +264,45 @@
                double HPriceRate = 0;//系数
                double HWorkTimes = 0;//工时
                long HQCCheckID = 0;//检验员ID
                long HPRDOrgID = 100199;//组织ID
                long HPRDOrgID = HPRDOrgIDs;//组织ID
                double HmaterOutqty = 0;//白坯发布
                double HProcPriceRate = 0;//工价系数
                int HTemporaryAreaID = 0;//暂放区
                long HInterID = 0;
                string HBillNo = "";
                int HShiftsID = 0;
                oCN.BeginTran();
                DataSet set= oCN.RunProcReturn("exec h_p_Gy_GetWorkShiftInfo " + HWorkShopID + "," + HCenterID, "h_p_Gy_GetWorkShiftInfo");
                if (set.Tables[0].Rows.Count > 0) {
                    HShiftsID = int.Parse(set.Tables[0].Rows[0]["HInterID"].ToString());
                }
                ds = oCN.RunProcReturn("exec h_p_Sc_SNBarcodeProcCtrl_S '" + HBadCodeSN + "'," + HProcID, "h_v_Gy_QualifiedRecordsList");
                if (ds.Tables[0].Rows.Count == 0)
                {
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBadCodeSN + "工序:" + HProcID + ",工序控制查无数据!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                else if (ds.Tables[0].Rows[0]["HBack"].ToString() == "2")
                {
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBadCodeSN + "工序:" + HProcID + "," + ds.Tables[0].Rows[0]["HBackRemark"].ToString() + "!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                //判断当前流转卡的出站单 是否有数据
                ds = oCN.RunProcReturn(@"select  * from Sc_StationOutBillMain a
left join Gy_Process p on  a.HProcID=p.HItemID
where HProcExchBillNo='" + HProcExchBillNo + "' and p.HNumber='" + HProcNumber + "'", "Sc_StationOutBillMain");
                ds = oCN.RunProcReturn(@"select  * from Sc_StationOutBillMain a WITH(NOLOCK)
left join Gy_Process p WITH(NOLOCK) on  a.HProcID=p.HItemID
where HProcExchBillNo='" + HProcExchBillNo + "' and p.HNumber='" + HProcNumber + "' and CONVERT(varchar(10),HDate,20) ='" + DateTime.Now.ToString("yyyy-MM-dd") + "'", "Sc_StationOutBillMain");
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HInterID = long.Parse(ds.Tables[0].Rows[0]["HInterID"].ToString());
                    HBillNo = ds.Tables[0].Rows[0]["HBillNo"].ToString();//递入type得到的单据号
                }
                if (ds.Tables[0].Rows.Count == 0)
                {
                    HInterID = CreateBillID("3791", ref sExeReturnInfo);//递入type得到的单据ID
@@ -276,7 +319,7 @@
                   ",HSupID,HQty,HPrice,HMoney,HBadCount,HCenterID,HProcNo,HOrderProcNO,HSourceNameList" +
                   ",HMainSourceInterID,HMainSourceBillNo,HMainSourceBillType,HLastSubProc" +
                   ",HEmpID2,HEmpID3,HEmpID4,HEmpID5,HDSQty,HChongQty,HPriceRate,HWorkTimes,HQCCheckID,HMainInterID,HPRDOrgID" +
                       ",HmaterOutqty,HProcPriceRate,HTemporaryAreaID" +
                   ",HmaterOutqty,HProcPriceRate,HTemporaryAreaID,HShiftsID" +
                   ") " +
                   " values('" + BillType + "','" + HBillSubType + "'," + HInterID + ",'" + HBillNo + "'," + HBillStatus + ",getdate(),'" + HMaker + "',getdate(),'" + HMouldNum + "'" +
                   "," + HYear + "," + HPeriod + ",'" + HRemark + "','" + HSourceName + "'," + HPieceQty + "," + HWasterQty + "," + HPlanPieceQty + "," + HBadPNL +
@@ -286,53 +329,367 @@
                   "," + HSupID + "," + HQty + "," + HPrice + "," + HMoney + "," + HBadCount + "," + HCenterID + "," + HProcNo + ",'" + HOrderProcNO + "'" + ",'" + HSourceNameList + "'" +
                   "," + HMainSourceInterID + ",'" + HMainSourceBillNo + "','" + HMainSourceBillType + "'," + Convert.ToString(HLastSubProc ? 1 : 0) +
                   "," + HEmpID2 + "," + HEmpID3 + "," + HEmpID4 + "," + HEmpID5 + "," + HDSQty + "," + HChongQty + "," + HPriceRate + "," + HWorkTimes + "," + HQCCheckID + "," + HMainInterID + "," + HPRDOrgID +
                 "," + HmaterOutqty + "," + HProcPriceRate + "," + HTemporaryAreaID + ") ");
                 "," + HmaterOutqty + "," + HProcPriceRate + "," + HTemporaryAreaID + ","+ HShiftsID + ") ");
                }
                if (HResult == "OK")
                {
                    ds = oCN.RunProcReturn("select  * from Sc_StationOutBillSub_SN where HInterID='" + HInterID + "' order by HEntryID desc", "Sc_StationOutBillSub_SN");
                    ds = oCN.RunProcReturn("select  * from Sc_StationOutBillSub_SN WITH(NOLOCK) where HInterID='" + HInterID + "' order by HEntryID desc", "Sc_StationOutBillSub_SN");
                    string HMakeTime = dic["HCreateTime"].ToString();
                    oCN.RunProc($@"insert into Sc_StationOutBillSub_SN(HInterID,HBillNo_bak,HEntryID,HBarCode,HBarCodeQty,HMakeTime,HRemark,HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney)
values({ HInterID}, '{ HBillNo}', {(ds.Tables[0].Rows.Count == 0 ? 1 : int.Parse(ds.Tables[0].Rows[0]["HEntryID"].ToString()) + 1)}, '{HBadCodeSN}', 1, GETDATE(), '', " + HProcExchInterID + "," + HProcExchEntryID + ", '" + HProcExchBillNo + "', '', 0, 0)");
values({ HInterID}, '{ HBillNo}', {(ds.Tables[0].Rows.Count == 0 ? 1 : int.Parse(ds.Tables[0].Rows[0]["HEntryID"].ToString()) + 1)}, '{HBadCodeSN}', 1, '"+ HMakeTime + "', '', " + HProcExchInterID + "," + HProcExchEntryID + ", '" + HProcExchBillNo + "', '', 0, 0)");
                    CustomWriteLog("条码:" + HBadCodeSN + "工序:" + HProcNumber + ",出站时间:" + HMakeTime, "TM" + DateTime.Now.ToString("yyyy-MM-dd"));
                    //反写工序出站单的合格数量
                    oCN.RunProc("update Sc_StationOutBillMain set HQty+=1  where HProcExchInterID='" + HProcExchInterID + "' and HProcExchEntryID=" + HProcExchEntryID);
                    oCN.RunProc("update Sc_StationOutBillMain  set HQty+=1  where HInterID='" + HInterID + "'");
                }
                else if (HResult == "NG")
                {
                    //反写工序出站单的不良数量
                    oCN.RunProc("update Sc_StationOutBillMain set HBadCount+=1  where HProcExchInterID='" + HProcExchInterID + "' and HProcExchEntryID=" + HProcExchEntryID);
                    ds = oCN.RunProcReturn("select  * from Sc_QualityReportBillSub WITH(NOLOCK) where HBarCode='" + HBadCodeSN + "' order by HMakeDate desc", "Sc_QualityReportBillSub");
                    if (ds.Tables[0].Rows.Count > 0) {
                        string HBadDate = ds.Tables[0].Rows[0]["HMakeDate"].ToString();
                        ds = oCN.RunProcReturn("select  * from Sc_SourceLineRepairBillMain WITH(NOLOCK) where HBarCode='" + HBadCodeSN + "' order by HMakeDate desc", "Sc_SourceLineRepairBillMain");
                        if (ds.Tables[0].Rows.Count > 0) {
                            string HRepairDate = ds.Tables[0].Rows[0]["HMakeDate"].ToString();
                            if (DateTime.Parse(HBadDate) < DateTime.Parse(HRepairDate)) {
                                //反写工序出站单的不良数量
                                oCN.RunProc("update Sc_StationOutBillMain  set HBadCount+=1 where HInterID='" + HInterID + "'");
                            }
                        }
                    } else {
                        //反写工序出站单的不良数量
                        oCN.RunProc("update Sc_StationOutBillMain  set HBadCount+=1 where HInterID='" + HInterID + "'");
                    }
                }
                else
                {
                    oCN.RollBack();
                    CustomWriteLog("结果不为OK或NG!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                oCN.Commit();
                //查询出站数量是否超过流转卡数量
                ds = oCN.RunProcReturn($@"select (b.HQty -sum(isnull(ou.HQty,0))-sum(isnull(ou.HBadCount,0))) HQty from Sc_ProcessExchangeBillSub b WITH(NOLOCK)
left join Sc_StationOutBillMain ou WITH(NOLOCK) on b.HInterID=ou.HProcExchInterID and b.HEntryID=ou.HProcExchEntryID
where b.HInterID={HProcExchInterID} and b.HEntryID={HProcExchEntryID}
group by b.HInterID,b.HEntryID,b.HQty", "Sc_ProcessExchangeBill_Out");
                if (double.Parse(ds.Tables[0].Rows[0][0].ToString()) < 0)
                {
                    oCN.RollBack();
                    CustomWriteLog("流转卡:"+ HProcExchBillNo + ",出站数量超过流转卡数量!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                bool flag = false;
                flag = AddXt_XtRoutBill(HInterID, HBillNo, HBadCodeSN);
                if (!flag)
                {
                    oCN.RollBack();
                    CustomWriteLog("系统参数保存失败,条码:" + HBadCodeSN, DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                //增加产线组装追溯单
                DataSet dataSet = oCN.RunProcReturn("exec h_p_Gy_BarCodeBillBomList '" + HProcExchBillNo + "'," + HProcID, "h_p_Gy_BarCodeBillBomList");
                if (dataSet.Tables[0].Rows.Count > 0)
                {
                    //判配件数量是否等于0
                    for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
                    {
                        double SYHQty = double.Parse(dataSet.Tables[0].Rows[i]["配件数量"].ToString());
                        string HMaterNamePJ = dataSet.Tables[0].Rows[i]["配件代码"].ToString();
                        string HMaterBarCode = dataSet.Tables[0].Rows[i]["HBarCode"].ToString();
                        if (SYHQty == 0) {
                            oCN.RollBack();
                            CustomWriteLog("配件条码:"+ HMaterBarCode + ",配件代码:" + HMaterNamePJ + ",数量为0!", DateTime.Now.ToString("yyyy-MM-dd"));
                            return false;
                        }
                    }
                    //查询职员
                    ds = oCN.RunProcReturn("select * from Gy_Employee WITH(NOLOCK) where HNumber='" + dic["HEmpCode"].ToString() + "' ", "Gy_Employee");
                    string HMakers = "";
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        HEmpIDs = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//职员ID
                        HMakers = ds.Tables[0].Rows[0]["HName"].ToString();
                    }
                    Int64 HInterID1 = CreateBillID("3727", ref sExeReturnInfo);
                    string HBillNo1 = CreateBillCode_Prod("3727", ref sExeReturnInfo, true);
                    //保存生产组装单主表
                    string sql = $@"Insert Into Sc_AssemblyBillMain(HYear,HPeriod,HBillType,HBillSubType,HInterID,HDate
,HBillNo,HBillStatus,HMaker,HMakeDate,HMainSourceInterID,HMainSourceEntryID,HMainSourceBillNo
,HICMOInterID,HICMOBillNo,HBarCode_P,HMaterID,HUnitID,HAssemblyStatus,HProdOrgID)
values('{DateTime.Now.Year}','{DateTime.Now.Month}','3727','3727',{HInterID1},getdate()
,'{HBillNo1}','1','{HMakers}',getdate(),{HProcExchInterID},{HProcExchEntryID},'{HProcExchBillNo}'
,{HICMOInterID},'{HICMOBillNo}','{HBadCodeSN}',{HMaterID},0,'汇报',{HPRDOrgIDs})";
                    oCN.RunProc(sql);
                    for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
                    {
                        string HMaterIDs = dataSet.Tables[0].Rows[i]["HMaterID"].ToString();
                        string HBarCodes =  dataSet.Tables[0].Rows[i]["HBarCode"].ToString();
                        //子表存储
                        string sq2 = $@"Insert Into Sc_AssemblyBillSub(HInterID,HBillNo_bak,HEntryID,HSourceInterID,HSourceEntryID,HSourceBillNo
                ,HSourceBillType,HMaterID,HSourceID,HEquipID,HUnitID,HQty
                ,HGroupID,HWorkerID,HScanDate,HBarCode,HBarCode_P,HSNNumber)
                values({HInterID1},'{HBillNo1}',{(i + 1)},0,0,''
                ,'',{ HMaterIDs},0,0,0,1
                ,0,0,getdate(),'{HBarCodes}','{HBadCodeSN}','') ";
                        oCN.RunProc(sq2);
                    }
                }
                return true;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                CustomWriteLog(e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
        //条码解析
        public  bool SNHBardCodeList(string HBadCodeSN)
        //新增返修OK出站汇报单
        public bool getOKOutBillAdd(DataRow dic, string HBadCodeSN, string HResult)
        {
            try
            {
                //获取绑定流转卡
                DataSet ds = oCN.RunProcReturn(@"select * from Gy_BarCodeBill WITH(NOLOCK) where HBarCode='" + HBadCodeSN + "'", "Gy_BarCodeBill");
                string HProcExchBillNo = ds.Tables[0].Rows[0]["HSourceBillNo"].ToString();
                string HProcNumber = dic["HProcNumber"].ToString();
                ds = oCN.RunProcReturn("select * from Gy_Source WITH(NOLOCK) where HNumber='" + dic["HSourceCode"].ToString() + "' ", "Gy_Source");
                long HSourceID = 0;
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HSourceID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产资源ID
                }
                //查询职员
                ds = oCN.RunProcReturn("select * from Gy_Employee WITH(NOLOCK) where HNumber='" + dic["HEmpCode"].ToString() + "' ", "Gy_Employee");
                long HEmpIDs = 0;
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HEmpIDs = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//职员ID
                }
                long HDeptID = 0;
                long HPRDOrgIDs = 0;
                string sReturn = "";
                if (GetSingleSystemParameter("WMS_CampanyName", ref sReturn) == "杭州斯莫尔")
                {
                    HDeptID = 389505;
                    HPRDOrgIDs = 100199;
                }
                else
                {
                    //ds = oCN.RunProcReturn("select * from Gy_Department where HNumber='" + dic["HDeptNumber"].ToString() + "' ", "Gy_Department");
                    //if (ds.Tables[0].Rows.Count != 0)
                    //{
                    //    HDeptID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产部门
                    //}
                    HDeptID = 0;
                }
                ds = oCN.RunProcReturn(@"select   b.HProcNo,b.HProcID,a.HMaterID,a.HQty,a.HInterID,HEntryID,a.HICMOInterID,a.HICMOEntryID,a.HICMOBillNo
                from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
                inner join Sc_ProcessExchangeBillSub b WITH(NOLOCK) on a.HInterID=b.HInterID
                left join Gy_Process p WITH(NOLOCK) on  b.HProcID=p.HItemID
                where a.HBillNo='" + HProcExchBillNo + "'  and p.HNumber='" + HProcNumber + "'", "Sc_ProcessExchangeBillMain");
                long HICMOInterID = long.Parse(ds.Tables[0].Rows[0]["HICMOInterID"].ToString());//任务单ID
                long HICMOEntryID = long.Parse(ds.Tables[0].Rows[0]["HICMOEntryID"].ToString());//任务单ID
                string HICMOBillNo = ds.Tables[0].Rows[0]["HICMOBillNo"].ToString();//任务单
                long HProcExchInterID = long.Parse(ds.Tables[0].Rows[0]["HInterID"].ToString());
                long HProcExchEntryID = long.Parse(ds.Tables[0].Rows[0]["HEntryID"].ToString());
                long HMaterID = long.Parse(ds.Tables[0].Rows[0]["HMaterID"].ToString());//产品ID
                long HProcID = long.Parse(ds.Tables[0].Rows[0]["HProcID"].ToString());//当前工序ID
                long HInterID = 0;
                string HBillNo = "";
                ds = oCN.RunProcReturn("exec h_p_Sc_SNBarcodeProcCtrl_S '" + HBadCodeSN + "'," + HProcID, "h_v_Gy_QualifiedRecordsList");
                if (ds.Tables[0].Rows.Count == 0)
                {
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBadCodeSN + "工序:" + HProcID + ",工序控制查无数据!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                else if (ds.Tables[0].Rows[0]["HBack"].ToString() == "2")
                {
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBadCodeSN + "工序:" + HProcID + "," + ds.Tables[0].Rows[0]["HBackRemark"].ToString() + "!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                ds = oCN.RunProcReturn("select  * from Sc_AssemblyBillMain WITH(NOLOCK) where HMainSourceInterID=" + HProcExchInterID + " and HMainSourceEntryID=" + HProcExchEntryID, "Sc_AssemblyBillMain");
                DateTime HDate=DateTime.Now;
                //当产品没有配件的时候 查询 不良记录
                if (ds.Tables[0].Rows.Count == 0)
                {
                    ds = oCN.RunProcReturn("select  * from Sc_QualityReportBillSub WITH(NOLOCK) where HProcExchInterID=" + HProcExchInterID + " and HProcExchEntryID=" + HProcExchEntryID+ " and HBarCode='" + HBadCodeSN + "'", "Sc_AssemblyBillMain");
                    HDate = DateTime.Parse(ds.Tables[0].Rows[0]["HMakeDate"].ToString());
                }
                else {
                    HDate = DateTime.Parse(ds.Tables[0].Rows[0]["HDate"].ToString());
                }
                //查询是否有返修记录
                ds = oCN.RunProcReturn(@"select a.HBarCode,a.HProcess,b.HSourceInterID,b.HSourceEntryID,b.HRepairResult from Sc_SourceLineRepairBillMain a WITH(NOLOCK)
inner join Sc_SourceLineRepairBillSub b WITH(NOLOCK) on a.HInterID = b.HInterID
where a.HBarCode = '" + HBadCodeSN + "' and  a.HProcess ="+ HProcID + " and  b.HSourceInterID ="+ HProcExchInterID + " " +
"and b.HSourceEntryID="+ HProcExchEntryID + " and b.HRepairResult = 'OK'", "Sc_SourceLineRepairBillMain");
                if (ds.Tables[0].Rows.Count == 0)
                {
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBadCodeSN + ",无返修记录", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                //判断当前流转卡的出站单 是否有数据
                ds = oCN.RunProcReturn(@"select  * from Sc_StationOutBillMain a WITH(NOLOCK)
left join Gy_Process p WITH(NOLOCK) on  a.HProcID=p.HItemID
where HProcExchBillNo='" + HProcExchBillNo + "' and p.HNumber='" + HProcNumber + "' and CONVERT(varchar(10),HDate,20) ='" + HDate.ToString("yyyy-MM-dd") + "'", "Sc_StationOutBillMain");
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HInterID = long.Parse(ds.Tables[0].Rows[0]["HInterID"].ToString());
                    HBillNo = ds.Tables[0].Rows[0]["HBillNo"].ToString();//递入type得到的单据号
                }
                if (HResult == "OK")
                {
                    ds = oCN.RunProcReturn("select  * from Sc_StationOutBillSub_SN  WITH(NOLOCK) where HInterID='" + HInterID + "' order by HEntryID desc", "Sc_StationOutBillSub_SN");
                    string HMakeTime = dic["HCreateTime"].ToString();
                    oCN.RunProc($@"insert into Sc_StationOutBillSub_SN(HInterID,HBillNo_bak,HEntryID,HBarCode,HBarCodeQty,HMakeTime,HRemark,HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney)
values({ HInterID}, '{ HBillNo}', {(ds.Tables[0].Rows.Count == 0 ? 1 : int.Parse(ds.Tables[0].Rows[0]["HEntryID"].ToString()) + 1)}, '{HBadCodeSN}', 1, '" + HMakeTime + "', '', " + HProcExchInterID + "," + HProcExchEntryID + ", '" + HProcExchBillNo + "', '', 0, 0)");
                    CustomWriteLog("条码:" + HBadCodeSN + "工序:"+ HProcNumber + ",出站时间:" + HMakeTime, "TM" + DateTime.Now.ToString("yyyy-MM-dd"));
                    //反写工序出站单的合格数量
                    //oCN.RunProc("update Sc_StationOutBillMain set HQty+=1,HBadCount-=1  where HInterID='" + HInterID + "'");
                    oCN.RunProc("update Sc_StationOutBillMain set HQty+=1  where HInterID='" + HInterID + "'");
                    //反写条码状态
                    oCN.RunProc("update Gy_BarCodeBill set HStatus=''  where HBarCode='" + HBadCodeSN + "'");
                }
                else
                {
                    oCN.RollBack();
                    CustomWriteLog("结果不为OK!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                return true;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                CustomWriteLog(e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
        //保存系统参数到出站单
        public bool AddXt_XtRoutBill(long HInterID, string HBillNo,string HBadCodeSN) {
            string sql = "";
            try
            {
                 DataSet ds = oCN.RunProcReturn(@"select a.HProcExchInterID,a.HProcExchEntryID,a.HProcExchBillNo,a.HProcID,p.HNumber from Sc_StationOutBillMain a WITH(NOLOCK)
left join Gy_Process p WITH(NOLOCK)  on a.HProcID=p.HItemID where HInterID=" + HInterID + " and HBillNo='" + HBillNo + "'", "Sc_StationOutBillMain");
                string HProcExchInterID = ds.Tables[0].Rows[0]["HProcExchInterID"].ToString();
                string HProcExchEntryID = ds.Tables[0].Rows[0]["HProcExchEntryID"].ToString();
                string HProcExchBillNo = ds.Tables[0].Rows[0]["HProcExchBillNo"].ToString();
                string HProcID = ds.Tables[0].Rows[0]["HProcID"].ToString();
                string HProcNum = ds.Tables[0].Rows[0]["HNumber"].ToString();
                //注:因为 组装 拍照 时间间隔比较短  所以目前只明确组装工序才可以保存工艺参数 之后如果有其他工序的话  需要增加工序字段
                if (HProcID == "88"|| HProcNum=="005") {
                    ds = oCN.RunProcReturn(@"select  s.HItemID HMouldID,t.HItemID HTechParamID,HCount,HCreateTime,a.HResult from  Sb_EquipMentCollectionTechParam_SN a WITH(NOLOCK)
inner join Gy_Source s WITH(NOLOCK) on a.HSourceCode=s.HNumber
inner join Gy_TechnologyParameter t WITH(NOLOCK) on a.HType=t.HName
where a.HFlag=0 and a.HBarCode='" + HBadCodeSN + "'", "Sb_EquipMentCollectionTechParam_SN");
                    //注:当前只有一道工序有参数 如果有多道工序的话 需要增加 工序的过滤
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            string HMouldID = ds.Tables[0].Rows[i]["HMouldID"].ToString();
                            string HTechParamID = ds.Tables[0].Rows[i]["HTechParamID"].ToString();
                            string HCount = ds.Tables[0].Rows[i]["HCount"].ToString();
                            string HGetTime = ds.Tables[0].Rows[i]["HCreateTime"].ToString();
                            string HResult = ds.Tables[0].Rows[i]["HResult"].ToString();
                            DataSet dataSet = oCN.RunProcReturn("select * from Sc_StationOutBillSub_TechParam WITH(NOLOCK) where HInterID=" + HInterID + " and HBillNo_bak='" + HBillNo + "'", "Sc_StationOutBillSub_TechParam");
                            sql = "insert into Sc_StationOutBillSub_TechParam(HInterID,HBillNo_bak,HEntryID ,HSourceInterID,HSourceEntryID,HSourceBillNo,HTechParamID,HRelValue,HGetTime,HBarCode,HMouldID,HRemark)" +
                                $"values({HInterID},'{HBillNo}',{(dataSet.Tables[0].Rows.Count + 1)},{HProcExchInterID},{HProcExchEntryID},'{HProcExchBillNo}',{HTechParamID},{HCount},'{HGetTime}','{HBadCodeSN}',{HMouldID},'{HResult}')";
                            oCN.RunProc(sql);
                        }
                        oCN.RunProc("update Sb_EquipMentCollectionTechParam_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "'");
                    }
                }
                return true;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                CustomWriteLog("工艺参数保存:" + sql + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
        //条码解析
        public int SNHBardCodeList(string HBadCodeSN)
        {
            try
            {
                DataSet ds = oCN.RunProcReturn(@"select * from Gy_BarCodeBill where HBarCode='" + HBadCodeSN + "'", "Gy_BarCodeBill");
                //判断条码是否存在条码档案
                if (ds.Tables[0].Rows.Count > 0)
                {
                    string HSourceBillNo = ds.Tables[0].Rows[0]["HSourceBillNo"].ToString();
                    DataSet dataTable = oCN.RunProcReturn(@"select * from Sc_ProcessExchangeBillMain where HBillNo='" + HSourceBillNo + "'", "Sc_ProcessExchangeBillMain");
                    //判断条码的源单 流转卡是否被删除
                    if (dataTable.Tables[0].Rows.Count == 0)
                    {
                        //如果源单已经删除  则条码也删除重新生成
                        oCN.RunProc("delete from Gy_BarCodeBill where HBarCode='" + HBadCodeSN + "'");
                        //重新查询条码档案 进入新增方法
                        ds = oCN.RunProcReturn(@"select * from Gy_BarCodeBill where HBarCode='" + HBadCodeSN + "'", "Gy_BarCodeBill");
                    }
                }
                //判断条码是否在数据库里
                if (ds.Tables[0].Rows.Count == 0)
                {
                    //判断长度是否为29位
                    //判断长度是否为29位 无尘车间
                    if (HBadCodeSN.Length == 29)
                    {
                        string str1 = HBadCodeSN.Substring(23, 3);
                        string str1 = HBadCodeSN.Substring(18, 8);
                        ds = oCN.RunProcReturn("select  * from Sc_ProcessExchangeBillMain where HProjectNum like'" + str1 + "-1%'", "Sc_ProcessExchangeBillMain");
                        //判断是否能找到对应的流转卡
                        if (ds.Tables[0].Rows.Count > 0)
@@ -342,55 +699,81 @@
                        }
                        else
                        {
                            CustomWriteLog("条码:"+ HBadCodeSN + ",流转卡不存在!", DateTime.Now.ToString("yyyy-MM-dd"));
                            return false;
                            str1 = HBadCodeSN.Substring(23, 3);
                            ds = oCN.RunProcReturn("select  * from Sc_ProcessExchangeBillMain where HProjectNum like'" + str1 + "-1%'", "Sc_ProcessExchangeBillMain");
                            //判断是否能找到对应的流转卡
                            if (ds.Tables[0].Rows.Count > 0)
                            {
                                string HProcExchBillNo = ds.Tables[0].Rows[0]["HBillNo"].ToString();
                                get_HBardBillSave(HBadCodeSN, HProcExchBillNo);
                            }
                            else
                            {
                                oCN.RollBack();
                                CustomWriteLog("条码:" + HBadCodeSN + ",流转卡不存在!", DateTime.Now.ToString("yyyy-MM-dd"));
                                return 2;
                            }
                        }
                    }
                    else {
                    //判断长度是否为50位  15车间
                    else if (HBadCodeSN.Length == 50)
                    {
                        string str1 = HBadCodeSN.Substring(42, 8);
                        ds = oCN.RunProcReturn("select  * from Sc_ProcessExchangeBillMain where HProjectNum like'" + str1 + "-1%'", "Sc_ProcessExchangeBillMain");
                        //判断是否能找到对应的流转卡
                        if (ds.Tables[0].Rows.Count > 0)
                        {
                            string HProcExchBillNo = ds.Tables[0].Rows[0]["HBillNo"].ToString();
                            get_HBardBillSave(HBadCodeSN, HProcExchBillNo);
                        }
                        else
                        {
                            oCN.RollBack();
                            CustomWriteLog("条码:" + HBadCodeSN + ",流转卡不存在!", DateTime.Now.ToString("yyyy-MM-dd"));
                            return 2;
                        }
                    }
                    else
                    {
                        oCN.RollBack();
                        CustomWriteLog("条码:" + HBadCodeSN + ",长度不等于29位!", DateTime.Now.ToString("yyyy-MM-dd"));
                        return false;
                        return 2;
                    }
                }
                else
                {
                    CustomWriteLog("条码:" + HBadCodeSN + ",条码已存在数据库!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                    return 1;
                }
                return true;
                return 0;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                CustomWriteLog("条码:" + HBadCodeSN + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
                return 2;
            }
        }
        //保存条码数据
        //新增条码数据
        public void get_HBardBillSave(string HBarCode, string HProcExchBillNo)
        {
            try
            {
                //查询流转卡数据
                DataSet dataSet = oCN.RunProcReturn(@"select  a.HPRDORGID, m.HModel 物料规格,m.HName 名物料称,a.HBillNo,a.HInterID,a.HMaterID,m.HNumber 物料代码,o.HNumber 组织代码,a.HUnitID,u.HNumber 单位代码 from Sc_ProcessExchangeBillMain a
left join Gy_Material m on a.HMaterID=m.HItemID
left join Xt_ORGANIZATIONS o on a.HPRDORGID=o.HItemID
left join Gy_Unit u on a.HUnitID=u.HItemID
                DataSet dataSet = oCN.RunProcReturn(@"select  a.HPRDORGID, m.HModel 物料规格,m.HName 名物料称,a.HBillNo,a.HInterID,a.HMaterID,m.HNumber 物料代码,o.HNumber 组织代码,a.HUnitID,u.HNumber 单位代码 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
left join Gy_Unit u WITH(NOLOCK) on a.HUnitID=u.HItemID
where HBillNo='" + HProcExchBillNo + "'", "Sc_ProcessExchangeBillMain");
                string HMaterNumber = dataSet.Tables[0].Rows[0]["物料代码"].ToString();
                string HOrgNumber = dataSet.Tables[0].Rows[0]["组织代码"].ToString();
                //判断流转卡不能为空
                if (HBarCode.Trim() == "")
                {
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBarCode + ",流转卡不能为空!", DateTime.Now.ToString("yyyy-MM-dd"));
                    //objJsonResult.code = "0";
                    //objJsonResult.count = 0;
                    //objJsonResult.Message = "条形码不能为空,不能生成条码!";
                    //return objJsonResult;
                }
                oCN.BeginTran();
                //日期获取方式
                string sDate = DateTime.Now.ToString();
                string HWei = "0";      //尾数
@@ -426,7 +809,7 @@
                bool HGiveAwayFlag = false;
                Int64 HEntryID = 1;
                string sExeReturnInfo = "";
                Int64 HInterID =  CreateBillID_Prod("85", ref sExeReturnInfo);
                Int64 HInterID = CreateBillID_Prod("85", ref sExeReturnInfo);
                int HOrgID = int.Parse(dataSet.Tables[0].Rows[0]["HPRDORGID"].ToString());
                string HCoilNO2 = "";
                string HFurnaceNO2 = "";
@@ -454,12 +837,203 @@
                                   + ", " + BoolToString(HGiveAwayFlag)
                                   + ",'" + HMaterName + "','" + HMaterModel + "','" + HPinfan + "'," + HAuxPropID.ToString() + ",'" + HMTONo + "','" + HInnerBillNo + "','','')");
                oCN.Commit();
            }
            catch (Exception e)
            {
                CustomWriteLog("条码:" + HBarCode + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                oCN.RollBack();
                CustomWriteLog("条码:" + HBarCode + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
            }
        }
        //条码补充
        public string TM_ZH(string HBadCodeSN)
        {
            try
            {
                //HBadCodeSN = "P1" + HBadCodeSN;
                //HBadCodeSN = HBadCodeSN.Substring(0, 13) + ":" + HBadCodeSN.Substring(13, 15);
                return HBadCodeSN;
            }
            catch (Exception e)
            {
                CustomWriteLog("条码:" + HBadCodeSN + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return "";
            }
        }
        //定时读取数据
        private void timer1_Tick(object sender, EventArgs e)
        {
            DataTable list = oCN.RunProcReturn("select top 100 * from Sb_EquipMentCollection_SN WITH(NOLOCK) where HFlag=0  order by HCreateTime asc", "Sb_EquipMentCollection_SN").Tables[0];
            //循环集合
            for (int i = 0; i < list.Rows.Count; i++)
            {
                bool flag = false;
                string HResult = list.Rows[i]["HResult"].ToString();
                string HBadCodeSN = list.Rows[i]["HBarCode"].ToString();
                string HCreateTime = list.Rows[i]["HCreateTime"].ToString();
                //HBadCodeSN = "P1099081-00-E:SDU324292189300";
                //HResult = "OK";
                //开始事务
                oCN.BeginTran();
                 if (HResult == "OK")
                {
                    flag = HResultOK(list.Rows[i]);
                }
                else if (HResult == "NG")
                {
                    flag = HResultNG(list.Rows[i]);
                }
                if (flag)
                {
                    oCN.RunProc("update Sb_EquipMentCollection_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "' and HCreateTime='" + HCreateTime + "'");
                    //结束事务
                    oCN.Commit();
                }
            }
        }
        //新增不良汇报单
        public bool getBadBillAdd(DataRow dic) {
            try
            {
                //查询职员
                DataSet ds = oCN.RunProcReturn("select * from Gy_Employee WITH(NOLOCK) where HNumber='" + dic["HEmpCode"].ToString() + "' ", "Gy_Employee");
                long HEmpIDs = 0;
                string HMakers = "";
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HEmpIDs = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//职员ID
                    HMakers = ds.Tables[0].Rows[0]["HName"].ToString();
                }
                long HDeptID = 0;//车间
                string sReturn = "";
                if (GetSingleSystemParameter("WMS_CampanyName", ref sReturn) == "杭州斯莫尔")
                {
                    HDeptID = 389505;
                }
                else
                {
                    //ds = oCN.RunProcReturn("select * from Gy_Department where HNumber='" + dic["HDeptNumber"].ToString() + "' ", "Gy_Department");
                    //if (ds.Tables[0].Rows.Count != 0)
                    //{
                    //    HDeptID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产部门
                    //}
                    HDeptID = 0;
                }
                string HProcExchInterID = "0";
                string HProcExchEntryID = "0";
                string HProcExchBillNo = "";
                long HMaterID = 0;
                long HProcID = 0;
                long HUnitID = 0;
                long HICMOInterID = 0;
                long HICMOEntryID = 0;
                string HICMOBillNo = "";
                ds = oCN.RunProcReturn(@"select b.HProcID, HMaterID,HUnitID,a.HICMOInterID,a.HICMOEntryID,a.HICMOBillNo,HBillNo,a.HInterID,b.HEntryID,a.HBillNo from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
inner join Sc_ProcessExchangeBillSub b  WITH(NOLOCK) on a.HInterID=b.HInterID
left join Gy_Process p WITH(NOLOCK) on b.HProcID=p.HItemID
where HBillNo=(select HSourceBillNo from Gy_BarCodeBill WITH(NOLOCK) where HBarCode='" + dic["HBarCode"].ToString() + "') and p.HNumber='" + dic["HProcNumber"].ToString() + "'  ", "Sc_ProcessExchangeBillMain");
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HMaterID = int.Parse(ds.Tables[0].Rows[0]["HMaterID"].ToString());
                    HUnitID = int.Parse(ds.Tables[0].Rows[0]["HUnitID"].ToString());
                    HICMOInterID = int.Parse(ds.Tables[0].Rows[0]["HICMOInterID"].ToString());
                    HICMOEntryID = int.Parse(ds.Tables[0].Rows[0]["HICMOEntryID"].ToString());
                    HICMOBillNo = ds.Tables[0].Rows[0]["HICMOBillNo"].ToString();
                    HProcExchInterID = ds.Tables[0].Rows[0]["HInterID"].ToString();
                    HProcExchEntryID = ds.Tables[0].Rows[0]["HEntryID"].ToString();
                    HProcExchBillNo = ds.Tables[0].Rows[0]["HBillNo"].ToString();
                    HProcID = int.Parse(ds.Tables[0].Rows[0]["HProcID"].ToString());
                }
                ds = oCN.RunProcReturn("select * from Gy_Source WITH(NOLOCK) where HNumber='" + dic["HSourceCode"].ToString() + "' ", "Gy_Source");
                long HSourceID = 0;
                if (ds.Tables[0].Rows.Count != 0)
                {
                    HSourceID = long.Parse(ds.Tables[0].Rows[0]["HItemID"].ToString());//生产资源ID
                }
                string sExeReturnInfo = "";
                long HInterID = CreateBillID("3717", ref sExeReturnInfo);//递入type得到的单据ID
                string HBillNo = CreateBillCode_Prod("3717", ref sExeReturnInfo, true);//递入type得到的单据号
                DateTime HDate = DateTime.Parse(dic["HCreateTime"].ToString());//日期
                string HRemark = "";//备注
                long HEmpID = HEmpIDs;//质检员
                long HGroupID = 22;//班组ID 白班
                string HMaker = HMakers;//制单人
                long HMainSourceInterID = HICMOInterID;
                long HMainSourceEntryID = HICMOEntryID;
                string HMainSourceBillNo = HICMOBillNo;
                //主表
                oCN.RunProc(@"Insert Into Sc_QualityReportBillMain
(HBillType,HBillSubType,HBillStatus,HInterID,HBillNo,HDate
,HYear,HPeriod,HRemark,HMaker,HMakeDate
,HEmpID,HGroupID,HDeptID,HMainSourceInterID,HMainSourceEntryID,HMainSourceBillNo)
                        values('3717','3717',1," + HInterID + ",'" + HBillNo + "','" + HDate + "'" +
                "," + DateTime.Now.Year + "," + DateTime.Now.Month + ",'" + HRemark + "','" + HMaker + "',getdate()" +
                ",'" + HEmpID + "'," + HGroupID + "," + HDeptID + "," + HMainSourceInterID + "," + HMainSourceEntryID + ",'" + HMainSourceBillNo + "') ");
                string HBarCode = dic["HBarCode"].ToString();
                string HMakeDate = dic["HCreateTime"].ToString();
                string HResult = dic["HResult"].ToString();
                oCN.RunProc($@"Insert into Sc_QualityReportBillSub
(HInterID,HENTRYID,HBillNo_bak,HEmpID,HBarCode,HBadReasonID,HAddr,HMaker,HMakeDate
,HMaterID,HUnitID,HRemark,HSourceID,HICMOInterID,HICMOEntryID,HICMOBillNo,HReportType
,HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney
,HQty,HResult,HProcExchInterID,HProcExchEntryID,HProcExchBillNo,HProcID)
values({HInterID},1,'{HBillNo}',{HEmpID},'{HBarCode}',0,'','{HMaker}','{HMakeDate}'
,{HMaterID},{ HUnitID},'',{HSourceID},{ HICMOInterID},{ HICMOEntryID},'{HICMOBillNo}',0
,0,0,'','',0,0
,1,'{HResult}',{ HProcExchInterID},{ HProcExchEntryID},'{ HProcExchBillNo}'," + HProcID + ")");
                return true;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                CustomWriteLog("报错原因:" + e.Message + "!", DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
        #region 基础方法
        //查询系统参数
        public string GetSingleSystemParameter(string sKey, ref string sReturn)
        {
            try
            {
                //查询主表
                DataSet DsSub;
                //循环
                DsSub = oCN.RunProcReturn("Select  HValue from Xt_SystemParameter with(nolock) Where HKey='" + sKey + "'  ", "Xt_SystemParameter");
                if (DsSub == null || DsSub.Tables[0].Rows.Count == 0)
                {
                    sReturn = "找不到该参数!";
                    return "";
                }
                else
                {
                    return isStrNull(DsSub.Tables[0].Rows[0]["HValue"]);
                }
            }
            catch (Exception e)
            {
                sReturn = e.Message;
                throw (e);
            }
        }
@@ -491,23 +1065,6 @@
                return -2;
            }
        }
        //条码补充
        public string TM_ZH(string HBadCodeSN) {
            try
            {
                //HBadCodeSN = "P1" + HBadCodeSN;
                //HBadCodeSN = HBadCodeSN.Substring(0, 13) + ":" + HBadCodeSN.Substring(13, 15);
                return HBadCodeSN;
            }
            catch (Exception e)
            {
                CustomWriteLog("条码:" + HBadCodeSN + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return "";
            }
        }
        //判断是否是INT64
        public static Int64 isLong(object message)
        {
@@ -658,78 +1215,13 @@
            {
            }
        }
        #endregion
        //定时读取数据
        private void timer1_Tick(object sender, EventArgs e)
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            int year = DateTime.Now.Year;
            string month = DateTime.Now.Month.ToString();
            string day = DateTime.Now.Day.ToString();
            //if (month.Length < 2) {
            //    month = "0" + month;
            //}
            //if (day.Length < 2)
            //{
            //    day = "0" + day;
            //}
            string dataTime = DateTime.Now.ToString("yyyyMMdd");
            //CustomWriteLog("1:" + dataTime, DateTime.Now.ToString("yyyy-MM-dd"));
            ////判断是否有这个文件
            bool flag = File.Exists($@"D:\{year}\{month}\{day}\{dataTime}.txt");
            //bool flag = File.Exists($@"C:\Users\admin\Desktop\新建文件夹 (2)\20231123.txt");
            //CustomWriteLog("2:" + flag, DateTime.Now.ToString("yyyy-MM-dd"));
            if (flag)
            if (MessageBox.Show("确定要关闭吗?", "确认", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                StreamReader stream = new StreamReader($@"D:\{year}\{month}\{day}\{dataTime}.txt", Encoding.GetEncoding("gb2312"));
                //CustomWriteLog("3:"+ $@"D:\{year}\{month}\{day}\{dataTime}.txt", DateTime.Now.ToString("yyyy-MM-dd"));
                //StreamReader stream = new StreamReader($@"C:\Users\admin\Desktop\新建文件夹 (2)\20231123.txt",Encoding.GetEncoding("gb2312"));
                string FileData = stream.ReadToEnd();
                stream.Close();
                FileData = FileData.Substring(0, FileData.Length - 1);
                FileData = "[" + FileData + "]";
                //CustomWriteLog("4:" + FileData, DateTime.Now.ToString("yyyy-MM-dd"));
                //JSON序列化转换字典集合
                List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
                List<object> DataList = JsonConvert.DeserializeObject<List<object>>(FileData);
                foreach (JObject item in DataList)
                {
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    foreach (var itm in item.Properties())
                    {
                        dic.Add(itm.Name, itm.Value.ToString());
                    }
                    list.Add(dic);
                }
                //CustomWriteLog("5:" + list.Count, DateTime.Now.ToString("yyyy-MM-dd"));
                //获取当前时间
                DateTime ActionTime = DateTime.Parse(DateTime.Now.AddMinutes(-1).ToString("yyyy-MM-dd  HH:mm:ss"));
                DateTime EndTime = DateTime.Parse(DateTime.Now.AddMinutes(1).ToString("yyyy-MM-dd  HH:mm:00"));
                //循环集合
                for (int i = 0; i < list.Count; i++)
                {
                    DateTime NowTime = DateTime.Parse(list[i]["HDate"].ToString());
                    if (NowTime >= ActionTime && NowTime < EndTime)
                    {
                        string HResult = list[i]["HResult"].ToString();
                        //CustomWriteLog("6:" + HResult, DateTime.Now.ToString("yyyy-MM-dd"));
                        if (HResult == "OK")
                        {
                            HResultOK(list[i]);
                        }
                        else if (HResult == "NG")
                        {
                            HResultNG(list[i]);
                        }
                    }
                    else
                    {
                        //CustomWriteLog("时间不在保存范围内", DateTime.Now.ToString("yyyy-MM-dd"));
                    }
                }
                e.Cancel = true;
            }
        }
    }