using CommonClassLib;
//using DBFactory;
using Matrix.Utility;
using RGD.DBUtility;
using RGDWCSServices;
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 CRFID
{
///
/// RFID请求
///
/// 入参
/// 出参
public static string RFIDRequestWithReturn(string RFIDRequest)
{
bool bResult = true;
string sResult = string.Empty;
//List goodsCode = new List();
//List goodsCodeLocation = new List();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(RFIDRequest);
XmlNode nodeRoot = xmlDoc.SelectSingleNode("RFIDRequest");
string sSTATION_CODE = nodeRoot.SelectSingleNode(@"BindingDeviceID").InnerText;
List paixu = new List() { };
XmlNodeList xnlBOX_BARCODE = nodeRoot.SelectNodes(@"BoxRFID/BoxCode");
string sBOX_BARCODE = string.Empty;
//新增箱条码顺序
foreach (XmlNode nBOX_BARCODE in xnlBOX_BARCODE)
{
paixu.Add(Convert.ToInt64(nBOX_BARCODE.InnerText));
}
paixu.Sort();
paixu = paixu.GroupBy(x => x).Select(x => x.Key).ToList();
foreach (long nBOX_BARCODE in paixu)
{
sBOX_BARCODE += nBOX_BARCODE.ToString() + ",";
}
//
sBOX_BARCODE = sBOX_BARCODE.TrimEnd(',');
XmlNodeList xnlGOODS_BARCODE_LOCATION = nodeRoot.SelectNodes(@"GoodsRFID/Location");
XmlNodeList xnlGOODS_BARCODE = nodeRoot.SelectNodes(@"GoodsRFID/GoodsCode");
string sGOODS_BARCODE = string.Empty;
foreach (XmlNode nGOODS_BARCODE in xnlGOODS_BARCODE)
{
sGOODS_BARCODE += nGOODS_BARCODE.InnerText + ",";
}
sGOODS_BARCODE = sGOODS_BARCODE.TrimEnd(',');
System.Diagnostics.Debug.WriteLine("RFIDRequestWithReturn RFIDRequest = " + RFIDRequest);
switch (sBOX_BARCODE)
{
case "371102010032":
sBOX_BARCODE = "345610001259";
break;
case "371102010017":
sBOX_BARCODE = "340010041716";
break;
case "371102010055":
sBOX_BARCODE = "345210003548";
break;
case "371102010002":
sBOX_BARCODE = "340010013624";
break;
case "371102010005":
sBOX_BARCODE = "340010013318";
break;
case "371102010049":
sBOX_BARCODE = "340060005874";
break;
}
//当前任务
DataView dv = DbHelperSQL.Query("select F_TASK_NO,F_TASK_TYPE,F_EQUIP_TYPE,F_TASK_STATUS,F_IO_WH_SORT_CODE,F_SINGLE_STANDARD from T_WareHouse").Tables[0].DefaultView;
string TASK_NO = dv[0]["F_TASK_NO"].ToString();
string TASK_TYPE = dv[0]["F_TASK_TYPE"].ToString();
string EQUIP_TYPE = dv[0]["F_EQUIP_TYPE"].ToString();
string TASK_STATUS = dv[0]["F_TASK_STATUS"].ToString();
string IO_WH_SORT_CODE = dv[0]["F_IO_WH_SORT_CODE"].ToString();
if (TASK_NO == "" || TASK_NO == "0")
{
bResult = false;
sResult = "任务验证失败:未找到下发的任务。";
StaticClass.CreateMove(TASK_NO, Enum.CONTROL_TYPE.Move.ToString("d"), sSTATION_CODE, "12001", "", out sResult);
return string.Format("{0}{1}任务验证失败:未找到下发的任务", (bResult ? "1" : "0"), sResult);
}
if (TASK_STATUS != "RUN" && TASK_TYPE == "In")
{
bResult = false;
sResult = "任务验证失败:入库任务正在停止。";
StaticClass.CreateMove(TASK_NO, Enum.CONTROL_TYPE.Move.ToString("d"), sSTATION_CODE, "12001", "", out sResult);
return string.Format("{0}{1}任务验证失败:入库任务正在停止", (bResult ? "1" : "0"), sResult);
}
//for (int i = 0; i < xnlGOODS_BARCODE.Count; i++)
//{
// if (!xnlGOODS_BARCODE[i].InnerText.StartsWith("3430054"))
// {
// sGOODS_BARCODE += xnlGOODS_BARCODE[i].InnerText + ",";
// if (TASK_TYPE != "Inventory")
// {
// goodsCode.Add(xnlGOODS_BARCODE[i].InnerText);
// goodsCodeLocation.Add(xnlGOODS_BARCODE_LOCATION[i].InnerText);
// }
// }
//}
//来源
dv = DbHelperSQL.Query("select SOURCE_CELL_CODE,box_barcode from IO_RFID where STATION_CODE='" + sSTATION_CODE + "'").Tables[0].DefaultView;
if (dv.Count == 0)
{
bResult = false;
sResult = "未找到RFID站台" + sSTATION_CODE;
return string.Format("{0}{1}未找到RFID站台", (bResult ? "1" : "0"), sResult);
}
if (TASK_TYPE == "In")
{
int equipperbox = 1;
switch (EQUIP_TYPE)
{
case "01":
case "03":
case "06": equipperbox = 36; break;
case "02":
case "04": equipperbox = 12; break;
case "05": equipperbox = 3; break;
}
if (EQUIP_TYPE == "05")
{
if (xnlGOODS_BARCODE.Count > 0)
{
bResult = false;
sResult = "空箱入库时扫到表。";
StaticClass.CreateMove(TASK_NO, Enum.CONTROL_TYPE.Move.ToString("d"), sSTATION_CODE, "12001", "", out sResult);
return string.Format("{0}{1}空箱入库时扫到表。", (bResult ? "1" : "0"), sResult);
}
}
else if (equipperbox < xnlGOODS_BARCODE.Count)
{
if (xnlGOODS_BARCODE.Count > 0)
{
bResult = false;
sResult = "设备数量验证失败。";
StaticClass.CreateMove(TASK_NO, Enum.CONTROL_TYPE.Move.ToString("d"), sSTATION_CODE, "12001", "", out sResult);
return string.Format("{0}{1}设备数量验证失败。", (bResult ? "1" : "0"), sResult);
}
}
if (paixu.Count > 3)// || xnlBOX_BARCODE.Count==0
{
bResult = false;
sResult = "箱数量不为三。";
StaticClass.CreateMove(TASK_NO, Enum.CONTROL_TYPE.Move.ToString("d"), sSTATION_CODE, "12001", "", out sResult);
return string.Format("{0}{1}箱数量不为三。", (bResult ? "1" : "0"), sResult);
}
}
string SOURCE_CELL_CODE = dv[0][0].ToString() == "-" ? "" : dv[0][0].ToString();
getInOutCheckInfo ws = new getInOutCheckInfo();
LogUtil.WriteLog("", TASK_NO+":扫描验证启动时间");
if (TASK_TYPE == "Out")
{
LogUtil.WriteLog("", TASK_NO + ":扫描验证启动时间");
bResult = ws.Notify(TASK_NO, "02", SOURCE_CELL_CODE, sBOX_BARCODE, string.Empty, out sResult);
if (!bResult)
{
return string.Format("{0}{1}返库验证失败", (bResult ? "1" : "0"), sResult);
}
}
bResult = ws.Notify(TASK_NO, "02", SOURCE_CELL_CODE, sBOX_BARCODE, sGOODS_BARCODE, out sResult); //上报条码信息校验
getInOutCheckInfo.DATA op = (new Base()).DeSerialize(sResult);
if (TASK_TYPE == "Inventory")
{
if (bResult)
{
//StaticClass.CreateMove(TASK_NO, RGDWCSServices.Enum.CONTROL_TYPE.Up.ToString("d"), sSTATION_CODE, SOURCE_CELL_CODE, sBOX_BARCODE, op.BOX_LABLE, 0, "", false, false, op != null && op.IS_LASTBOX == "1", 1, out sResult);
//允许射频门离开
DbHelperSQL.ExecuteSql("update io_rfid set split_flag='1'");
return string.Format("{0}{1}盘库扫描成功,{2}目的地址为" + SOURCE_CELL_CODE, (bResult ? "1" : "0"), sResult, sBOX_BARCODE);
}
else
{
return string.Format("{0}{1}盘库扫描失败", (bResult ? "1" : "0"), sResult);
}
}
//新增
if (bResult)
{
getInStackLocation wss = new getInStackLocation();
getInStackLocation.DATA opp = (new Base()).DeSerialize(sResult);
//if (xnlBOX_BARCODE[0].InnerText.Substring(0, 5) == "34005" || EQUIP_TYPE == "05")//高箱跟空箱入库不叠盘 在这里直接申请储位
if (true)//凤阳模式不启用叠盘
{
bResult = wss.Notify(TASK_NO, sBOX_BARCODE, string.Empty, out sResult); //申请储位接口
opp = (new Base()).DeSerialize(sResult);
//StaticClass.CreateMove(TASK_NO, RGDWCSServices.Enum.CONTROL_TYPE.Up.ToString("d"), sSTATION_CODE, "01-02-01", sBOX_BARCODE, paixu[0].ToString(), 0, "", false, false, op != null && op.IS_LASTBOX == "1", 1, out sResult);
StaticClass.CreateMove(TASK_NO, RGDWCSServices.Enum.CONTROL_TYPE.Up.ToString("d"), sSTATION_CODE, opp.LOC_NO, sBOX_BARCODE, op.BOX_LABLE, 0, "", false, false, op != null && op.IS_LASTBOX == "1", 1, out sResult);
}
else
{
//送去叠盘 储位叠盘完成后申请
StaticClass.CreateMove(TASK_NO, RGDWCSServices.Enum.CONTROL_TYPE.Up.ToString("d"), sSTATION_CODE, "12003", sBOX_BARCODE, paixu[0].ToString(), 0, "", false, false, op != null && op.IS_LASTBOX == "1", 1, out sResult);
//StaticClass.CreateMove(TASK_NO, RGDWCSServices.Enum.CONTROL_TYPE.Up.ToString("d"), sSTATION_CODE, opp.LOC_NO, sBOX_BARCODE, op.BOX_LABLE, 0, "", false, false, op != null && op.IS_LASTBOX == "1", 1, out sResult);
}
DataView InOut = DbHelperSQL.Query("select * from T_InTask_QTY").Tables[0].DefaultView;
if (InOut.Count>0)
{
int count = 0;
int number = 0;
if (EQUIP_TYPE=="05")
{
number = int.Parse(InOut[0]["count"].ToString()) - xnlBOX_BARCODE.Count;
}
else
{
number = int.Parse(InOut[0]["count"].ToString()) - xnlGOODS_BARCODE.Count;
}
if (number > 0)
{
count = number;
}
DbHelperSQL.ExecuteSql("update T_InTask_QTY set count=" + count);
}
}
else
{
StaticClass.CreateMove(TASK_NO, RGDWCSServices.Enum.CONTROL_TYPE.Move.ToString("d"), sSTATION_CODE, "12001", sBOX_BARCODE, op.BOX_LABLE, 0, "", false, false, op != null && op.IS_LASTBOX == "1", 1, out sResult);
}
if (bResult)
DbHelperSQL.ExecuteSql("update io_rfid set SOURCE_CELL_CODE='' where STATION_CODE=" + sSTATION_CODE);
return string.Format("{0}{1}", (bResult ? "1" : "0"), sResult);
}
//static DbHelperSQLperator DbHelperSQL = new DbHelperSQLperator();
///
/// 监控射频读写启停信号
///
///
public static string RFIDReadyToRead(string station_code)
{
DataTable dt = DbHelperSQL.Query("select READ_FLAG from IO_RFID where STATION_CODE='" + station_code + "'").Tables[0];
if (dt.Rows.Count > 0)
return dt.Rows[0][0].ToString();
return "0";
}
///
/// 移除数组中重复数据
///
/// 需要除重的数组
/// 不重复数组
public static string[] DelRepeatData(string[] array)
{
return array.GroupBy(p => p).Select(p => p.Key).ToArray();
}
}
}