|
@@ -620,6 +620,138 @@ namespace WCS.PLC
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ public static WCS_TASK GetExeTask(GetExeTaskParam param)
|
|
|
+ {
|
|
|
+ WCS_TASK wcstask = null;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ wcstask = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == param.ContainerBarCode);
|
|
|
+ if (wcstask == null)
|
|
|
+ {
|
|
|
+ var reply = Current.WmsInterface.I_WCS_GetExeTask(param);
|
|
|
+ string errormsg = CheckGetExeTask(param, reply);
|
|
|
+ if (string.IsNullOrWhiteSpace(errormsg))
|
|
|
+ {
|
|
|
+ //添加wcs任务
|
|
|
+ wcstask = new WCS_TASK();
|
|
|
+ wcstask.TASK_WMSNO = reply.WMSTaskNum;
|
|
|
+ wcstask.TASK_COMTYPE = reply.TaskType;
|
|
|
+ wcstask.TASK_SYSTYPE = "WMS";
|
|
|
+ wcstask.TASK_POSIDFROM = param.EquipmentNo;//起点地址
|
|
|
+ wcstask.TASK_POSIDCUR = param.EquipmentNo;
|
|
|
+ wcstask.TASK_POSIDNEXT = param.EquipmentNo;
|
|
|
+ wcstask.TASK_POSIDMOVE = "";
|
|
|
+ wcstask.TASK_PRIORITY = reply.Priority;
|
|
|
+ wcstask.TASK_WKSTATUS = 0;
|
|
|
+ wcstask.TASK_WHID = reply.WareHouseName;
|
|
|
+ wcstask.TASK_ADDUSERNO = "WMS";
|
|
|
+ wcstask.TASK_ADDDATETIME = DateTime.Now;
|
|
|
+ wcstask.TASK_EDITUSERNO = "WMS";
|
|
|
+ wcstask.TASK_EDITDATETIME = DateTime.Now;
|
|
|
+ wcstask.TASK_NOTES = "";
|
|
|
+ wcstask.TASK_RGVNO = "";
|
|
|
+ wcstask.TASK_BOXBARCODE = param.ContainerBarCode;
|
|
|
+ wcstask.TASK_WEIGHT = reply.TASK_WEIGHT;
|
|
|
+ wcstask.TASK_STACKINGTYPE = reply.TASK_STACKINGTYPE;
|
|
|
+ if (!string.IsNullOrWhiteSpace(reply.Memo1))
|
|
|
+ {
|
|
|
+ wcstask.TASK_IsWrapFilm = reply.Memo1.Trim() == "1" ? true : false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (string.IsNullOrWhiteSpace(param.Memo1))
|
|
|
+ {
|
|
|
+ wcstask.TASK_POSIDTO = reply.EndPostion;
|
|
|
+ wcstask.TASK_SRMNO = reply.EndPostion;
|
|
|
+ wcstask.PalletizingBoxSize = reply.PalletizingBoxSize;
|
|
|
+ wcstask.TASK_ORDERTYPE = reply.IsLastBox ? 1 : 0;
|
|
|
+ }
|
|
|
+ else if (param.Memo1.Trim() == "1")
|
|
|
+ {
|
|
|
+ string srmno = string.Empty;
|
|
|
+ wcstask.TASK_EndTunnelNum = ConveyorHelper.QueryTunnel(wcstask.TASK_WMSNO, reply.TunnelNum, out srmno);
|
|
|
+ wcstask.TASK_POSIDTO = srmno;
|
|
|
+ wcstask.TASK_SRMNO = srmno;
|
|
|
+ }
|
|
|
+ else if (param.Memo1.Trim() == "2")
|
|
|
+ {
|
|
|
+ wcstask.TASK_POSIDTO = reply.EndPostion;
|
|
|
+ wcstask.TASK_EndTunnelNum = reply.TunnelNum;
|
|
|
+ wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_VALUE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw new Exception(string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1错误.", param.ContainerBarCode));
|
|
|
+ }
|
|
|
+ int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
|
|
|
+ if (id <= 0)
|
|
|
+ {
|
|
|
+ throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ wcstask.TASK_NO = id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LogMessageHelper.RecordLogMessage(errormsg);
|
|
|
+ AddLedErrorMsg(param.EquipmentNo, errormsg, 0);
|
|
|
+ if (!string.IsNullOrWhiteSpace(param.Memo2))
|
|
|
+ {
|
|
|
+ //wms任务异常需要生成退回托盘任务
|
|
|
+ wcstask = new WCS_TASK()
|
|
|
+ {
|
|
|
+ TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),
|
|
|
+ TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回,
|
|
|
+ TASK_SYSTYPE = "WCS",
|
|
|
+ TASK_POSIDFROM = param.EquipmentNo,//起点地址
|
|
|
+ TASK_POSIDCUR = param.EquipmentNo,
|
|
|
+ TASK_POSIDNEXT = param.EquipmentNo,
|
|
|
+ TASK_POSIDMOVE = "",
|
|
|
+ TASK_PRIORITY = 1,
|
|
|
+ TASK_WKSTATUS = 1,
|
|
|
+ TASK_WHID = string.IsNullOrWhiteSpace(reply.WareHouseName) ? Current.WareNameList[0] : reply.WareHouseName,
|
|
|
+ TASK_ADDUSERNO = "WCS",
|
|
|
+ TASK_ADDDATETIME = DateTime.Now,
|
|
|
+ TASK_EDITUSERNO = "WCS",
|
|
|
+ TASK_EDITDATETIME = DateTime.Now,
|
|
|
+ TASK_NOTES = "",
|
|
|
+ TASK_RGVNO = "",
|
|
|
+ TASK_BOXBARCODE = param.ContainerBarCode,
|
|
|
+ TASK_POSIDTO = param.Memo2.Trim()
|
|
|
+ };
|
|
|
+ int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
|
|
|
+ if (id <= 0)
|
|
|
+ {
|
|
|
+ throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ wcstask.TASK_NO = id;
|
|
|
+ }
|
|
|
+
|
|
|
+ var task_dtl = new WCS_TASK_DTL()
|
|
|
+ {
|
|
|
+ ID = Guid.NewGuid().ToString(),
|
|
|
+ PARENTID = wcstask.TASK_NO,
|
|
|
+ TASKNO = wcstask.TASK_NO,
|
|
|
+ POSIDCUR = param.EquipmentNo,
|
|
|
+ POSIDNEXT = param.EquipmentNo,
|
|
|
+ DESCRIPTION = errormsg,
|
|
|
+ EXECUTEDATE = DateTime.Now
|
|
|
+ };
|
|
|
+ SugarBase.DB.Insertable(task_dtl).ExecuteReturnIdentity();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ LogMessageHelper.RecordLogMessage(ex);
|
|
|
+ }
|
|
|
+ return wcstask;
|
|
|
+ }
|
|
|
+
|
|
|
private static string CheckGetInTask(GetInTaskParam param, GetInTaskReply reply)
|
|
|
{
|
|
|
string errorMsg = string.Empty;
|
|
@@ -694,6 +826,80 @@ namespace WCS.PLC
|
|
|
return errorMsg;
|
|
|
}
|
|
|
|
|
|
+ private static string CheckGetExeTask(GetExeTaskParam param, GetExeTaskReply reply)
|
|
|
+ {
|
|
|
+ string errorMsg = string.Empty;
|
|
|
+ if (reply == null)
|
|
|
+ {
|
|
|
+ throw new Exception(string.Format("托盘[{0}]调用WMS入库接口,反馈的对象为空。", param.ContainerBarCode));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (reply.ResType)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrWhiteSpace(reply.WMSTaskNum))
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的WMS任务号不能为空。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else if (string.IsNullOrWhiteSpace(reply.EndPostion))
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的目标地址不能为空。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else if (string.IsNullOrWhiteSpace(reply.EndPostion))
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的目标地址不能为空。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else if (string.IsNullOrWhiteSpace(reply.WareHouseName))
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的仓库名称不能为空。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else if (reply.TASK_WEIGHT < 1 && param.EquipmentNo == "1390")
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("料箱[{0}]调用WMS入库接口,反馈的重量要大于0。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else if (reply.TASK_STACKINGTYPE < 1 && param.EquipmentNo == "1390")
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("料箱[{0}]调用WMS入库接口,反馈的垛型要大于0。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ //else if (string.IsNullOrWhiteSpace(reply.Memo1) && param.EquipmentNo == "1200" && param.ContainerBarCode.Contains("TPA"))
|
|
|
+ //{
|
|
|
+ // errorMsg = string.Format("托盘[{0}]18#调用WMS入库接口,反馈的是否缠膜不能为空。", param.ContainerBarCode);
|
|
|
+ //}
|
|
|
+ else if (!string.IsNullOrWhiteSpace(param.Memo1))
|
|
|
+ {
|
|
|
+ if (string.IsNullOrWhiteSpace(reply.TunnelNum) || reply.TunnelNum.Trim() == "0")
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,没有返回巷道。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ if (param.Memo1.Trim() == "2")
|
|
|
+ {
|
|
|
+ if (reply.EndPostion.Length < 10)
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,没有分配货位。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (param.Memo1.Trim() == "1")
|
|
|
+ {
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1[{1}]错误.", param.ContainerBarCode, param.Memo1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (reply == null)
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的对象为空。", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ errorMsg = string.Format("位置[{0}]生产编码[{1}]获取入库任务失败,反馈结果:[{2}]", param.EquipmentNo, param.ContainerBarCode, reply.ResMessage);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return errorMsg;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取入库任务
|
|
|
/// </summary>
|
|
@@ -1157,6 +1363,24 @@ namespace WCS.PLC
|
|
|
return task;
|
|
|
}
|
|
|
|
|
|
+ private static List<string> TrayList_1 = new List<string>();
|
|
|
+
|
|
|
+ public static WCS_TASK GetWcsExeTask(GetExeTaskParam param)
|
|
|
+ {
|
|
|
+ WCS_TASK task = null;
|
|
|
+ if (TrayList_1.Contains(param.ContainerBarCode))
|
|
|
+ {
|
|
|
+ Log4netHelper.Logger_Info.InfoFormat("托盘[{0}]方法[GetExeTask]调用失败,WMS接口[I_WCS_GetExeTask]调用正在执行中", param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TrayList_1.Add(param.ContainerBarCode);
|
|
|
+ task = GetExeTask(param);
|
|
|
+ TrayList_1.Remove(param.ContainerBarCode);
|
|
|
+ }
|
|
|
+ return task;
|
|
|
+ }
|
|
|
+
|
|
|
private static List<string> AgvTaskNoSet = new List<string>();
|
|
|
|
|
|
/// <summary>
|