1
yangle
2024-09-24 619b831e0f885ceb9ce1b3cce0cffdf65ea4771c
WFormSynchronizeData_SMR/WFormSynchronizeData_SMR/Form1.cs
@@ -33,6 +33,7 @@
                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();
@@ -46,7 +47,7 @@
                }
                if (flag) {
                    oCN.RunProc("update Sb_EquipMentCollection_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "'");
                    oCN.RunProc("update Sb_EquipMentCollection_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "' and HCreateTime='"+ HCreateTime + "'");
                    //结束事务
                    oCN.Commit();
                }
@@ -70,7 +71,7 @@
                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'  and HProcNumber='" + dic["HProcNumber"].ToString() + "'", "Sb_EquipMentCollection_SN");
                    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
@@ -104,9 +105,9 @@
            }
            catch (Exception e)
            {
                oCN.RollBack();
                string HBadCodeSN = dic["HBarCode"].ToString();
                CustomWriteLog("条码:" + HBadCodeSN + ",错误原因:" + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                oCN.RollBack();
                return false;
            }
        }
@@ -121,7 +122,7 @@
                HBadCodeSN = TM_ZH(HBadCodeSN);
                num = SNHBardCodeList(HBadCodeSN);
                if (num == 0)
                if (num == 0 || num == 1)
                {
                    flag = getOutBillAdd(dic, HBadCodeSN, "NG");
@@ -133,13 +134,6 @@
                        oCN.RunProc("update Gy_BarCodeBill set HStatus='不良',HRemark='" + dic["HType"].ToString() + "' where HBarCode='" + HBadCodeSN + "'");
                    }
                }
                else if (num == 1)
                {
                    //条码存在 生成不良汇报单
                    flag = getBadBillAdd(dic);
                    //反写条码状态
                    oCN.RunProc("update Gy_BarCodeBill set HStatus='不良',HRemark='" + dic["HType"].ToString() + "' where HBarCode='" + HBadCodeSN + "'");
                }
                else if (num == 2)
                {
                    flag = false;
@@ -148,10 +142,10 @@
            }
            catch (Exception e)
            {
                string HBadCodeSN = dic["HBarCode"].ToString();
                CustomWriteLog("条码:" + HBadCodeSN + ",错误原因:"+e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                //回滚事务
                oCN.RollBack();
                string HBadCodeSN = dic["HBarCode"].ToString();
                CustomWriteLog("条码:" + HBadCodeSN + ",错误原因:"+e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
@@ -274,6 +268,20 @@
                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_StationOutBillMain a WITH(NOLOCK)
@@ -323,30 +331,63 @@
                    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  where HInterID='" + HInterID + "'");
                }
                else if (HResult == "NG")
                {
                    //反写工序出站单的不良数量
                    oCN.RunProc("update Sc_StationOutBillMain  set HBadCount+=1 where HInterID='" + HInterID + "'");
                    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
                {
                    CustomWriteLog("结果不为OK或NG!", DateTime.Now.ToString("yyyy-MM-dd"));
                    oCN.RollBack();
                    CustomWriteLog("结果不为OK或NG!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
                //查询出站数量是否超过流转卡数量
                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);
                flag = AddXt_XtRoutBill(HInterID, HBillNo, HBadCodeSN);
                //if (!flag) {
                //    CustomWriteLog("系统参数保存失败,条码:" + HBadCodeSN , DateTime.Now.ToString("yyyy-MM-dd"));
                //    oCN.RollBack();
                //    return false;
                //}
                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");
@@ -358,9 +399,10 @@
                    {
                        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) {
                            CustomWriteLog("配件代码:" + HMaterNamePJ + ",数量为0!", DateTime.Now.ToString("yyyy-MM-dd"));
                            oCN.RollBack();
                            CustomWriteLog("配件条码:"+ HMaterBarCode + ",配件代码:" + HMaterNamePJ + ",数量为0!", DateTime.Now.ToString("yyyy-MM-dd"));
                            return false;
                        }
                    }
@@ -406,8 +448,8 @@
            }
            catch (Exception e)
            {
                CustomWriteLog(e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                oCN.RollBack();
                CustomWriteLog(e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
@@ -472,6 +514,20 @@
                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;
                //当产品没有配件的时候 查询 不良记录
@@ -492,8 +548,8 @@
                if (ds.Tables[0].Rows.Count == 0)
                {
                    CustomWriteLog("条码:" + HBadCodeSN + ",无返修记录", DateTime.Now.ToString("yyyy-MM-dd"));
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBadCodeSN + ",无返修记录", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
@@ -516,6 +572,8 @@
                    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 + "'");
                    //反写条码状态
@@ -523,8 +581,8 @@
                }
                else
                {
                    CustomWriteLog("结果不为OK!", DateTime.Now.ToString("yyyy-MM-dd"));
                    oCN.RollBack();
                    CustomWriteLog("结果不为OK!", DateTime.Now.ToString("yyyy-MM-dd"));
                    return false;
                }
@@ -532,14 +590,15 @@
            }
            catch (Exception e)
            {
                CustomWriteLog(e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                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
            {
@@ -548,26 +607,33 @@
                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();
                ds = oCN.RunProcReturn(@"select  s.HItemID HMouldID,t.HItemID HTechParamID,HCount,HCreateTime from  Sb_EquipMentCollectionTechParam_SN a WITH(NOLOCK)
left join Gy_Source s WITH(NOLOCK) on a.HSourceCode=s.HNumber
left join Gy_TechnologyParameter t WITH(NOLOCK) on a.HType=t.HNumber
                string HProcID = ds.Tables[0].Rows[0]["HProcID"].ToString();
                //注:因为 组装 拍照 时间间隔比较短  所以目前只明确组装工序才可以保存工艺参数 之后如果有其他工序的话  需要增加工序字段
                if (HProcID == "88") {
                    ds = oCN.RunProcReturn(@"select  s.HItemID HMouldID,t.HItemID HTechParamID,HCount,HCreateTime 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++)
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        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();
                        DataSet dataSet = oCN.RunProcReturn("select * from Sc_StationOutBillSub_TechParam WITH(NOLOCK) where HInterID=" + HInterID + " and HBillNo_bak='" + HBillNo + "' and HBarCode='" + HBadCodeSN + "'", "Sc_StationOutBillSub_TechParam");
                        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();
                        oCN.RunProc("insert into Sc_StationOutBillSub_TechParam(HInterID,HBillNo_bak,HEntryID ,HSourceInterID,HSourceEntryID,HSourceBillNo,HTechParamID,HRelValue,HGetTime,HBarCode,HMouldID)" +
                            $"values({HInterID},'{HBillNo}',{(dataSet.Tables[0].Rows.Count + 1)},{HProcExchInterID},{HProcExchEntryID},'{HProcExchBillNo}',{HTechParamID},{HCount},'{HGetTime}','{HBadCodeSN}',{HMouldID})");
                            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)" +
                                $"values({HInterID},'{HBillNo}',{(dataSet.Tables[0].Rows.Count + 1)},{HProcExchInterID},{HProcExchEntryID},'{HProcExchBillNo}',{HTechParamID},{HCount},'{HGetTime}','{HBadCodeSN}',{HMouldID})";
                            oCN.RunProc(sql);
                        }
                        oCN.RunProc("update Sb_EquipMentCollectionTechParam_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "'");
                    }
                }
@@ -575,8 +641,8 @@
            }
            catch (Exception e)
            {
                CustomWriteLog("工艺参数保存:" + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                oCN.RollBack();
                CustomWriteLog("工艺参数保存:" + sql + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
@@ -593,7 +659,7 @@
                    //判断长度是否为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)
@@ -603,15 +669,26 @@
                        }
                        else
                        {
                            CustomWriteLog("条码:" + HBadCodeSN + ",流转卡不存在!", DateTime.Now.ToString("yyyy-MM-dd"));
                            oCN.RollBack();
                            return 2;
                            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
                    {
                        CustomWriteLog("条码:" + HBadCodeSN + ",长度不等于29位!", DateTime.Now.ToString("yyyy-MM-dd"));
                        oCN.RollBack();
                        CustomWriteLog("条码:" + HBadCodeSN + ",长度不等于29位!", DateTime.Now.ToString("yyyy-MM-dd"));
                        return 2;
                    }
                }
@@ -623,8 +700,8 @@
            }
            catch (Exception e)
            {
                CustomWriteLog("条码:" + HBadCodeSN + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                oCN.RollBack();
                CustomWriteLog("条码:" + HBadCodeSN + "," + e.Message, DateTime.Now.ToString("yyyy-MM-dd"));
                return 2;
            }
        }
@@ -645,8 +722,8 @@
                //判断流转卡不能为空
                if (HBarCode.Trim() == "")
                {
                    CustomWriteLog("条码:" + HBarCode + ",流转卡不能为空!", DateTime.Now.ToString("yyyy-MM-dd"));
                    oCN.RollBack();
                    CustomWriteLog("条码:" + HBarCode + ",流转卡不能为空!", DateTime.Now.ToString("yyyy-MM-dd"));
                }
              
                //日期获取方式
@@ -715,8 +792,8 @@
            }
            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"));
            }
        }
@@ -748,6 +825,7 @@
                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();
@@ -762,7 +840,7 @@
                if (flag)
                {
                    oCN.RunProc("update Sb_EquipMentCollection_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "'");
                    oCN.RunProc("update Sb_EquipMentCollection_SN set HFlag=1 where HBarCode='" + HBadCodeSN + "' and HCreateTime='" + HCreateTime + "'");
                    //结束事务
                    oCN.Commit();
                }
@@ -872,8 +950,8 @@
            }
            catch (Exception e)
            {
                CustomWriteLog("报错原因:" + e.Message + "!", DateTime.Now.ToString("yyyy-MM-dd"));
                oCN.RollBack();
                CustomWriteLog("报错原因:" + e.Message + "!", DateTime.Now.ToString("yyyy-MM-dd"));
                return false;
            }
        }
@@ -1085,5 +1163,13 @@
            }
        }
        #endregion
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("确定要关闭吗?", "确认", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}