AHTC/WebService/Interface/CVision.cs
2025-05-19 09:22:33 +08:00

414 lines
22 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
/// <summary>
/// VISION请求
/// </summary>
/// <param name="VisionRequest">入参</param>
/// <returns>出参</returns>
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("<RFIDResponse><Flag>{0}</Flag><Message>{1}</Message></RFIDResponse>", (bResult ? "1" : "0"), sResult);
}
System.Diagnostics.Debug.WriteLine("VISIONRequestWithReturn VisionRequest = " + VisionRequest);
if (string.IsNullOrEmpty(VisionRequest))
{
bResult = false;
sResult = string.Format("VisionRequest不能为空");
return string.Format("<VisionResponse><Flag>{0}</Flag><Message>{1}</Message></VisionResponse>", (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("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (bResult ? "1" : "0"), sResult);
}
if (sGOODBARCODEs == "0:111111")
{
bResult = false;
sResult = string.Format("识别超时");
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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<getUserBind.DATA>(sResult);
if (!bResult)
{
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (bResult ? "1" : "0"), sResult);
}
if (op == null || op.BINDS == null || op.BINDS.Count <= 0)
{
bResult = false;
sResult = string.Format("绑定信息条数为0");
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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<getBoxBarCode.DATA>(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<getInOutCheckInfo.DATA>(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<getUserBind.DATA>(sResult);
if (!bResult)
{
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (bResult ? "1" : "0"), sResult);
}
if (opub == null || opub.BINDS == null || opub.BINDS.Count <= 0)
{
bResult = false;
sResult = string.Format("绑定信息条数为0");
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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<getUserBind.DATA>(sResult);
if (!bResult)
{
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (bResult ? "1" : "0"), sResult);
}
if (opub == null || opub.BINDS == null || opub.BINDS.Count <= 0)
{
bResult = false;
sResult = string.Format("绑定信息条数为0");
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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<getUserBind.DATA>(sResult);
if (!bResult)
{
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (bResult ? "1" : "0"), sResult);
}
if (opub == null || opub.BINDS == null || opub.BINDS.Count <= 0)
{
bResult = false;
sResult = string.Format("绑定信息条数为0");
return string.Format("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (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("<MVResponse><Flag>{0}</Flag><Message>{1}</Message></MVResponse>", (bResult ? "1" : "0"), sResult);
}
/// <summary>
/// 视觉检测开始检测
/// </summary>
/// <param name="stationCode">视觉设备编号</param>
/// <returns>0不启动1单相表箱进入开始检测2三相表箱进入开始检测</returns>
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;
}
}
}
}