using CommonClassLib; //using DBFactory; using Matrix.Utility; using RGD.DBUtility; using RGDWCSServices.WMS; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Xml; namespace RGDWCSServices { public class CVision { //static DbHelperSQLperator DbHelperSQL = new DbHelperSQLperator(); /// /// VISION请求 /// /// 入参 /// 出参 public static string VISIONRequestWithReturn(string VisionRequest) { LogUtil.WriteLog("webService", "CVision;VISIONRequestWithReturn:" + VisionRequest); bool bResult = true; string sResult = string.Empty; string sTempResult = string.Empty; DataView dv_task = DbHelperSQL.Query("select * from t_Warehouse").Tables[0].DefaultView; string TASK_NO = dv_task[0]["F_TASK_NO"].ToString(); if (TASK_NO == "" || TASK_NO == "0") { bResult = false; sResult = "任务验证失败:未找到下发的任务。"; return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn VisionRequest = " + VisionRequest); if (string.IsNullOrEmpty(VisionRequest)) { bResult = false; sResult = string.Format("VisionRequest不能为空"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(VisionRequest); XmlNode nodeRoot = xmlDoc.SelectSingleNode("VisionRequest"); string sSTATION_CODE = nodeRoot.SelectSingleNode(@"DeviceID").InnerText; string sGOODS_TYPE = dv_task[0]["f_equip_type"].ToString() == "01" ? "1" : "2";// nodeRoot.SelectSingleNode(@"EquipType").InnerText; string sGOODBARCODEs = nodeRoot.SelectSingleNode(@"Barcodes").InnerText; string[] lsBARCODE = sGOODBARCODEs.Trim(';').Split(';'); if (sGOODBARCODEs == "0:000000") { bResult = false; sResult = string.Format("类型不符"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } if (sGOODBARCODEs == "0:111111") { bResult = false; sResult = string.Format("识别超时"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } try { DataView dv = DbHelperSQL.Query("select * from IO_VISION where STATION_CODE='" + sSTATION_CODE + "'").Tables[0].DefaultView; if ((bool)dv[0]["IS_PAST"]) { getUserBind ws = new getUserBind(); bResult = ws.Notify(TASK_NO, dv[0]["BOX_BARCODE"].ToString(), out sResult); getUserBind.DATA op = (new Base()).DeSerialize(sResult); if (!bResult) { return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } if (op == null || op.BINDS == null || op.BINDS.Count <= 0) { bResult = false; sResult = string.Format("绑定信息条数为0"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } int pickuplocation = 0; foreach (getUserBind.BIND bind in op.BINDS) { bool founded = false; foreach (string loc in lsBARCODE) { founded = false; int location = int.Parse(loc.Split(':')[0]); string barcode = loc.Split(':')[1]; if (barcode == bind.BAR_CODE) { int a = 1; for (int i = 1; i < location; i++) { a = a * 2; } pickuplocation += a; DbHelperSQL.ExecuteSql("insert into IO_VISION_DETAIL (BOX_BARCODE,GOODS_BARCODE,GOODS_LOCATION,USER_NO,USER_ADD,USER_NAME) values" + "('" + dv[0]["BOX_BARCODE"] + "','" + barcode + "'," + location + ",'" + bind.USER_NO + "','" + bind.USER_ADD + "','" + bind.USER_NAME + "')"); founded = true; break; } } if (!founded) {//未找到条码 bResult = false; sResult = string.Format("未找到条码"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn IS_PAST pickuplocation = " + pickuplocation.ToString()); //贴标站台 StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), Enum.CONTROL_TYPE.Paste.ToString("d"), "12030", "17001", dv[0]["BOX_BARCODE"].ToString(), pickuplocation, sGOODS_TYPE, (bool)dv[0]["IS_PICKUP"], false, false, out sResult); } else if ((bool)dv[0]["IS_PICKUP"]) { int pickuplocation = 0; foreach (string sGOODS_BARCODE in dv[0]["GOODS_BARCODES"].ToString().Split(',')) { foreach (string loc in lsBARCODE) { int location = int.Parse(loc.Split(':')[0]); string barcode = loc.Split(':')[1]; if (barcode == sGOODS_BARCODE) { int a = 1; for (int i = 1; i < location; i++) { a = a * 2; } pickuplocation += a; break; } } } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn IS_PICKUP pickuplocation = " + pickuplocation.ToString()); //拣选站台 StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), Enum.CONTROL_TYPE.PickUp.ToString("d"), "12030", "17002", dv[0]["BOX_BARCODE"].ToString(), pickuplocation, sGOODS_TYPE, true, false, false, out sResult); } else { if (lsBARCODE.Length == 0) { } string goods_barcode = lsBARCODE[0].Split(':')[1]; new getBoxBarCode().Notify(dv_task[0]["f_TASK_NO"].ToString(), goods_barcode, out sResult); getBoxBarCode.DATA op1 = new Base().DeSerialize(sResult); string box_barcode = op1.BOX_BAR_CODE; bResult = (new getInOutCheckInfo()).Notify(dv_task[0]["F_TASK_NO"].ToString(), "01", string.Empty, box_barcode, string.Empty, out sResult); if (!bResult) { throw new Exception("接口调用失败。" + DateTime.Now.ToString() + "\r\n接口:getInOutCheckInfo。\r\n错误信息:" + sResult); } getInOutCheckInfo.DATA op = (new Base()).DeSerialize(sResult); int pickuplocation = 0; getUserBind ws; getUserBind.DATA opub; switch (op.OUT_MODE) { case "1"://整箱出库 bResult = StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), RGDWCSServices.Enum.CONTROL_TYPE.Move.ToString("d"), "12030", "12032", box_barcode, out sResult); break; case "2"://整箱回库 DbHelperSQL.Query("update t_warehouse set f_lastbox_barcode='" + box_barcode + "'"); bResult = StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), RGDWCSServices.Enum.CONTROL_TYPE.Move.ToString("d"), "12030", "12002", box_barcode, out sResult); break; case "3"://拣选出库 DbHelperSQL.Query("update t_warehouse set f_lastbox_barcode='" + box_barcode + "'"); foreach (string sGOODS_BARCODE in op.REPICK_ARRAY.Split(',')) { foreach (string loc in lsBARCODE) { int location = int.Parse(loc.Split(':')[0]); string barcode = loc.Split(':')[1]; if (barcode == sGOODS_BARCODE) { int a = 1; for (int i = 1; i < location; i++) { a = a * 2; } pickuplocation += a; break; } } } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn IS_PICKUP pickuplocation = " + pickuplocation.ToString()); //拣选站台 StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), Enum.CONTROL_TYPE.PickUp.ToString("d"), "12030", "17002", box_barcode, pickuplocation, sGOODS_TYPE, true, false, false, out sResult); break; case "4"://贴标回库 DbHelperSQL.Query("update t_warehouse set f_lastbox_barcode='" + box_barcode + "'"); //当前任务 ws = new getUserBind(); bResult = ws.Notify(TASK_NO, box_barcode, out sResult); opub = (new Base()).DeSerialize(sResult); if (!bResult) { return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } if (opub == null || opub.BINDS == null || opub.BINDS.Count <= 0) { bResult = false; sResult = string.Format("绑定信息条数为0"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } foreach (getUserBind.BIND bind in opub.BINDS) { bool founded = false; foreach (string loc in lsBARCODE) { founded = false; int location = int.Parse(loc.Split(':')[0]); string barcode = loc.Split(':')[1]; if (barcode == bind.BAR_CODE) { int a = 1; for (int i = 1; i < location; i++) { a = a * 2; } pickuplocation += a; DbHelperSQL.ExecuteSql("insert into IO_VISION_DETAIL (BOX_BARCODE,GOODS_BARCODE,GOODS_LOCATION,USER_NO,USER_ADD,USER_NAME) values" + "('" + box_barcode + "','" + barcode + "'," + location + ",'" + bind.USER_NO + "','" + bind.USER_ADD + "','" + bind.USER_NAME + "')"); founded = true; break; } } if (!founded) {//未找到条码 bResult = false; sResult = string.Format("未找到条码"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn IS_PAST pickuplocation = " + pickuplocation.ToString()); //贴标站台 StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), Enum.CONTROL_TYPE.Paste.ToString("d"), "12030", "17001", box_barcode, pickuplocation, sGOODS_TYPE, false, false, false, out sResult); break; case "5"://贴标出库 DbHelperSQL.Query("update t_warehouse set f_lastbox_barcode='" + box_barcode + "'"); //当前任务 ws = new getUserBind(); bResult = ws.Notify(TASK_NO, box_barcode, out sResult); opub = (new Base()).DeSerialize(sResult); if (!bResult) { return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } if (opub == null || opub.BINDS == null || opub.BINDS.Count <= 0) { bResult = false; sResult = string.Format("绑定信息条数为0"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } foreach (getUserBind.BIND bind in opub.BINDS) { bool founded = false; foreach (string loc in lsBARCODE) { founded = false; int location = int.Parse(loc.Split(':')[0]); string barcode = loc.Split(':')[1]; if (barcode == bind.BAR_CODE) { int a = 1; for (int i = 1; i < location; i++) { a = a * 2; } pickuplocation += a; DbHelperSQL.ExecuteSql("insert into IO_VISION_DETAIL (BOX_BARCODE,GOODS_BARCODE,GOODS_LOCATION,USER_NO,USER_ADD,USER_NAME) values" + "('" + box_barcode + "','" + barcode + "'," + location + ",'" + bind.USER_NO + "','" + bind.USER_ADD + "','" + bind.USER_NAME + "')"); founded = true; break; } } if (!founded) {//未找到条码 bResult = false; sResult = string.Format("未找到条码"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn IS_PAST pickuplocation = " + pickuplocation.ToString()); //贴标站台 StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), Enum.CONTROL_TYPE.Paste.ToString("d"), "12030", "17001", box_barcode, pickuplocation, sGOODS_TYPE, false, true, false, out sResult); break; case "6"://贴标拣选出库 DbHelperSQL.Query("update t_warehouse set f_lastbox_barcode='" + box_barcode + "'"); //当前任务 ws = new getUserBind(); bResult = ws.Notify(TASK_NO, box_barcode, out sResult); opub = (new Base()).DeSerialize(sResult); if (!bResult) { return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } if (opub == null || opub.BINDS == null || opub.BINDS.Count <= 0) { bResult = false; sResult = string.Format("绑定信息条数为0"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } foreach (getUserBind.BIND bind in opub.BINDS) { bool founded = false; foreach (string loc in lsBARCODE) { founded = false; int location = int.Parse(loc.Split(':')[0]); string barcode = loc.Split(':')[1]; if (barcode == bind.BAR_CODE) { int a = 1; for (int i = 1; i < location; i++) { a = a * 2; } pickuplocation += a; DbHelperSQL.ExecuteSql("insert into IO_VISION_DETAIL (BOX_BARCODE,GOODS_BARCODE,GOODS_LOCATION,USER_NO,USER_ADD,USER_NAME) values" + "('" + box_barcode + "','" + barcode + "'," + location + ",'" + bind.USER_NO + "','" + bind.USER_ADD + "','" + bind.USER_NAME + "')"); founded = true; break; } } if (!founded) {//未找到条码 bResult = false; sResult = string.Format("未找到条码"); return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } } System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn IS_PAST pickuplocation = " + pickuplocation.ToString()); //贴标站台 StaticClass.CreateMove(dv_task[0]["f_TASK_NO"].ToString(), Enum.CONTROL_TYPE.Paste.ToString("d"), "12030", "17001", box_barcode, pickuplocation, sGOODS_TYPE, true, false, false, out sResult); break; } if (op.IS_LASTBOX == "1") { DbHelperSQL.Query("update t_warehouse set F_LASTBOX_REACH_FLAG=1"); } } } catch (Exception e) { bResult = false; sResult = e.Message; System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn Exception sResult = " + sResult); } finally { } return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult); } /// /// 视觉检测开始检测 /// /// 视觉设备编号 /// 0不启动;1单相表箱进入开始检测;2三相表箱进入开始检测 public static int ReadyToHandleVision(string stationCode) { DataTable dtBOX = DbHelperSQL.Query("select * from IO_VISION where STATION_CODE='" + stationCode + "'").Tables[0]; if (dtBOX != null && dtBOX.Rows.Count > 0) { int readFlag = Convert.ToInt32(dtBOX.Rows[0]["READ_FLAG"]); if (readFlag >0 ) { return readFlag; } return 0; } else { return 0; } } public static int Update_IO_Vision(string device_code, int read_flag) { StringBuilder sql = new StringBuilder(); sql.Append("update IO_VISION set READ_FLAG='" + read_flag + "' where STATION_CODE='" + device_code + "'"); if (sql.Length > 0) { return DbHelperSQL.ExecuteSql(sql.ToString()); } else { return -2; } } } }