using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using DevComponents.DotNetBar.Controls; using System.Windows.Forms; using System.Drawing; //using com.force.json; using System.Data; using System.Data.SqlClient; namespace WCS { /// /// 回报处理线程 /// class UpdateThread { #region 画面上同步显示控件 public ListViewEx frmdata; delegate void SetTextCallback(string seq, string Errif, string arg_string); #endregion Thread trd = null; public UpdateThread() { try { trd = new Thread(new ThreadStart(this.ThreadTask)); trd.IsBackground = true; trd.Start(); } catch (Exception em) { Common.WriteLogFile("WcsError", "UpdateThread/UpdateThread--回报线程启动出错:" + em.Message); } } #region 通讯反馈同步显示 /// /// 显示处理信息 /// /// private void DisplayInfo(string seq, string Errif, string arg_string) { if (frmdata == null) { return; } if (frmdata.InvokeRequired) { try { SetTextCallback d = new SetTextCallback(DisplayInfo); frmdata.Invoke(d, new object[] { seq, Errif, arg_string }); } catch (Exception em) { Common.WriteLogFile("WcsError", "UpdateThread/DisplayInfo--同步回报信息失败:" + em.Message); } } else { add_dw_log(seq, Errif, arg_string); if (frmdata.Items.Count > 200) { frmdata.Items.Clear(); ; } } } /// /// 添加ListView界面显示 /// /// listview /// 需要 /// 异常信息 /// 显示内容 public void add_dw_log(string seq, string Errif, string arg_string) { try { ListViewItem lvi = new ListViewItem(); lvi.SubItems[0].Text = "【" + DateTime.Now.ToString() + "】" + seq + arg_string; if (Errif == "N") { lvi.ForeColor = Color.Black; } else if (Errif == "E") { lvi.ForeColor = Color.Red; } else if (Errif == "P") { lvi.ForeColor = Color.Blue; } frmdata.Items.Add(lvi); frmdata.EnsureVisible(frmdata.Items.Count - 1); } catch (Exception em) { ListViewItem lvi = new ListViewItem(); lvi.SubItems[0].Text = "【" + DateTime.Now.ToString() + "】" + seq + arg_string + "异常:" + em.Message; frmdata.Items.Add(lvi); Common.WriteLogFile("WcsError", "UpdateThread/add_dw_log--回报添加界面显示出错:" + em.Message); } } #endregion #region 业务处理 /// /// 生成出库工作档 /// public void ProcOutToWorkData(string seq) { string ls_locno = ""; string ls_error_memo = "", sql = ""; int li_wrkno = 0, li_io_type = 0, li_stnNo = 0, li_e_stnNo = 0; DateTime ldt_date = System.DateTime.Now; double d_outQty = 0, d_stkQty = 0; int action = 0, prnstatus = 0; DisplayInfo(seq, "N", " --处理出库通知档,生成出库工作档......"); try { //查找最早一条待出库库位 sql = "select top 1 vlpla from cust_wait_pakout where status<>'Y' and nltyp<>'A01' order by status,modi_time"; DataView dvLoc = Common.ExecAsrsSelect(sql); if (dvLoc.Count <= 0) { return; } foreach (DataRowView drow in dvLoc) { ls_locno = drow[0].ToString(); } if (ls_locno == "") { return; } //查询库位号是否在库状态,并查询条码号 sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_locno + "' and loc_sts='F'"; string barcode = ""; DataView dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".1 库位" + ls_locno + "不存在或非在库状态,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { barcode = drow[1].ToString(); } } //根据库位号查找该库位所有出库资料 sql = "select lgnum,tanum,tapos,matnr,maktx,werks,vsolm,meins,bname "; sql += " from cust_wait_pakout where status<>'Y' and nltyp<>'A01' and vlpla='" + ls_locno + "' order by status,modi_time"; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { return; } li_wrkno = Common.GetWrkno(0); string sqlDetl = "", sqlWaitIn = ""; foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); string matnr = drow[3].ToString(); string maktx = drow[4].ToString(); string werks = drow[5].ToString(); string vsolm = drow[6].ToString(); string meins = drow[7].ToString(); string bname = drow[8].ToString(); sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname,zpallet) "; sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", "; sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "','" + barcode + "');"; sqlWaitIn += " update cust_wait_pakout set status='Y' where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + " and vlpla=" + ls_locno + ";"; d_outQty += double.Parse(vsolm); } DisplayInfo("", "P", " " + seq + ".2 正在处理待出库资料!库位:" + ls_locno); //查询库位号对应库存明细总数量 sql = "select sum(anfme) from asr_loc_detl where loc_no='" + ls_locno + "' "; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".3 库位" + ls_locno + "没有库存明细,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { d_stkQty += double.Parse(drow[0].ToString()); } } int li_crnrow = int.Parse(ls_locno.Substring(0, 2)); int li_crnno = (li_crnrow + 1) / 2; string new_loc_sts = ""; if (d_outQty < d_stkQty) { li_io_type = 103; new_loc_sts = "P"; li_e_stnNo = 4; li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo); action = 2; //单独打印 //prnstatus = 0; //默认等待,拣料站更新 } else if (d_outQty == d_stkQty) { li_io_type = 101; new_loc_sts = "R"; li_e_stnNo = 13; li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo); action = 3; //既打印又确认 //prnstatus = 0; //默认等待,拣料站更新 } else { ls_error_memo = " " + seq + ".4 库位" + ls_locno + "通知出库数量超出库存数量,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } sqlWaitIn = sqlWaitIn.Replace("update cust_wait_pakout set", "update cust_wait_pakout set action=" + action + ","); sql = sqlDetl; sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) "; sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_locno + "', "; sql += " " + li_e_stnNo + "," + li_stnNo + ",'" + barcode + "'); "; sql += " update asr_loc_mast set loc_sts='" + new_loc_sts + "' where loc_no='" + ls_locno + "'; "; sql += sqlWaitIn; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(sql, sqlconn); sqlcmd.Transaction = sqltrans; try { sqlcmd.ExecuteNonQuery(); sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".4 插入工作主档[asr_wrk_mast]错误 !库位:" + ls_locno + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } return; re: sql = "update cust_wait_pakout set status='X',action=" + action + ",modi_time='" + ldt_date + "' where vlpla='" + ls_locno + "'"; bool result = Common.ExecAsrsModify(sql); if (!result) { ls_error_memo = " " + seq + ".5 更新出库档失败!库位:" + ls_locno; DisplayInfo("", "E", ls_error_memo); } } catch (Exception em) { ls_error_memo = " " + seq + ".6 处理待处理档生成出库工作档失败:" + em.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 生成库位调整工作档 /// public void ProcLocToWorkData(string seq) { string ls_slocno = "", ls_dlocno = ""; string ls_error_memo = "", sql = ""; int li_wrkno = 0, li_io_type = 0, li_stnNo = 0, li_e_stnNo = 0; DateTime ldt_date = System.DateTime.Now; double d_outQty = 0, d_stkQty = 0; DisplayInfo(seq, "N", " --处理出库通知档,生成出库工作档......"); try { //查找最早一条待出库库位 sql = "select top 1 vlpla,nlpla from cust_wait_pakout where status<>'Y' and nltyp='A01' order by status,modi_time"; DataView dvLoc = Common.ExecAsrsSelect(sql); if (dvLoc.Count <= 0) { return; } foreach (DataRowView drow in dvLoc) { ls_slocno = drow[0].ToString(); ls_dlocno = drow[1].ToString(); } if (ls_slocno == "" || ls_dlocno=="") { ls_error_memo = " " + seq + ".1 出库通知档源库位为空[cust_wait_pakout]错误 !库位:" + ls_slocno; DisplayInfo("", "E", ls_error_memo); goto re; } //查询目标库位状态,如果为空表示库位已转,如果在库表示源库位出库,目标库位并板,如果不在库,则报警停止执行 string loc_sts = "", barcoded = ""; sql = "select loc_sts,barcode from asr_loc_mast where loc_no='" + ls_dlocno + "' "; DataView dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".2 目标库位" + ls_dlocno + "不存在,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { loc_sts = drow[0].ToString(); barcoded = drow[1].ToString(); } } if (loc_sts == "O") { //库位移转 sql = "select lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname "; sql += " from asr_loc_detl where loc_no='" + ls_slocno + "' order by matnr,modi_time"; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { return; } li_wrkno = Common.GetWrkno(0); string sqlDetl = "", sqlWaitIn = ""; foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); string matnr = drow[3].ToString(); string maktx = drow[4].ToString(); string werks = drow[5].ToString(); string vsolm = drow[6].ToString(); string meins = drow[7].ToString(); string bname = drow[8].ToString(); sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname) "; sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", "; sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "');"; sqlWaitIn += " update cust_wait_pakout set status='Y' where nltyp='A01' and vlpla='" + ls_slocno + "' and nlpla='" + ls_dlocno + "';"; } DisplayInfo("", "P", " " + seq + ".3 正在处理待出库资料!库位:" + ls_slocno); //查询库位号是否在库状态,并查询条码号 sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_slocno + "' and loc_sts='F'"; string barcode = ""; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".4 源库位" + ls_slocno + "不存在或非在库状态,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { barcode = drow[1].ToString(); } } int li_crnrow = int.Parse(ls_slocno.Substring(0, 2)); int li_crnno = (li_crnrow + 1) / 2; li_io_type = 11; sql = sqlDetl; sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,loc_no,barcode,empty_mk) "; sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_slocno + "', "; sql += " '" + ls_dlocno + "','" + barcode + "','N'); "; sql += " update asr_loc_mast set loc_sts='R' where loc_no='" + ls_slocno + "'; "; sql += " update asr_loc_mast set loc_sts='S' where loc_no='" + ls_dlocno + "'; "; sql += sqlWaitIn; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(sql, sqlconn); sqlcmd.Transaction = sqltrans; try { sqlcmd.ExecuteNonQuery(); sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".5 插入工作主档[asr_wrk_mast]错误 !库位:" + ls_slocno + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } } else if (loc_sts == "F") {//目标库位并板 //源库位出库 string sqlDetld = ""; int li_wrknod = 0; int action = 0; sql = "select lgnum,tanum,tapos,matnr,maktx,werks,vsolm,meins,bname "; sql += " from cust_wait_pakout where status<>'Y' and nltyp='A01' and vlpla='" + ls_slocno + "' and nlpla='" + ls_dlocno + "' order by status,modi_time"; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { return; } li_wrkno = Common.GetWrkno(0); li_wrknod = Common.GetWrkno(0); string sqlDetl = "", sqlWaitIn = ""; foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); string matnr = drow[3].ToString(); string maktx = drow[4].ToString(); string werks = drow[5].ToString(); string vsolm = drow[6].ToString(); string meins = drow[7].ToString(); string bname = drow[8].ToString(); sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname) "; sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", "; sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "');"; sqlDetld += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname) "; sqlDetld += " values(" + li_wrknod + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", "; sqlDetld += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "');"; sqlWaitIn += " update cust_wait_pakout set status='Y' where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + " and vlpla=" + ls_slocno + ";"; d_outQty += double.Parse(vsolm); } DisplayInfo("", "P", " " + seq + ".6 正在处理待出库资料!库位:" + ls_slocno); //查询库位号是否在库状态,并查询条码号 sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_slocno + "' and loc_sts='F'"; string barcode = ""; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".7 源库位" + ls_slocno + "不存在或非在库状态,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { barcode = drow[1].ToString(); } } //查询库位号对应库存明细总数量 sql = "select sum(anfme) from asr_loc_detl where loc_no='" + ls_slocno + "' "; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".8 库位" + ls_slocno + "没有库存明细,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { d_stkQty += double.Parse(drow[0].ToString()); } } int li_crnrow = int.Parse(ls_slocno.Substring(0, 2)); int li_crnno = (li_crnrow + 1) / 2; string new_loc_sts = ""; if (d_outQty < d_stkQty) { li_io_type = 103; new_loc_sts = "P"; li_e_stnNo = 4; li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo); action = 2; } else if (d_outQty == d_stkQty) { li_io_type = 101; new_loc_sts = "R"; li_e_stnNo = 13; li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo); action = 3; } else { ls_error_memo = " " + seq + ".9 库位" + ls_slocno + "通知出库数量超出库存数量,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } int li_crnrowd = int.Parse(ls_dlocno.Substring(0, 2)); int li_crnnod = (li_crnrowd + 1) / 2; int li_io_typed = 104; int li_e_stnNod = 4; int li_stnNod = Common.getIoStaNo(li_io_typed, li_crnnod, li_e_stnNod); sqlWaitIn = sqlWaitIn.Replace("update cust_wait_pakout set", "update cust_wait_pakout set action=" + action + ","); sql = sqlDetl; sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) "; sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_slocno + "', "; sql += " " + li_e_stnNo + "," + li_stnNo + ",'" + barcode + "'); "; sql += sqlDetld; sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) "; sql += " values(" + li_wrknod + ",'" + ldt_date + "',11," + li_io_typed + "," + li_crnnod + ",13,'" + ls_dlocno + "', "; sql += " " + li_e_stnNod + "," + li_stnNod + ",'" + barcoded + "'); "; sql += " update asr_loc_mast set loc_sts='" + new_loc_sts + "' where loc_no='" + ls_slocno + "'; "; sql += " update asr_loc_mast set loc_sts='P' where loc_no='" + ls_dlocno + "'; "; sql += sqlWaitIn; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(sql, sqlconn); sqlcmd.Transaction = sqltrans; try { sqlcmd.ExecuteNonQuery(); sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".10 插入工作主档[asr_wrk_mast]错误 !库位:" + ls_slocno + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } } else { ls_error_memo = " " + seq + ".11 目标库位" + ls_dlocno + "不是在库或空库位状态,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } return; re: sql = "update cust_wait_pakout set status='X',modi_time='" + ldt_date + "' where vlpla='" + ls_slocno + "'"; bool result = Common.ExecAsrsModify(sql); if (!result) { ls_error_memo = " " + seq + ".12 更新出库档失败!库位:" + ls_slocno; DisplayInfo("", "E", ls_error_memo); } } catch (Exception em) { ls_error_memo = " " + seq + ".13 处理待处理档生成出库工作档失败:" + em.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 生成盘点工作档 /// public void ProcCheckToWorkData(string seq) { string ls_locno = ""; string ls_error_memo = "", sql = ""; int li_wrkno = 0, li_io_type = 0, li_stnNo = 0, li_e_stnNo = 0; DateTime ldt_date = System.DateTime.Now; int type = 1; DisplayInfo(seq, "N", " --处理盘点通知档,生成盘点工作档......"); try { //查找最早一条待出库库位 sql = "select top 1 lgpla from cust_wait_check where status<>'Y' order by status,modi_time"; DataView dvLoc = Common.ExecAsrsSelect(sql); if (dvLoc.Count <= 0) { return; } foreach (DataRowView drow in dvLoc) { ls_locno = drow[0].ToString(); } if (ls_locno == "") { return; } //查询库位号是否在库状态,并查询条码号 sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_locno + "' and loc_sts='F'"; string barcode = ""; DataView dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".2 库位" + ls_locno + "不存在或非在库状态,请检查"; DisplayInfo("", "E", ls_error_memo); goto re; } else { foreach (DataRowView drow in dv) { barcode = drow[1].ToString(); } } //根据库位号查找该库位所有出库资料 sql = "select a.lgnum,a.ivnum,a.ivpos,b.matnr,b.maktx,b.altme,b.werks "; sql += " from cust_wait_check a, asr_loc_detl b "; sql += " where a.status<>'Y' and a.lgpla='" + ls_locno + "' and a.matnr=b.matnr and lgpla=b.loc_no and io_status='N'"; sql += " order by a.status,a.modi_time"; dv = Common.ExecAsrsSelect(sql); if (dv == null || dv.Count <= 0) { sql = "select b.lgnum,b.tbnum,b.tbpos,b.matnr,b.maktx,b.altme,b.werks "; sql += " from cust_wait_check a, asr_loc_detl b "; sql += " where a.status<>'Y' and a.lgpla='" + ls_locno + "' and a.lgpla=b.loc_no and io_status='N'"; sql += " order by a.status,a.modi_time"; dv = Common.ExecAsrsSelect(sql); if (dv == null || dv.Count <= 0) { ls_error_memo = " " + seq + ".3 查询库存明细[asr_loc_detl]没有 !库位:" + ls_locno; DisplayInfo("", "E", ls_error_memo); goto re; } type = 2; //return; } li_wrkno = Common.GetWrkno(0); string sqlDetl = "", sqlWaitIn = ""; foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); string matnr = drow[3].ToString(); string maktx = drow[4].ToString(); string altme = drow[5].ToString(); string werks = drow[6].ToString(); sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,altme,werks,zpallet) "; sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", "; sqlDetl += " '" + matnr + "','" + maktx + "','" + altme + "','" + werks + "','" + barcode + "');"; if (type == 1) { sqlWaitIn += " update cust_wait_check set status='Y' where lgnum='" + lgnum + "' and ivnum=" + tanum + " and ivpos=" + tapos + ";"; } else { sqlWaitIn += " update cust_wait_check set status='Y' where lgpla='" + ls_locno + "';"; } } DisplayInfo("", "P", " " + seq + ".1 正在处理待盘点资料!库位:" + ls_locno); int li_crnrow = int.Parse(ls_locno.Substring(0, 2)); int li_crnno = (li_crnrow + 1) / 2; li_io_type = 107; li_e_stnNo = 4; li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo); sql = sqlDetl; sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) "; sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_locno + "', "; sql += " " + li_e_stnNo + "," + li_stnNo + ",'" + barcode + "'); "; sql += " update asr_loc_mast set loc_sts='P' where loc_no='" + ls_locno + "'; "; sql += sqlWaitIn; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(sql, sqlconn); sqlcmd.Transaction = sqltrans; try { sqlcmd.ExecuteNonQuery(); sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".3 插入工作主档[asr_wrk_mast]错误 !库位:" + ls_locno + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } return; re: sql = "update cust_wait_check set status='X',modi_time='" + ldt_date + "' where lgpla='" + ls_locno + "'"; bool result = Common.ExecAsrsModify(sql); if (!result) { ls_error_memo = " " + seq + ".4 更新盘点档失败!库位:" + ls_locno; DisplayInfo("", "E", ls_error_memo); } } catch (Exception em) { ls_error_memo = " " + seq + ".5 处理盘点通知档生成盘点工作档失败:" + em.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 处理工作档中工作状态为4和14、6的资料,更新库存档、待处理档 /// public void ProcWorkMast(string seq) { string ls_error_memo = "", sql = "", ls_barcode = ""; int li_wrk_no = 0, li_wrk_sts = 0, li_io_type = 0, li_sta_no = 0, li_source_sta_no = 0;//, li_wrk_model = 1; string ls_loc_no = "", ls_source_loc_no = "";//, ls_wmsId = "", ls_boxId = ""; DateTime ldt_date = System.DateTime.Now, ldt_io_time; string ls_sheet_no = "", ls_empty_mk = "", ls_full_mk = "", ls_online_yn = ""; int li_io_pri = 0, li_whs_type; DisplayInfo(seq, "N", "--处理工作档 (status=4,14)......"); try { try { DataView dv = Common.ExecAsrsSelect("select getdate() from sys_dual"); foreach (System.Data.DataRowView drow in dv) { ldt_date = Convert.ToDateTime(drow[0]); } } catch (SqlException) { return; } sql = "select wrk_no,sheet_no,wrk_sts,io_type,io_pri,empty_mk," + " io_time,loc_no,sta_no,source_sta_no,source_loc_no,whs_type,online_yn,barcode" + " from dbo.asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type <> 103 and io_type <> 104 and io_type <> 107 ) or (wrk_sts = 2 and io_type=6)" + " order by upd_mk,io_time,wrk_no"; DataView dv_wrkmast = Common.ExecAsrsSelect(sql); if (dv_wrkmast == null || dv_wrkmast.Count < 1) { DisplayInfo("", "N", " " + seq + ".1 工作档 [asr_wrk_mast] 没有资料!"); return; } foreach (DataRowView drow_wrkmast in dv_wrkmast) { li_wrk_no = Convert.ToInt32(drow_wrkmast[0]); ls_sheet_no = drow_wrkmast[1].ToString(); li_wrk_sts = Convert.ToInt32(drow_wrkmast[2]); li_io_type = Convert.ToInt32(drow_wrkmast[3]); li_io_pri = Convert.ToInt32(drow_wrkmast[4]); ls_empty_mk = drow_wrkmast[5].ToString(); ldt_io_time = Convert.ToDateTime(drow_wrkmast[6]); ls_loc_no = drow_wrkmast[7].ToString(); li_sta_no = Convert.ToInt32(drow_wrkmast[8]); li_source_sta_no = Convert.ToInt32(drow_wrkmast[9]); ls_source_loc_no = drow_wrkmast[10].ToString(); //li_whs_type = Convert.ToInt32(drow_wrkmast[11]); //ls_full_mk = drow_wrkmast[12].ToString(); ls_online_yn = drow_wrkmast[12].ToString(); ls_barcode = drow_wrkmast[13].ToString(); DisplayInfo("", "P", " " + seq + ".2 处理工作档:" + li_wrk_no.ToString()); SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); if (li_wrk_sts == 4) { switch (li_io_type) { #region 空托盘入库 case 10: sql = "update asr_loc_mast set loc_sts='D',io_time='" + ldt_date + "',modi_time='" + ldt_date + "'"; sql += " where loc_no='" + ls_loc_no + "' and (loc_sts = 'S' Or loc_sts = 'Q')"; SqlCommand cmd_10 = new SqlCommand(sql, sqlconn); cmd_10.Transaction = sqltrans; try { cmd_10.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_10.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".3 入库-更新库位状态异常 [asr_loc_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion #region 全板入库 case 1: ///检查库存明细档是否已存在数据 int li_count1 = 0; sql = ""; try { li_count1 = Common.ExecAsrsSelect1("select count(*) from asr_loc_detl where loc_no ='" + ls_loc_no + "'"); } catch (Exception em) { ls_error_memo = " " + seq + ".4 查询库存明细[asr_loc_detl]出错!工作号:" + li_wrk_no.ToString() + "!" + em.Message; DisplayInfo("", "E", ls_error_memo); goto re; } ///根据工作号,查询工作明细档商品编号 string sqlDetl = ""; string sqlWaitIn = ""; sql = "select lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname from asr_wrk_detl where wrk_no=" + li_wrk_no; DataView dv_wrkdetl = Common.ExecAsrsSelect(sql); if (dv_wrkdetl == null || dv_wrkdetl.Count < 1) { DisplayInfo("", "E", " " + seq + ".5 工作明细档 [asr_wrk_detl] 没有资料!"); return; } foreach (DataRowView drow in dv_wrkdetl) { string lgnum = "", tbnum = "", tbpos = "", zmatid = "", matnr = "", maktx = "", werks = "", anfme = "", altme = "", zpallet = "", bname = ""; lgnum = drow[0].ToString(); tbnum = drow[1].ToString(); tbpos = drow[2].ToString(); zmatid = drow[3].ToString(); matnr = drow[4].ToString(); maktx = drow[5].ToString(); werks = drow[6].ToString(); anfme = drow[7].ToString(); altme = drow[8].ToString(); zpallet = drow[9].ToString(); bname = drow[10].ToString(); string sqlLocDetl = "select anfme from asr_loc_detl where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'"; DataView dvLocDetl = Common.ExecAsrsSelect(sqlLocDetl); if (dvLocDetl != null) { if (dvLocDetl.Count > 0) {//库存已有,更新数量 sqlDetl = " update asr_loc_detl set anfme=anfme+" + anfme + " where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'; "; Common.ExecAsrsModify(sqlDetl); } else {//库存没有,插入 sqlDetl = " insert into asr_loc_detl(loc_no,lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname) "; sqlDetl += " values('" + ls_loc_no + "','" + lgnum + "'," + tbnum + "," + tbpos + ",'" + zmatid + "', "; sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + anfme + ",'" + altme + "','" + ls_barcode + "','" + bname + "');"; Common.ExecAsrsModify(sqlDetl); } } sqlWaitIn += " update cust_wait_pakin set io_status='Y' where lgnum='" + lgnum + "' and tbnum=" + tbnum + " and tbpos=" + tbpos + " and zmatid='" + zmatid + "';"; } ///更新库存信息,插入库存明细档,并更新库存主档 sql = ""; if (li_count1 > 0) { sql += "delete from asr_loc_detl where loc_no ='" + ls_loc_no + "';"; } sql += " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'"; sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'S';"; //sql += sqlDetl; sql += sqlWaitIn; SqlCommand cmd_1 = new SqlCommand(sql, sqlconn); cmd_1.Transaction = sqltrans; try { cmd_1.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_1.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".6 入库-更新库存异常 [asr_loc_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " !" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion #region 拣料再入库 case 53: ///根据工作号,查询工作明细档商品编号 sqlDetl = ""; sqlWaitIn = ""; sql = "select lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname from asr_wrk_detl where wrk_no=" + li_wrk_no; DataView dv_wrkdetl53 = Common.ExecAsrsSelect(sql); if (dv_wrkdetl53 == null || dv_wrkdetl53.Count < 1) { DisplayInfo("", "E", " " + seq + ".6 工作明细档 [asr_wrk_detl] 没有资料!"); return; } foreach (DataRowView drow in dv_wrkdetl53) { string lgnum = "", tbnum = "", tbpos = "", zmatid = "", matnr = "", maktx = "", werks = "", anfme = "", altme = "", zpallet = "", bname = ""; lgnum = drow[0].ToString(); tbnum = drow[1].ToString(); tbpos = drow[2].ToString(); zmatid = drow[3].ToString(); matnr = drow[4].ToString(); maktx = drow[5].ToString(); werks = drow[6].ToString(); anfme = drow[7].ToString(); altme = drow[8].ToString(); zpallet = drow[9].ToString(); bname = drow[10].ToString(); sqlDetl += " update asr_loc_detl set anfme=anfme-" + anfme + " where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'"; sqlWaitIn += " update cust_wait_pakout set io_status='Y' where lgnum='" + lgnum + "' and tanum=" + tbnum + " and tapos=" + tbpos + " and matnr=" + matnr + ";"; } ///更新库存信息,插入库存明细档,并更新库存主档 sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'"; sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'Q';"; sql += sqlDetl; sql += sqlWaitIn; SqlCommand cmd_53 = new SqlCommand(sql, sqlconn); cmd_53.Transaction = sqltrans; try { cmd_53.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_53.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".7 拣料-更新库存异常 [asr_loc_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " !" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion #region 并板再入库 case 54: ///根据工作号,查询工作明细档商品编号 sqlDetl = ""; sqlWaitIn = ""; sql = "select lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname from asr_wrk_detl where wrk_no=" + li_wrk_no; DataView dv_wrkdetl54 = Common.ExecAsrsSelect(sql); if (dv_wrkdetl54 == null || dv_wrkdetl54.Count < 1) { DisplayInfo("", "E", " " + seq + ".8 工作明细档 [asr_wrk_detl] 没有资料!"); return; } foreach (DataRowView drow in dv_wrkdetl54) { string lgnum = "", tbnum = "", tbpos = "", zmatid = "", matnr = "", maktx = "", werks = "", anfme = "", altme = "", zpallet = "", bname = ""; lgnum = drow[0].ToString(); tbnum = drow[1].ToString(); tbpos = drow[2].ToString(); zmatid = drow[3].ToString(); matnr = drow[4].ToString(); maktx = drow[5].ToString(); werks = drow[6].ToString(); anfme = drow[7].ToString(); altme = drow[8].ToString(); zpallet = drow[9].ToString(); bname = drow[10].ToString(); string sql1 = "select anfme from asr_loc_detl where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'"; DataView dv_locdetl54 = Common.ExecAsrsSelect(sql1); if (dv_locdetl54 != null && dv_locdetl54.Count > 0) { sqlDetl += " update asr_loc_detl set anfme=anfme+" + anfme + " where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'"; //sqlWaitIn += " update cust_wait_pakin set io_status='Y' where matnr=" + matnr + ";"; } else { sqlDetl += " insert into asr_loc_detl(loc_no,lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname) "; sqlDetl += " values('" + ls_loc_no + "','" + lgnum + "'," + tbnum + "," + tbpos + ",'" + zmatid + "', "; sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + anfme + ",'" + altme + "','" + ls_barcode + "','" + bname + "');"; } sqlWaitIn += " update cust_wait_pakout set io_status='Y' where lgnum='" + lgnum + "' and tanum=" + tbnum + " and tapos=" + tbpos + ";"; } ///更新库存信息,插入库存明细档,并更新库存主档 //sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'"; sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "' "; sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'Q';"; sql += sqlDetl; sql += sqlWaitIn; SqlCommand cmd_54 = new SqlCommand(sql, sqlconn); cmd_54.Transaction = sqltrans; try { cmd_54.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_54.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".9 并板再入库-更新库存异常 [asr_loc_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " !" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion #region 盘点再入库 case 57: ///根据工作号,查询工作明细档商品编号 sqlDetl = ""; sqlWaitIn = ""; sql = "select lgnum,tbnum,tbpos,matnr from asr_wrk_detl where wrk_no=" + li_wrk_no; DataView dv_wrkdetl57 = Common.ExecAsrsSelect(sql); if (dv_wrkdetl57 == null || dv_wrkdetl57.Count < 1) { DisplayInfo("", "E", " " + seq + ".10 工作明细档 [asr_wrk_detl] 没有资料!"); return; } foreach (DataRowView drow in dv_wrkdetl57) { string lgnum = "", tbnum = "", tbpos = "", matnr = ""; lgnum = drow[0].ToString(); tbnum = drow[1].ToString(); tbpos = drow[2].ToString(); matnr = drow[3].ToString(); //sqlWaitIn += " update cust_wait_check set io_status='Y' where lgnum='" + lgnum + "' and ivnum=" + tbnum + " and ivpos=" + tbpos + ";"; } sqlWaitIn += " update cust_wait_check set io_status='Y' where lgpla='" + ls_loc_no + "';"; ///更新库存信息,插入库存明细档,并更新库存主档 sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'"; sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'Q';"; sql += sqlDetl; sql += sqlWaitIn; SqlCommand cmd_57 = new SqlCommand(sql, sqlconn); cmd_57.Transaction = sqltrans; try { cmd_57.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_57.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".11 盘点再入库-更新库存异常 [asr_loc_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " !" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion #region 库位移转 case 11: sql = ""; string ls_loc_sts = ""; if (ls_empty_mk == "N") { ls_loc_sts = "F"; sql += "Update dbo.asr_loc_detl set loc_no='" + ls_loc_no + "',modi_time='" + ldt_date + "' where loc_no='" + ls_source_loc_no + "';"; } else { ls_loc_sts = "D"; } sql += " Update dbo.asr_loc_mast set loc_sts='O',barcode='',io_time='" + ldt_date + "' where loc_no='" + ls_source_loc_no + "'; "; sql += " Update dbo.asr_loc_mast set loc_sts='" + ls_loc_sts + "',barcode='" + ls_barcode + "',io_time='" + ldt_date + "' where loc_no='" + ls_loc_no + "';"; sql += " update cust_wait_pakout set io_status='Y' where vlpla='" + ls_source_loc_no + "' and nlpla='" + ls_loc_no + "'"; SqlCommand cmd_11 = new SqlCommand(sql, sqlconn); cmd_11.Transaction = sqltrans; try { cmd_11.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_11.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".12 库位移转-更新库存异常 [asr_loc_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " !" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion } sql = "update asr_wrk_mast set wrk_sts=5,modi_time='" + ldt_date + "' where wrk_no=" + li_wrk_no + "; "; SqlCommand cmd_wrk = new SqlCommand(sql, sqlconn); cmd_wrk.Transaction = sqltrans; try { cmd_wrk.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_wrk.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".13 更新工作状态异常 [asr_wrk_mast] !工作号:" + li_wrk_no.ToString() + " 时间:" + ldt_date.ToString() + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } } else if (li_wrk_sts == 14) { switch (li_io_type) { #region 全板出库 case 101: ///根据工作号,查询工作明细档商品编号 string sqlWaitIn = ""; sql = "select lgnum,tbnum,tbpos,matnr from asr_wrk_detl where wrk_no=" + li_wrk_no; DataView dv_wrkdetl = Common.ExecAsrsSelect(sql); if (dv_wrkdetl == null || dv_wrkdetl.Count < 1) { DisplayInfo("", "E", " " + seq + ".14 工作明细档 [asr_wrk_detl] 没有资料!"); goto re; } foreach (DataRowView drow in dv_wrkdetl) { string lgnum = drow[0].ToString(); string tbnum = drow[1].ToString(); string tbpos = drow[2].ToString(); string matnr = drow[3].ToString(); sqlWaitIn += " update cust_wait_pakout set io_status='Y' where lgnum='" + lgnum + "' and tanum=" + tbnum + " and tapos=" + tbpos + " and vlpla=" + ls_source_loc_no + ";"; } sql = "delete from asr_loc_detl where loc_no ='" + ls_source_loc_no + "';"; sql += " update asr_loc_mast set loc_sts='O',io_time='" + ldt_date + "',barcode=null"; sql += " where loc_no='" + ls_source_loc_no + "' and loc_sts = 'R';"; sql += sqlWaitIn; SqlCommand cmd_101 = new SqlCommand(sql, sqlconn); cmd_101.Transaction = sqltrans; try { cmd_101.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_101.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".15 出库-更新库位状态异常[asr_loc_mast] !库位号:" + ls_source_loc_no + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion #region 空板出库 case 110: sql = "update asr_loc_mast set loc_sts='O',io_time='" + ldt_date + "'"; sql += " where loc_no='" + ls_source_loc_no + "' and loc_sts = 'R'"; SqlCommand cmd_110 = new SqlCommand(sql, sqlconn); cmd_110.Transaction = sqltrans; try { cmd_110.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_110.Dispose(); sqlconn.Dispose(); ls_error_memo = " " + seq + ".16 出库-更新库位状态异常[asr_loc_mast] !库位号:" + ls_source_loc_no + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } break; #endregion } sql = "update asr_wrk_mast set wrk_sts=15,modi_time='" + ldt_date + "' where wrk_no=" + li_wrk_no + "; "; SqlCommand cmd_wrk1 = new SqlCommand(sql, sqlconn); cmd_wrk1.Transaction = sqltrans; try { cmd_wrk1.ExecuteNonQuery(); } catch (SqlException t) { sqltrans.Rollback(); cmd_wrk1.Dispose(); sqltrans.Dispose(); ls_error_memo = " " + seq + ".17 更新工作状态异常 [asr_wrk_mast] !工作号:" + li_wrk_no.ToString() + " 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); goto re; } } sqltrans.Commit(); sqlconn.Dispose(); } } catch (SqlException t) { ls_error_memo = " " + seq + ".18 处理工作档数据失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } re: if (ls_error_memo != "") { try { bool bl = Common.ExecAsrsModify("update dbo.asr_wrk_mast set upd_mk ='X',error_time='" + ldt_date + "',error_memo='" + ls_error_memo + "' where wrk_no =" + li_wrk_no + ""); } catch (SqlException t) { ls_error_memo = " " + seq + ".19 更新工作主档状态 [asr_wrk_mast] 异常! 工作号:" + li_wrk_no.ToString() + " 时间:" + ldt_date.ToString(); DisplayInfo("", "E", ls_error_memo); return; } } } /// /// 处理工作档中工作状态为5和15的资料,转历史档 /// public void ProcWorkToLog(string seq) { string ls_error_memo = ""; DisplayInfo(seq, "N", "--处理工作档转历史档......"); int wrkno = 0; try { string sql = "select top 1 wrk_no from asr_wrk_mast where wrk_sts=5 ";// or wrk_sts=15 or (wrk_sts=15 and io_type=110) "; sql += " or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))"; sql += " or (wrk_sts=15 and dateadd(mi,15,crn_end_time) <= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))"; sql += " or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp)) "; //sql += " or (wrk_sts=15 and dateadd(day,1,io_time) <= getdate() and crn_end_time is null) "; //sql += " or (wrk_sts=15 and dateadd(hh,1,crn_end_time) <= getdate()) "; //sql += " or (wrk_sts=15 and wrk_no not in (select wrk_no from asr_bas_devp))"; sql += " order by io_time,wrk_no asc"; DataView dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { DisplayInfo("", "N", " " + seq + ".1 工作档 [asr_wrk_mast] 没有资料处理!"); return; } foreach (DataRowView drow in dv) { wrkno = int.Parse(drow[0].ToString()); } DisplayInfo("", "P", " " + seq + ".2 正在处理转历史档" + wrkno); sql = "insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=" + wrkno + "; "; //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_devp) "; //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_crnp);"; sql += " delete from asr_wrk_mast where wrk_no=" + wrkno + "; "; sql += " insert into asr_wrk_detl_log select * from asr_wrk_detl where wrk_no=" + wrkno + "; "; sql += " delete from asr_wrk_detl where wrk_no=" + wrkno + "; "; //sql += " update asr_wrk_mast set wrk_sts=16 where wrk_sts=15 and dateadd(day,1,io_time) <= getdate();"; //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_devp) "; //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_crnp);"; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Transaction = sqltrans; string[] arraySql = sql.Split(';'); try { for (int i = 0; i < arraySql.Length; i++) { if (arraySql[i] != "") { sqlcmd.CommandText = arraySql[i]; sqlcmd.Connection = sqlconn; sqlcmd.Transaction = sqltrans; int result = sqlcmd.ExecuteNonQuery(); } } sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); ls_error_memo = " " + seq + ".3 工作档[asr_wrk_mast]转历史档错误 ! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqltrans.Dispose(); sqlconn.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".4 处理工作档转历史档失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 处理堆垛机、输送机命令,转历史档 /// public void ProcDevCommandToLog(string seq) { string ls_error_memo = ""; DisplayInfo(seq, "N", "--处理堆垛机&PLC命令转历史档......"); try { string sql = "insert into asr_stk_hplc "; sql += " select * from asr_stk_plcm where dateadd(day,7,appe_time) <= getdate();"; sql += " delete from asr_stk_plcm where dateadd(day,7,appe_time) <= getdate();"; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Transaction = sqltrans; string[] arraySql = sql.Split(';'); try { for (int i = 0; i < arraySql.Length; i++) { if (arraySql[i] != "") { sqlcmd.CommandText = arraySql[i]; sqlcmd.Connection = sqlconn; sqlcmd.Transaction = sqltrans; int result = sqlcmd.ExecuteNonQuery(); } } sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".1 堆垛机&PLC命令转历史档错误 ! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqltrans.Dispose(); sqlconn.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 堆垛机&PLC命令转历史档失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 转已完成物料信息到历史档 /// public void ProcMatCodeToLog(string seq) { string ls_error_memo = "", mat_no = ""; DisplayInfo(seq, "N", "--处理已完成物料数据转历史档......"); try { string condition = " and mat_no not in (select mat_no from asr_loc_detl) and mat_no not in (select mat_no from asr_wrk_detl) "; //condition += " and mat_no not in (select mat_no from cust_wait_pakout) "; string sql0 = " select top 1 mat_no from bas_mat_code where status>1 " + condition + " ;"; DataView dv = Common.ExecAsrsSelect(sql0); if (dv.Count <= 0) { DisplayInfo("", "N", " " + seq + ".1 物料档 [bas_mat_code] 没有资料处理!"); return; } foreach (DataRowView drow in dv) { mat_no = drow[0].ToString(); } string sql = "delete from bas_mat_code_log where mat_no='" + mat_no + "';"; sql += " insert into bas_mat_code_log "; sql += " select * from bas_mat_code where status>1 " + condition + " ;"; sql += " delete from bas_mat_code where status>1 " + condition + " ;"; sql += " delete from bas_mat_code where status=0 and dateadd(hh,2,modi_time) <= getdate() " + condition + " ;"; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Transaction = sqltrans; string[] arraySql = sql.Split(';'); try { for (int i = 0; i < arraySql.Length; i++) { if (arraySql[i] != "") { sqlcmd.CommandText = arraySql[i]; sqlcmd.Connection = sqlconn; sqlcmd.Transaction = sqltrans; int result = sqlcmd.ExecuteNonQuery(); } } sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".1 已完成物料数据转历史档错误 ! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 已完成物料数据转历史档失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 转已完成待出库档信息到历史档 /// public void ProcWaitOutToLog(string seq) { string ls_error_memo = "", sql = ""; DisplayInfo(seq, "N", "--处理已完成入/出库档数据转历史档......"); try { string sql0 = " select lgnum,tbnum,tbpos from cust_wait_pakin where io_status='F';"; DataView dv = Common.ExecAsrsSelect(sql0); if (dv == null || dv.Count <= 0) { DisplayInfo("", "N", " " + seq + ".1 入库档 [cust_wait_pakin] 没有资料处理!"); } else { foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); sql = "insert into cust_wait_pakin_log "; sql += " select * from cust_wait_pakin where lgnum='" + lgnum + "' and tbnum=" + tanum + " and tbpos=" + tapos + "; "; sql += " delete from cust_wait_pakin where lgnum='" + lgnum + "' and tbnum=" + tanum + " and tbpos=" + tapos + "; "; } } sql0 = " select lgnum,tanum,tapos from cust_wait_pakout where io_status='F';"; dv = Common.ExecAsrsSelect(sql0); if (dv == null || dv.Count <= 0) { DisplayInfo("", "N", " " + seq + ".2 出库档 [cust_wait_pakout] 没有资料处理!"); } else { foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); sql = "insert into cust_wait_pakout_log "; sql += " select * from cust_wait_pakout where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + "; "; sql += " delete from cust_wait_pakout where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + "; "; } } sql0 = " select lgnum,ivnum,ivpos from cust_wait_check where io_status='Y';"; dv = Common.ExecAsrsSelect(sql0); if (dv == null || dv.Count <= 0) { DisplayInfo("", "N", " " + seq + ".3 盘点档 [cust_wait_check] 没有资料处理!"); } else { foreach (DataRowView drow in dv) { string lgnum = drow[0].ToString(); string tanum = drow[1].ToString(); string tapos = drow[2].ToString(); sql = "insert into cust_wait_check_log "; sql += " select * from cust_wait_check where lgnum='" + lgnum + "' and ivnum=" + tanum + " and ivpos=" + tapos + "; "; sql += " delete from cust_wait_check where lgnum='" + lgnum + "' and ivnum=" + tanum + " and ivpos=" + tapos + "; "; } } if (sql == "") { return; } SqlConnection sqlconn1 = new SqlConnection(Common.sqlcon); sqlconn1.Open(); SqlTransaction sqltrans1 = sqlconn1.BeginTransaction(); SqlCommand sqlcmd1 = new SqlCommand(); sqlcmd1.Transaction = sqltrans1; string[] arraySql1 = sql.Split(';'); try { for (int i = 0; i < arraySql1.Length; i++) { if (arraySql1[i] != "") { sqlcmd1.CommandText = arraySql1[i]; sqlcmd1.Connection = sqlconn1; sqlcmd1.Transaction = sqltrans1; int result = sqlcmd1.ExecuteNonQuery(); } } sqltrans1.Commit(); } catch (SqlException t) { sqltrans1.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".1 已完成物料数据转历史档错误 ! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } finally { sqlcmd1.Dispose(); sqlconn1.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 已完成出库数据转历史档失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 删除超过半年的历史档信息 /// public void ProcOverYearLog(string seq) { string ls_error_memo = ""; DisplayInfo(seq, "N", "--处理超过半年历史档信息......"); try { string sql = "delete from asr_stk_hplc where dateadd(day,180,appe_time) <= getdate(); "; sql += " delete from sys_tts_mast where dateadd(day,180,modi_time) <= getdate();"; sql += " delete from asr_wrk_detl_log where dateadd(day,360,appe_time) <= getdate();"; sql += " delete from asr_wrk_mast_log where dateadd(day,360,appe_time) <= getdate();"; sql += " delete from cust_wait_pakout_log where dateadd(day,360,appe_time) <= getdate();"; sql += " delete from bas_mat_code_log where dateadd(day,360,appe_time) <= getdate();"; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Transaction = sqltrans; string[] arraySql = sql.Split(';'); try { for (int i = 0; i < arraySql.Length; i++) { if (arraySql[i] != "") { sqlcmd.CommandText = arraySql[i]; sqlcmd.Connection = sqlconn; sqlcmd.Transaction = sqltrans; int result = sqlcmd.ExecuteNonQuery(); } } sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".1 堆垛机&PLC命令转历史档错误 ! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqltrans.Dispose(); sqlconn.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 堆垛机&PLC命令转历史档失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } } /// /// 处理库存档中库位状态为D O但是有明细的数据,清空明细 /// private void ProcErrorStockData(string seq) { string ls_error_memo = ""; string loc_no = "", mat_no = ""; DisplayInfo(seq, "N", "--处理库存档中异常库存信息......"); try { string sqlDetl = "delete from asr_loc_detl where anfme <= 0;"; Common.ExecAsrsModify(sqlDetl); string sql = "SELECT a.loc_no,b.matnr FROM asr_loc_mast a,asr_loc_detl b where a.loc_no=b.loc_no "; sql += " and (a.loc_sts='O' or a.loc_sts='D') "; DataView dv_stkDetl = Common.ExecAsrsSelect(sql); if (dv_stkDetl == null || dv_stkDetl.Count < 1) { return; } foreach (DataRowView drow_stkDetl in dv_stkDetl) { loc_no = drow_stkDetl[0].ToString(); mat_no = drow_stkDetl[1].ToString(); string sql0 = " delete from asr_loc_detl where loc_no='" + loc_no + "'; "; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Transaction = sqltrans; string[] arraySql = sql0.Split(';'); try { for (int i = 0; i < arraySql.Length; i++) { if (arraySql[i] != "") { sqlcmd.CommandText = arraySql[i]; sqlcmd.Connection = sqlconn; sqlcmd.Transaction = sqltrans; int result = sqlcmd.ExecuteNonQuery(); } } sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".1 处理库存档中异常库存信息错误 ! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqltrans.Dispose(); sqlconn.Dispose(); } } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 处理库存档中异常库存信息失败! 异常:" + t.Message; DisplayInfo("", "E", ls_error_memo); } } #endregion /// /// 回报主线程 /// private void ThreadTask() { DisplayInfo("", "N", "---------------系统运行中-------------"); while (true) { try { //生成出库工作档 ProcOutToWorkData("1"); ProcLocToWorkData("11"); //处理工作档状态4、14、6的资料 ProcWorkMast("2"); // done //工作档转历史档 // done ProcWorkToLog("3"); //堆垛机&PLC命令转历史档 ProcDevCommandToLog("4"); // done //转已完成物料信息到历史档 //ProcMatCodeToLog("5"); //转出库完成待出库档数据到历史档 ProcCheckToWorkData("5"); //转出库完成待出库档数据到历史档 ProcWaitOutToLog("6"); // done //删除超过半年历史档 ProcOverYearLog("7"); // done ProcErrorStockData("8"); // done Thread.Sleep(3000); } catch (Exception em) { Common.WriteLogFile("WcsError", "UpdateThread/ThreadTask--回报主线程循环出错:" + em.Message); } } } } }