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