using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using DevComponents.DotNetBar.Controls; using System.Windows.Forms; using System.Drawing; using System.Data.SqlClient; using com.force.json; namespace WCS { public class WcsUpdate { /// /// 添加ListView界面显示 /// /// listview /// 需要 /// 异常信息 /// 显示内容 public static void add_dw_log(ListViewEx le, 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; } le.Items.Add(lvi); le.EnsureVisible(le.Items.Count - 1); } catch (Exception em) { ListViewItem lvi = new ListViewItem(); lvi.SubItems[0].Text = "【" + DateTime.Now.ToString() + "】" + seq + arg_string + "异常:" + em.Message; le.Items.Add(lvi); } } /// /// 读取wms命令档wms_command表,生成出库工作档 /// /// /// /// public static void ProcOutToWorkData(ListViewEx le, string seq) { string s_wmsId = "", s_boxId = "", s_location = "", s_locno = ""; string ls_error_memo = "", sql = ""; int i_station = 0, i_wrkno = 0; DateTime ldt_date = System.DateTime.Now; add_dw_log(le, seq, "N", "--处理WMS命令档,生成出库工作档......"); try { //sql = "select * from asr_wrk_masp where wrk_sts<5 or (wrk_sts>10 and wrk_sts<14)"; //int count = Common.ExecAsrsSelect1(sql); //if (Common.GetWrkOutCount() > 0 || Common.GetWrkInCount() > 0) if (Common.plc_s_loading[0, 0] == "Y" || Common.plc_s_loading[0, 1] == "Y") { add_dw_log(le, seq, "N", "--站点有物,无法生成出库工作档......"); return; } if (Common.GetWrkCount() > 0) { add_dw_log(le, seq, "N", "--工作档中存在未完成资料,无法生成出库工作档......"); return; } sql = "select top 1 wmsId,boxId,station,loc_no from wms_command "; sql += " where messageName='StackerStoreOut' and status<>'Y' order by status"; DataView dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { return; } foreach (DataRowView drow in dv) { s_wmsId = drow[0].ToString(); s_boxId = drow[1].ToString(); i_station = Int32.Parse(drow[2].ToString()); s_location = drow[3].ToString(); } add_dw_log(le, "", "P", " " + seq + ".1 正在处理周转箱单号:" + s_boxId); sql = "select loc_no from asr_stk_mast where boxId='" + s_boxId + "' and loc_sts='D'"; dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { ls_error_memo = " " + seq + ".2 编号" + s_boxId + "的周转箱不存在或非在库状态,请检查"; add_dw_log(le, "", "E", ls_error_memo); goto re; } foreach (DataRowView drow in dv) { s_locno = drow[0].ToString(); } if (s_location != s_locno && s_location != "") { ls_error_memo = " " + seq + ".3 WMS下发的周转箱编号(" + s_boxId + ")出库库位(" + s_location + ")与ASRS库存库位(" + s_locno + ")不符"; add_dw_log(le, "", "E", ls_error_memo); goto re; } i_wrkno = Common.GetWrkno(2); sql = "insert into asr_wrk_masp(wrk_no,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,wmsId,boxId) "; sql += " values(" + i_wrkno + ",11,110,1,13.5,'" + s_locno + "',1,2,'" + s_wmsId + "','" + s_boxId + "'); "; sql += " update asr_stk_mast set loc_sts='R' where loc_no='" + s_locno + "'; "; sql += " update wms_command set status='Y' where wmsId='" + s_wmsId + "' and boxId='" + s_boxId + "';"; 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_masp]错误 !单号:" + s_boxId + " 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); goto re; } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } return; re: sql = "update wms_command set status='X' where wmsId='" + s_wmsId + "' and boxId='" + s_boxId + "'"; bool result = Common.ExecAsrsModify(sql); if (!result) { ls_error_memo = " " + seq + ".5 更新wms命令档失败!wmsId:" + s_wmsId + "boxId:" + s_boxId; add_dw_log(le, "", "E", ls_error_memo); } } catch (Exception em) { ls_error_memo = " " + seq + ".6 处理待处理档生成出库工作档失败:" + em.Message; add_dw_log(le, "", "E", ls_error_memo); } } /// /// 处理工作档中工作状态为4和14、6的资料,更新库存档、待处理档,并添加上报wms任务队列commandQueue /// public static void ProcWorkMast(ListViewEx le, string seq) { string ls_error_memo = "" ,sql = ""; 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; add_dw_log(le, 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,wrk_sts,io_type,loc_no,sta_no,source_sta_no,source_loc_no,wmsId,boxId,wrk_model "; sql += " from asr_wrk_masp 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)) "; sql += " order by upd_mk,io_time,wrk_no"; DataView dv_wrkmast = Common.ExecAsrsSelect(sql); if (dv_wrkmast==null || dv_wrkmast.Count < 1) { add_dw_log(le, "", "N", " " + seq + ".1 工作档 [asr_wrk_masp] 没有资料!"); return; } foreach (DataRowView drow_wrkmast in dv_wrkmast) { li_wrk_no = Convert.ToInt32(drow_wrkmast[0]); li_wrk_sts = Convert.ToInt32(drow_wrkmast[1]); li_io_type = Convert.ToInt32(drow_wrkmast[2]); ls_loc_no = drow_wrkmast[3].ToString(); li_sta_no = Convert.ToInt32(drow_wrkmast[4]); li_source_sta_no = Convert.ToInt32(drow_wrkmast[5]); ls_source_loc_no = drow_wrkmast[6].ToString(); ls_wmsId = drow_wrkmast[7].ToString(); ls_boxId = drow_wrkmast[8].ToString(); li_wrk_model = Convert.ToInt32(drow_wrkmast[9].ToString()); add_dw_log(le, "", "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) { case 10: sql = "update asr_stk_mast set loc_sts='D',io_time='" + ldt_date + "',wmsId='" + ls_wmsId + "',boxId='" + ls_boxId + "'"; 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 + ".2.1 入库-更新库位状态异常 [asr_stk_mast] !工作号:" + li_wrk_no.ToString() + " 库位号:" + ls_loc_no + " 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); goto re; } break; } sql = "update asr_wrk_masp set wrk_sts=5,modi_time='" + ldt_date + "' where wrk_no=" + li_wrk_no + "; "; if (li_wrk_model == 1) { sql += " update wms_command set Io_status='Y',upd_mk='Y' where wmsId='" + ls_wmsId + "' and boxId='" + ls_boxId + "';"; } 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 + ".2.2 更新工作状态异常 [asr_wrk_masp] !工作号:" + li_wrk_no.ToString() + " 时间:" + ldt_date.ToString() + " 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); goto re; } //向WMS上报状态 JSONObject json = new JSONObject(); json.put("messageName", "StackerTaskState"); json.put("boxId", ls_boxId); json.put("wmsId", ls_wmsId); json.put("type", "STACKER"); json.put("flashId", "1"); if (li_wrk_model == 1) { json.put("isInit", 1); } else { json.put("isInit", 0); } json.put("station", "2"); JSONObject obj_location = new JSONObject(); obj_location.put("s_level", 1); obj_location.put("s_location", 10011); int e_level = int.Parse(ls_loc_no.Substring(6,1)); obj_location.put("e_level", e_level); int e_location = int.Parse("1" + ls_loc_no.Substring(2, 3) + ls_loc_no.Substring(1, 1)); obj_location.put("e_location", e_location); obj_location.put("r_level", 0); obj_location.put("r_location", 0); json.put("state", 3); json.put("location", obj_location); } else if (li_wrk_sts == 14) { switch (li_io_type) { case 110: sql = "update asr_stk_mast set loc_sts='O',io_time='" + ldt_date + "',wmsId='',boxId=''"; 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 + ".2.3 出库-更新库位状态异常[asr_stk_mast] !库位号:" + ls_source_loc_no + " 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); goto re; } break; } sql = "update asr_wrk_masp set wrk_sts=15,modi_time='" + ldt_date + "' where wrk_no=" + li_wrk_no + "; "; if (li_wrk_model == 1) { sql += " update wms_command set Io_status='Y',upd_mk='Y' where wmsId='" + ls_wmsId + "' and boxId='" + ls_boxId + "';"; } 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 + ".2.4 更新工作状态异常 [asr_wrk_masp] !工作号:" + li_wrk_no.ToString() + " 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); goto re; } JSONObject obj_location = new JSONObject(); int s_level = int.Parse(ls_source_loc_no.Substring(6, 1)); obj_location.put("s_level", s_level); int s_location = int.Parse("1" + ls_source_loc_no.Substring(2, 3) + ls_source_loc_no.Substring(1, 1)); obj_location.put("s_location", s_location); obj_location.put("e_level", 1); obj_location.put("e_location", 10011); obj_location.put("r_level", 0); obj_location.put("r_location", 0); } sqltrans.Commit(); sqlconn.Dispose(); } } catch (SqlException t) { ls_error_memo = " " + seq + ".2.5 处理工作档数据失败! 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); } re: if (ls_error_memo != "") { try { bool bl = Common.ExecAsrsModify("update dbo.asr_wrk_masp 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 + ".3.6 更新工作主档状态 [asr_wrk_masp] 异常! 工作号:" + li_wrk_no.ToString() + " 时间:" + ldt_date.ToString(); add_dw_log(le, "", "E", ls_error_memo); return; } } } /// /// 处理工作档中工作状态为5和15的资料,转历史档 /// public static void ProcWorkToLog(ListViewEx le, string seq) { string ls_error_memo = ""; add_dw_log(le, seq, "N", "--处理工作档转历史档......"); int wrkno = 0; try { string sql = "select top 1 wrk_no from asr_wrk_masp where (wrk_sts=5 or wrk_sts=15)"; DataView dv = Common.ExecAsrsSelect(sql); if (dv.Count <= 0) { add_dw_log(le, "", "N", " " + seq + ".1 工作档 [asr_wrk_masp] 没有资料处理!"); return; } foreach (DataRowView drow in dv) { wrkno = int.Parse(drow[0].ToString()); } add_dw_log(le, "", "P", " " + seq + ".1 正在处理转历史档" + wrkno); sql = "insert into asr_wrk_masp_log select * from asr_wrk_masp 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_masp 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);"; SqlConnection sqlconn = new SqlConnection(Common.sqlcon); sqlconn.Open(); SqlTransaction sqltrans = sqlconn.BeginTransaction(); SqlCommand sqlcmd = new SqlCommand(sql, sqlconn); sqlcmd.Transaction = sqltrans; try { int result = sqlcmd.ExecuteNonQuery(); sqltrans.Commit(); } catch (SqlException t) { sqltrans.Rollback(); //sqlcommon.Close(); ls_error_memo = " " + seq + ".1 工作档[asr_wrk_masp]转历史档错误 ! 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 处理工作档转历史档失败! 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); } } /// /// 处理wms命令档中已完结资料,转历史档 /// public static void ProcWmsCommandToLog(ListViewEx le, string seq) { string ls_error_memo = ""; add_dw_log(le, seq, "N", "--处理WMS命令档转历史档......"); try { string sql = "insert into wms_command_log select * from wms_command where Io_status='Y' and upd_mk='Y';"; sql += " delete from wms_command where Io_status='Y' and upd_mk='Y';"; 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 + ".1 WMS命令档转历史档错误 ! 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); } finally { sqlcmd.Dispose(); sqlconn.Dispose(); } return; } catch (Exception t) { ls_error_memo = " " + seq + ".2 WMS命令档转历史档失败! 异常:" + t.Message; add_dw_log(le, "", "E", ls_error_memo); } } /// /// 同步货位信息到WMS /// public static void ProcReportLocationsResult(ListViewEx le, string seq) { string ls_error_memo = "", sql = ""; string ls_messageName = "", ls_areaIdx = ""; int li_requestlength = 0, li_totallength = 0, li_currentlength = 0, li_resultlength = 0; string ls_loc_no = "", ls_loc_sts = "", ls_boxId = ""; int li_row1 = 0, li_bay1 = 0, li_lev1 = 0; add_dw_log(le, seq, "N", "--处理WMS货位信息同步命令......"); try { sql = "select messageName,requestlength,areaIdx,totallength,currentlength "; sql += " from wms_command where messageName='InquiryLocations' and Io_status<>'Y' and currentlength=totallength) then 'Y' else 'N' end "; sql += " ,upd_mk = case when (currentlength+" + li_resultlength + ">=totallength) then 'Y' else 'N' end "; sql += " where messageName='InquiryLocations' and Io_status<>'Y' and currentlength