1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243 |
- using SqlSugar;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using WCS.Data;
- using WCS.Data.Models;
- using WCS.Data.Utils;
- using WCS.PLC.Model.Equipment;
- using static WCS.PLC.Base_Conv;
- using static WCS.WMSWorkflow.ApiParam;
- namespace WCS.PLC
- {
- public class BaseWorkflow
- {
- private static int _putTaskStep = 0;
- #region private Method
- public static void MoveTaskToDis(WCS_TASK task)
- {
- TryCachHelper.TryTranExecute((db) =>
- {
- //添加机械手码垛位置条码信息
- var sysset = Current.SysSets.SingleOrDefault(v => v.SET_TYPE == "PalletizingPos" && v.SET_ID == task.TASK_POSIDTO && task.TASK_POSIDFROM != "1390");
- if (sysset != null)
- {
- string time = DateTime.Now.ToString("yyyyMMddhhmmss");
- db.Updateable<WCS_SYSSET>(it => new WCS_SYSSET()
- {
- SET_MEMO = task.TASK_BOXBARCODE,
- SET_EDITUSERNO = "wcs",
- SET_EDITTIME = time
- })
- .Where(it => it.SET_ID == sysset.SET_ID).ExecuteCommand();
- }
- //移动任务到历史列表
- var task_dis = ExtendsUtil.Mapper<WCS_TASK_DIS, WCS_TASK>(task);
- task_dis.TASK_DELETEUSER = "wcs";
- task_dis.TASK_DELETEDATE = db.GetDate();
- if (db.Insertable(task_dis).ExecuteCommand() <= 0)
- {
- throw new Exception(string.Format("任务[{0}]插入历史列表失败", task_dis.TASK_NO));
- }
- var taskdtlSet = db.Queryable<WCS_TASK_DTL>().Where(v => v.PARENTID == task.TASK_NO).ToList();
- foreach (var taskdtl in taskdtlSet)
- {
- var task_dis_dtl = ExtendsUtil.Mapper<WCS_TASK_DIS_DTL, WCS_TASK_DTL>(taskdtl);
- if (db.Insertable(task_dis_dtl).ExecuteCommand() <= 0)
- {
- throw new Exception(string.Format("任务[{0}]明细插入到历史列表失败", task_dis.TASK_NO));
- }
- if (db.Deleteable(taskdtl).ExecuteCommand() <= 0)
- {
- throw new Exception(string.Format("任务[{0}]明细删除失败", task_dis.TASK_NO));
- }
- }
- //删除当前任务
- if (db.Deleteable(task).ExecuteCommand() <= 0)
- {
- throw new Exception(string.Format("任务[{0}]删除失败", task_dis.TASK_NO));
- }
- });
- }
- public static void MoveAgvTaskToDis(Middle_AGVTask task)
- {
- TryCachHelper.TryTranExecute((db) =>
- {
- //移动任务到历史列表
- var task_dis = ExtendsUtil.Mapper<Middle_AGVTask_Dis, Middle_AGVTask>(task);
- task_dis.Task_FinishDate = db.GetDate();
- if (db.Insertable(task_dis).ExecuteCommand() <= 0)
- {
- throw new Exception(string.Format("任务[{0}]插入历史列表失败", task_dis.Task_Id));
- }
- //删除当前任务
- if (db.Deleteable(task).ExecuteCommand() <= 0)
- {
- throw new Exception(string.Format("任务[{0}]删除失败", task_dis.Task_Id));
- }
- });
- }
- #endregion private Method
- #region public Method
- /// <summary>
- /// 更新任务进程
- /// </summary>
- public static void PutTaskStep()
- {
- if (Interlocked.Exchange(ref _putTaskStep, 1) == 0)
- {
- try
- {
- var tasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_WKSTATUS >= 1).ToList();
- var agvtasks = Current.AgvTaskSet.Where(v => v.Task_WcsStatus == 106 || v.Task_WcsStatus == 99 || v.Task_WcsStatus == 4).ToList();
- if (tasks.Count == 0 && agvtasks.Count == 0) return;
- var tasks_NoFinish = tasks.Where(v => v.TASK_WKSTATUS < 99 && v.TASK_COMTYPE != 6 && (v.TASK_POSIDTO != "1288") && (v.TASK_POSIDTO != "1293")).ToList();
- if (tasks_NoFinish.Count > 0)
- {
- var PutTaskStepList = Current.WmsInterface.I_WCS_PutTaskStep(tasks_NoFinish);
- foreach (var item in PutTaskStepList)
- {
- var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
- if (!item.ResType)
- {
- string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
- LogMessageHelper.RecordLogMessage(msg);
- }
- }
- }
- var tasks_Finish = tasks.Where(v => v.TASK_WKSTATUS >= 99 && (v.TASK_POSIDTO != "1508") && (v.TASK_POSIDTO != "1509") && (v.TASK_POSIDTO != "1288") && (v.TASK_POSIDTO != "1293")).ToList();
- if (tasks_Finish.Count > 0)
- {
- var PutTaskStepList_finish = Current.WmsInterface.I_WCS_PutTaskStep(tasks_Finish);
- foreach (var item in PutTaskStepList_finish)
- {
- var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
- if (item.ResType)
- {
- if (task.TASK_WKSTATUS >= 99)
- {
- MoveTaskToDis(task);
- }
- }
- else
- {
- string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
- LogMessageHelper.RecordLogMessage(msg);
- }
- }
- }
- var task_Finish2 = tasks.FirstOrDefault(v => v.TASK_WKSTATUS >= 99 && v.TASK_POSIDTO == "1508");
- if (task_Finish2 != null)
- {
- var tasks_Finishs = new List<WCS_TASK>();
- tasks_Finishs.Add(task_Finish2);
- var PutTaskStepList_finish = Current.WmsInterface.I_WCS_PutTaskStep(tasks_Finishs);
- foreach (var item in PutTaskStepList_finish)
- {
- var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
- if (item.ResType)
- {
- if (task.TASK_WKSTATUS >= 99)
- {
- if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == task_Finish2.TASK_BOXBARCODE && v.TASK_COMTYPE == 1))
- {
- MoveTaskToDis(task);
- }
- }
- }
- else
- {
- string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
- LogMessageHelper.RecordLogMessage(msg);
- }
- }
- }
- var task_Finish3 = tasks.FirstOrDefault(v => v.TASK_WKSTATUS >= 99 && v.TASK_POSIDTO == "1509");
- if (task_Finish3 != null)
- {
- var tasks_F = new List<WCS_TASK>();
- tasks_F.Add(task_Finish3);
- var PutTaskStepList_finish = Current.WmsInterface.I_WCS_PutTaskStep(tasks_F);
- foreach (var item in PutTaskStepList_finish)
- {
- var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
- if (item.ResType)
- {
- if (task.TASK_WKSTATUS >= 99)
- {
- if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == task_Finish3.TASK_BOXBARCODE && v.TASK_COMTYPE == 1))
- {
- MoveTaskToDis(task);
- }
- }
- }
- else
- {
- string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
- LogMessageHelper.RecordLogMessage(msg);
- }
- }
- }
- var tasks_Exception = tasks.Where(v => v.TASK_WKSTATUS >= 99 && (v.TASK_COMTYPE == 6 || v.TASK_POSIDTO == "1288" || v.TASK_POSIDTO == "1293")).ToList();
- foreach (var item in tasks_Exception)
- {
- MoveTaskToDis(item);
- }
- foreach (var item in agvtasks)
- {
- if (item.Task_WcsStatus == 99 || item.Task_WcsStatus == 4)
- {
- //if (item.Task_Type == 3 || (item.Task_Type == 1 && (item.Task_WorkshopNo == "18" || item.Task_WorkshopNo == "4" || item.Task_WorkshopNo == "5")))
- if (item.Task_Type == 3 || (item.Task_Type == 1 && item.Task_WorkshopNo == "18"))
- {
- var wcstask = Current.TaskSet.SingleOrDefault(v => v.TASK_ITEM8 == item.Task_Id.ToString());
- if (wcstask == null || wcstask.TASK_WKSTATUS >= 99)
- {
- if (item.Task_WcsStatus == 99) MoveAgvTaskToDis(item);//任务完成
- continue;
- }
- wcstask.TASK_WKSTATUS = 99;
- wcstask.TASK_EDITUSERNO = "wcs";
- wcstask.TASK_EDITDATETIME = DateTime.Now;
- int updateresult = SugarBase.DB.Updateable(wcstask)
- .UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME })
- .ExecuteCommand();
- if (updateresult <= 0)
- {
- LogMessageHelper.RecordLogMessage(string.Format("空熟化架呼叫AGV任务[{0}]已完成,完成WCS任务[{1}]失败。", item.Task_Id, wcstask.TASK_NO));
- continue;
- }
- else
- {
- if (item.Task_WcsStatus == 99) MoveAgvTaskToDis(item);//任务完成
- }
- }
- else if (item.Task_Type == 1 || item.Task_Type == 2 || item.Task_Type == 4)
- {
- if (item.Task_WcsStatus == 99) MoveAgvTaskToDis(item);//任务完成
- }
- }
- else if (item.Task_WcsStatus == 106 && item.Task_AgvStatus == 106)
- {
- MoveAgvTaskToDis(item);//任务完成
- }
- }
- }
- catch (Exception ex)
- {
- LogMessageHelper.RecordLogMessage(ex);
- }
- finally
- {
- Interlocked.Exchange(ref _putTaskStep, 0);
- }
- }
- }
- public static WCS_TASK GetInTask(GetInTaskParam 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_GetInTask(param);
- string errormsg = CheckGetInTask(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));
- }
- if (param.EquipmentNo == "1109" || param.EquipmentNo == "1114" || param.EquipmentNo == "1102" || param.EquipmentNo == "1094")
- {
- wcstask.TASK_MatureType = reply.TASK_MatureType;
- wcstask.TASK_MatureTemperat = reply.TASK_MatureTemperat;
- wcstask.TASK_MatureDate = reply.TASK_MatureDate;
- }
- 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;
- }
- public static bool WCS_GetOutTask(GetOutTaskParam param)
- {
- bool result = false;
- WCS_TASK wcstask = null;
- try
- {
- var reply = Current.WmsInterface.I_WCS_GetOutTask(param);
- if (reply.ResType)
- {
- if (!string.IsNullOrWhiteSpace(param.Memo1))
- {
- if (param.Memo1.Trim() == "1")
- {
- var agvtask = Current.AgvTaskSet.FirstOrDefault(v => v.Task_Id.ToString() == param.OutId);
- if (agvtask != null)
- {
- DateTime dt = SugarBase.DB.GetDate();
- int task_id = Convert.ToInt32(param.OutId);
- SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
- {
- Task_WcsStatus = 5,
- Task_UpdateUser = "wcs",
- Task_UpdateDate = dt
- })
- .Where(it => it.Task_Id == task_id).ExecuteCommand();
- }
- result = true;
- return result;
- }
- }
- if (string.IsNullOrWhiteSpace(reply.WMSTaskNum))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务反馈WMS任务号不能为空。", param.OutEndPostion));
- }
- if (reply.TaskType <= 0)
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务反馈任务类型必须大于零。", param.OutEndPostion));
- }
- if (string.IsNullOrWhiteSpace(reply.OutWareCellNo))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务反馈出库位置不能为空。", param.OutEndPostion));
- }
- if (string.IsNullOrWhiteSpace(reply.WareHouseName))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务反馈仓库不能为空。", param.OutEndPostion));
- }
- if (string.IsNullOrWhiteSpace(reply.ContainerBarCode))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务反馈条码编号不能为空。", param.OutEndPostion));
- }
- if (reply.TaskType == 2 && string.IsNullOrWhiteSpace(reply.TunnelNum))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务反馈巷道号不能为空。", param.OutEndPostion));
- }
- if (reply.TASK_STACKINGTYPE <= 0 && (param.OutEndPostion == "1251" || param.OutEndPostion == "1261" || param.OutEndPostion == "1226" || param.OutEndPostion == "1234" || param.OutEndPostion == "1257" || param.OutEndPostion == "1252" || param.OutEndPostion == "1231" || param.OutEndPostion == "1258" || param.OutEndPostion == "1278" || param.OutEndPostion == "1283"))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务[1]垛型存在问题,传递值必须大于零。", param.OutEndPostion, reply.WMSTaskNum));
- }
- if (string.IsNullOrWhiteSpace(reply.PalletizingBoxSize) && Convert.ToInt32(reply.PalletizingBoxSize) <= 0 && (param.OutEndPostion == "1251" || param.OutEndPostion == "1261" || param.OutEndPostion == "1226" || param.OutEndPostion == "1234" || param.OutEndPostion == "1257" || param.OutEndPostion == "1252" || param.OutEndPostion == "1231" || param.OutEndPostion == "1258" || param.OutEndPostion == "1278" || param.OutEndPostion == "1283"))
- {
- throw new Exception(string.Format("工位[{0}]申请出库任务[1]箱子尺寸存在问题,传递值必须大于零。", param.OutEndPostion, reply.WMSTaskNum));
- }
- var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_WMSNO == reply.WMSTaskNum);
- if (task == null)
- {
- var agvtask = Current.AgvTaskSet.FirstOrDefault(v => v.Task_Id.ToString() == param.OutId);
- string msg = TryCachHelper.TryTranExecute((db) =>
- {
- if (agvtask != null)
- {
- DateTime dt = db.GetDate();
- int task_id = Convert.ToInt32(param.OutId);
- db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
- {
- Task_WcsStatus = 5,
- Task_UpdateUser = "wcs",
- Task_UpdateDate = dt
- })
- .Where(it => it.Task_Id == task_id).ExecuteCommand();
- }
- //添加wcs任务
- wcstask = new WCS_TASK();
- wcstask.TASK_WMSNO = reply.WMSTaskNum;
- wcstask.TASK_COMTYPE = reply.TaskType;
- wcstask.TASK_SYSTYPE = "WMS";
- wcstask.TASK_POSIDFROM = reply.OutWareCellNo;//起点地址
- wcstask.TASK_POSIDCUR = reply.OutWareCellNo;
- wcstask.TASK_POSIDNEXT = reply.OutWareCellNo;
- 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 = reply.ContainerBarCode;
- wcstask.TASK_POSIDTO = param.OutEndPostion;
- wcstask.TASK_PRIORITY = reply.Priority;
- wcstask.TASK_ITEM8 = param.OutId;
- wcstask.TASK_ITEM9 = reply.Memo4;
- wcstask.TASK_ITEM10 = reply.Memo5;
- wcstask.PalletizingSonTraySize = reply.PalletizingSonTraySize;
- wcstask.PalletizingBoxSize = reply.PalletizingBoxSize;
- wcstask.SonTrayColorNo = reply.SonTrayColorNo;
- wcstask.TASK_MatureDate = reply.MatureDateLength;
- wcstask.TASK_WEIGHT = reply.TASK_WEIGHT;
- wcstask.TASK_STACKINGTYPE = reply.TASK_STACKINGTYPE;
- if (param.TASK_MatureDate == 12 && wcstask.TASK_MatureDate == 48)
- {
- wcstask.MatureNum = 4;
- }
- else
- {
- wcstask.MatureNum = 1;
- }
- if (wcstask.TASK_BOXBARCODE.Substring(0, 2) == "SH")
- {
- wcstask.TASK_ITEM2 = "2";
- }
- else if (wcstask.TASK_BOXBARCODE.Substring(0, 3) == "TPC")
- {
- wcstask.TASK_ITEM2 = "1";
- }
- else
- {
- wcstask.TASK_ITEM2 = "3";
- }
- if (string.IsNullOrWhiteSpace(reply.TunnelNum))
- {
- //wcstask.TASK_SRMNO = reply.EndPostion;
- }
- else
- {
- wcstask.TASK_FromTunnelNum = reply.TunnelNum;
- wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_TYPE;
- }
- int id = db.Insertable(wcstask).ExecuteReturnIdentity();
- if (id <= 0)
- {
- throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
- }
- });
- if (string.IsNullOrWhiteSpace(msg))
- {
- result = true;
- }
- else
- {
- throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败,消息[{1}]", reply.WMSTaskNum, msg));
- }
- }
- //var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_WMSNO == reply.WMSTaskNum);
- //if (task == null)
- //{
- // //添加wcs任务
- // wcstask = new WCS_TASK();
- // wcstask.TASK_WMSNO = reply.WMSTaskNum;
- // wcstask.TASK_COMTYPE = reply.TaskType;
- // wcstask.TASK_SYSTYPE = "WMS";
- // wcstask.TASK_POSIDFROM = reply.OutWareCellNo;//起点地址
- // wcstask.TASK_POSIDCUR = reply.OutWareCellNo;
- // wcstask.TASK_POSIDNEXT = reply.OutWareCellNo;
- // 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 = reply.ContainerBarCode;
- // wcstask.TASK_POSIDTO = param.OutEndPostion;
- // wcstask.TASK_PRIORITY = reply.Priority;
- // wcstask.TASK_ITEM8 = param.OutId;
- // wcstask.TASK_ITEM9 = reply.Memo4;
- // wcstask.TASK_ITEM10 = reply.Memo5;
- // if (wcstask.TASK_BOXBARCODE.Substring(0, 2) == "SH")
- // {
- // wcstask.TASK_ITEM2 = "2";
- // }
- // else if (wcstask.TASK_BOXBARCODE.Substring(0, 3) == "TPC")
- // {
- // wcstask.TASK_ITEM2 = "1";
- // }
- // else
- // {
- // wcstask.TASK_ITEM2 = "3";
- // }
- // if (string.IsNullOrWhiteSpace(reply.TunnelNum))
- // {
- // //wcstask.TASK_SRMNO = reply.EndPostion;
- // }
- // else
- // {
- // wcstask.TASK_FromTunnelNum = reply.TunnelNum;
- // wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_TYPE;
- // }
- // int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
- // if (id <= 0)
- // {
- // throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
- // }
- // else
- // {
- // result = true;
- // }
- //}
- }
- else
- {
- var msg = string.Format("目标位置[{0}]获取出库任务失败,原因:[{1}]", param.OutEndPostion, reply.ResMessage);
- throw new Exception(msg);
- }
- }
- catch (Exception ex)
- {
- AddLedErrorMsg(param.OutEndPostion, ex.Message, 0);
- LogMessageHelper.RecordLogMessage(ex);
- }
- return result;
- }
- private static string CheckGetInTask(GetInTaskParam param, GetInTaskReply 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>
- /// <param name="param"></param>
- public static WCS_TASK GetInTask_2(GetInTaskParam param)
- {
- WCS_TASK wcstask = null;
- try
- {
- if (!string.IsNullOrWhiteSpace(param.ContainerBarCode))
- {
- wcstask = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == param.ContainerBarCode);
- }
- if (wcstask == null)
- {
- var reply = Current.WmsInterface.I_WCS_GetInTask(param);
- if (reply.ResType)
- {
- if (string.IsNullOrWhiteSpace(reply.EndPostion))
- {
- throw new Exception(string.Format("托盘[{0}]调用WMS入库接口返回成功,但是没有返回目标地址。", reply.EndPostion));
- }
- //添加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;
- if (string.IsNullOrWhiteSpace(param.Memo1))
- {
- wcstask.TASK_POSIDTO = reply.EndPostion;
- wcstask.TASK_SRMNO = reply.EndPostion;
- }
- else if (param.Memo1.Trim() == "1")
- {
- if (string.IsNullOrWhiteSpace(reply.TunnelNum) || reply.TunnelNum.Trim() == "0")
- {
- throw new Exception(string.Format("托盘[{0}]申请入库没有分配巷道,生成WCS任务失败。", param.ContainerBarCode));
- }
- else
- {
- string srmno = string.Empty;
- wcstask.TASK_EndTunnelNum = ConveyorHelper.QueryTunnel(wcstask.TASK_WMSNO, param.EquipmentNo, out srmno);
- wcstask.TASK_POSIDTO = wcstask.TASK_EndTunnelNum;
- 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
- {
- string msg = string.Format("位置[{0}]条码[{1}]获取入库任务失败,反馈结果:[{2}]", param.EquipmentNo, param.ContainerBarCode, reply.ResMessage);
- LogMessageHelper.RecordLogMessage(msg);
- }
- }
- }
- catch (Exception ex)
- {
- //ThreadHelper.TaskThread(UploadExcTask, new { EquipmentNo = param.EquipmentNo, Alaram = ex.Message });
- LogMessageHelper.RecordLogMessage(ex);
- }
- return wcstask;
- }
- /// <summary>
- /// 上传设备异常信息
- /// </summary>
- //public static void UploadExcTask(UploadExcTaskParam param)
- //{
- // try
- // {
- // Log4netHelper.Logger_Info.InfoFormat(string.Format("开始:输送线[{0}]报警信息[{1}]上传WMS。", param.EquipmentNo, param.ExcMessage));
- // var reply = Current.WmsInterface.I_WCS_UploadExcTask(param);
- // if (reply.ResType)
- // {
- // Log4netHelper.Logger_Info.InfoFormat(string.Format("成功:输送线[{0}]报警信息[{1}]上传WMS。", param.EquipmentNo, param.ExcMessage));
- // }
- // else
- // {
- // throw new Exception(string.Format("失败:输送线[{0}]报警信息[{1}]上传WMS。原因:[{2}]", param.EquipmentNo, param.ExcMessage, reply.ResMessage));
- // }
- // }
- // catch (Exception ex)
- // {
- // Log4netHelper.Logger_Error.ErrorFormat(ex.ToString());
- // }
- // finally
- // {
- // Log4netHelper.Logger_Info.InfoFormat(string.Format("结束:输送线[{0}]报警信息[{1}]上传WMS。", param.EquipmentNo, param.ExcMessage));
- // }
- //}
- /// <summary>
- /// 添加异常信息
- /// </summary>
- /// <param name="db"></param>
- /// <param name="equipmentNo"></param>
- /// <param name="alaram"></param>
- /// <param name="task_no"></param>
- public static void AddLedErrorMsg(SqlSugarClient db, string equipmentNo, string alaram, int task_no, int alaramCount = 10)
- {
- int wmstask_no = 0;
- var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
- if (task != null)
- {
- wmstask_no = Convert.ToInt32(task.TASK_WMSNO);
- }
- CommonData.AddLedErrorMsg(db, equipmentNo, alaram, task_no, wmstask_no, alaramCount);
- }
- /// <summary>
- /// 添加异常信息
- /// </summary>
- /// <param name="db"></param>
- /// <param name="equipmentNo"></param>
- /// <param name="alaram"></param>
- /// <param name="task_no"></param>
- public static void AddLedErrorMsg(string equipmentNo, string alaram, int task_no)
- {
- int wmstask_no = 0;
- var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == task_no);
- if (task != null)
- {
- wmstask_no = Convert.ToInt32(task.TASK_WMSNO);
- }
- TryCachHelper.TryExecute((db) =>
- {
- CommonData.AddLedErrorMsg(db, equipmentNo, alaram, task_no, wmstask_no);
- });
- }
- private static int _upLoadExcToWMS = 0;
- /// <summary>
- /// 上传设备异常信息
- /// </summary>
- public static void UpLoadExcToWMS()
- {
- if (Interlocked.Exchange(ref _upLoadExcToWMS, 1) == 0)
- {
- string result = TryCachHelper.TryExecute((db) =>
- {
- var ExcMsg = db.Queryable<WCS_LEDALARMSMSG>().First(v => v.LED_ISUPLOADWMSFINISH == false);
- if (ExcMsg != null)
- {
- var param = new UploadExcTaskParam();
- param.OutId = ExcMsg.LED_ID;
- param.EquipmentNo = ExcMsg.LED_CONVYORNO;
- param.WCSTaskNum = ExcMsg.LED_WCSTASK_NO.ToString();
- param.WMSTaskNum = ExcMsg.LED_WMSTASK_NO.ToString();
- param.ExcCode = ExcMsg.LED_ALARMSMSG;
- param.ExcMessage = ExcMsg.LED_ALARMSMSG;
- var reply = Current.WmsInterface.I_WCS_UploadExcTask(param);
- if (reply.ResType)
- {
- //修改上传完成
- db.Updateable<WCS_LEDALARMSMSG>(it => new WCS_LEDALARMSMSG() { LED_ISUPLOADWMSFINISH = true, LED_UPDATETIME = DateTime.Now })
- .Where(it => it.LED_ID == ExcMsg.LED_ID)
- .ExecuteCommand();
- }
- }
- });
- Interlocked.Exchange(ref _upLoadExcToWMS, 0);
- }
- }
- private static int _putDevInfoToWMS = 0;
- /// <summary>
- /// 上传设PLC备信息
- /// </summary>
- public static void PutDevInfoToWMS()
- {
- if (Interlocked.Exchange(ref _putDevInfoToWMS, 1) == 0)
- {
- Thread.Sleep(2000);
- string result = TryCachHelper.TryTranExecute((db) =>
- {
- List<PutDevInfoParam> DevList = new List<PutDevInfoParam>();
- //var EquState = db.Queryable<WCS_EQUIPMENTINFO>().Where(v => v.Equ_Type == "srm").ToList();
- var EquState = Current.PlcSet.Where(v => v.PLC_EQUIPMENTTYPE == "srm" && v.PLC_WCSSYSTEM == Current.WcsSystem).ToList();
- foreach (var item in EquState)
- {
- var srmState = item.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.PLC_NAME);
- var param = new PutDevInfoParam();
- param.STA_EQUIPMENTNO = item.PLC_NAME;
- if (!string.IsNullOrWhiteSpace(srmState.EquSignal_Srm.SrmFault))
- {
- param.STA_ALARMS = string.Format("设备[{0}][{1}]", item.PLC_NAME, srmState.EquSignal_Srm.SrmFault);
- param.STA_ALARMSMSG = string.Format("设备[{0}][{1}]", item.PLC_NAME, srmState.EquSignal_Srm.SrmFault);
- }
- param.STA_DATA = srmState.EquSignal_Srm.ToJson();
- DevList.Add(param);
- }
- var convStatue = Current.PlcSet.Where(v => v.PLC_EQUIPMENTTYPE != "srm" && v.PLC_WCSSYSTEM == Current.WcsSystem).ToList();
- foreach (var item in convStatue)
- {
- foreach (var equinfo in item.WCS_EquipmentInfoSet)
- {
- var param = new PutDevInfoParam();
- if (equinfo.Equ_Type == EquipmentType.conveyor.ToString())
- {
- param.STA_EQUIPMENTNO = equinfo.Equ_No;
- string alarms = equinfo.EquSignal_Conv.ConvFault.ToString();
- if (string.IsNullOrWhiteSpace(alarms) == false && alarms != "0")
- {
- param.STA_ALARMS = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarms);
- param.STA_ALARMSMSG = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarms);
- }
- }
- else if (equinfo.Equ_Type == EquipmentType.rgv.ToString())
- {
- param.STA_EQUIPMENTNO = equinfo.Equ_No;
- string alarmagv = equinfo.EquSignal_Rgv.AlarmFault;
- if (string.IsNullOrWhiteSpace(alarmagv) == false && alarmagv != "0")
- {
- param.STA_ALARMS = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarmagv);
- param.STA_ALARMSMSG = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarmagv);
- }
- }
- DevList.Add(param);
- }
- }
- var reply = Current.WmsInterface.I_WCS_PutDevInfo(DevList);
- string resMessage = "接口返回Null";
- if (reply != null) resMessage = reply.ResMessage;
- if (reply == null || reply.ResType == false)
- {
- LogMessageHelper.RecordLogMessage(string.Format("上传设备PLC信息失败,原因:[{0}]。", resMessage));
- }
- });
- Interlocked.Exchange(ref _putDevInfoToWMS, 0);
- }
- }
- /// <summary>
- /// 熟化开始结束时间上传
- /// </summary>
- /// <param name="param"></param>
- /// <returns></returns>
- public static bool GetMatureContinueMode(GetMatureContinueParam param)
- {
- bool result = false;
- try
- {
- var reply = Current.WmsInterface.I_WCS_GetMatureContinueMode(param);
- if (!reply.ResType)
- {
- string error = string.Format("熟化房[{0}]上传失败,原因:[{1}]", param.MatureRoomNo, reply.ResMessage);
- throw new Exception(error);
- }
- else
- {
- #region tion
- //var converywrite = new WCSWriteToConveyorSignal();
- //converywrite.Plc = plc.Plc;
- //converywrite.DBName = plc.WriteDBName;
- //converywrite.ConveyorNo = convNo;
- //converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
- //if (judge == 1)//写入开始确认信号
- //{
- // converywrite.Confirm = true;
- //}
- //else if (judge == 2)//写入结束确认信号
- //{
- // converywrite.TaskDelete = true;
- //}
- //WriteTaskToBuffer(converywrite);
- #endregion
- result = true;
- }
- }
- catch (Exception ex)
- {
- result = false;
- LogMessageHelper.RecordLogMessage(ex.Message, ex);
- }
- return result;
- }
- private static bool WriteTaskToBuffer(WCSWriteToConveyorSignal conv)
- {
- List<byte> list = new List<byte>();
- //写入任务号
- list.AddRange(ExtendsUtil.UintToByte((uint)conv.Tasknum).ToList());
- //var codes = Encoding.UTF8.GetBytes(conv.Goodscode);
- //货物条码
- list.AddRange(ExtendsUtil.UintToByte((uint)conv.Goodscode).ToList());
- //货物类型
- list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodstype).ToList());
- //货位尺寸
- list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodssize).ToList());
- //写入起点地址
- list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodsstart).ToList());
- //写入目标地址
- list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodsend).ToList());
- BitArray bit16 = new BitArray(16);
- bit16[9] = conv.Confirm;
- if (conv.Remark == conv.Goodsend.ToString())
- {
- bit16[0] = conv.TrayColor_Three;
- bit16[14] = conv.TrayColor_One;
- bit16[15] = conv.TrayColor_Two;
- }
- bit16[5] = conv.UpMatRequest;
- bit16[6] = conv.Res01;
- bit16[7] = conv.Res02;
- bit16[10] = conv.TaskDelete;//删除任务
- bit16[11] = conv.Notask;
- int BitInfo = ExtendsUtil.BitToInt(bit16);
- list.AddRange(ExtendsUtil.UshortToByte((ushort)BitInfo).ToList());
- if (conv.TASK_WEIGHT > 0)//1390获取重量值
- {
- list.AddRange(ExtendsUtil.UintToByte((uint)conv.TASK_WEIGHT).ToList());
- }
- else
- {
- list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Res03).ToList());
- }
- if (conv.Plc.Write((ushort)conv.DBName, (ushort)(conv.WriteStartAddress), list.ToArray()))
- {
- Log4netHelper.Logger_Info.InfoFormat(string.Format("输送机[{0}]写入任务[{1}]信息成功。", conv.Goodsstart, conv.Tasknum));
- return true;
- }
- else
- {
- throw new Exception(string.Format("输送机[{0}]写入任务[{1}]信息失败。", conv.Goodsstart, conv.Tasknum));
- }
- }
- /// <summary>
- /// 称重上传
- /// </summary>
- /// <param name="param"></param>
- public static bool GetWeight(GetWeightParam param)
- {
- bool result = true;
- try
- {
- var reply = Current.WmsInterface.I_WCS_GetWeight(param);
- var task = Current.TaskSet.FirstOrDefault(v => v.TASK_WMSNO == param.WMSTaskNum);
- //修改任务,添加重量
- string resultmsg = TryCachHelper.TryTranExecute((db) =>
- {
- db.Updateable<WCS_TASK>(it => new WCS_TASK()
- {
- TASK_GrossWeight = param.Weight
- }).Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
- string msg = string.Format("称重任务[{0}]已称重,重量[{1}]克。", task.TASK_NO, param.Weight);
- CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, msg);
- });
- if (!string.IsNullOrWhiteSpace(resultmsg))
- {
- throw new Exception(resultmsg);
- }
- if (!reply.ResType)
- {
- string error = string.Format("任务[{0}]重量[{1}]上传失败,原因:[{2}]", param.WMSTaskNum, param.Weight, reply.ResMessage);
- throw new Exception(error);
- }
- }
- catch (Exception ex)
- {
- result = false;
- LogMessageHelper.RecordLogMessage(ex.Message, ex);
- }
- return result;
- }
- #region WMS接口调用
- private static List<int> AssignSrmTaskNoSet = new List<int>();
- public static void AssignSrm(WCS_TASK task)
- {
- if (AssignSrmTaskNoSet.Contains(task.TASK_NO))
- {
- Log4netHelper.Logger_Info.InfoFormat("任务[{0}]方法[AssignSrm]调用失败,WMS接口[I_WCS_GetTunnelList]调用正在执行中", task.TASK_NO);
- }
- else
- {
- AssignSrmTaskNoSet.Add(task.TASK_NO);
- ConveyorHelper.AssignSrm(task);
- AssignSrmTaskNoSet.Remove(task.TASK_NO);
- }
- }
- private static List<int> PreparatoryAssignSrmTaskNoSet = new List<int>();
- public static void PreparatoryAssignSrmTunnel(WCS_TASK task)
- {
- if (PreparatoryAssignSrmTaskNoSet.Contains(task.TASK_NO))
- {
- Log4netHelper.Logger_Info.InfoFormat("任务[{0}]方法[AssignSrm]调用失败,WMS接口[I_WCS_GetTunnelList]调用正在执行中", task.TASK_NO);
- }
- else
- {
- PreparatoryAssignSrmTaskNoSet.Add(task.TASK_NO);
- ConveyorHelper.PreparatoryAssignSrmTunnel(task);
- PreparatoryAssignSrmTaskNoSet.Remove(task.TASK_NO);
- }
- }
- private static List<string> TrayList = new List<string>();
- public static WCS_TASK GetWcsInTask(GetInTaskParam param)
- {
- WCS_TASK task = null;
- if (TrayList.Contains(param.ContainerBarCode))
- {
- Log4netHelper.Logger_Info.InfoFormat("托盘[{0}]方法[GetInTask]调用失败,WMS接口[I_WCS_GetInTask]调用正在执行中", param.ContainerBarCode);
- }
- else
- {
- TrayList.Add(param.ContainerBarCode);
- task = GetInTask(param);
- TrayList.Remove(param.ContainerBarCode);
- }
- return task;
- }
- private static List<string> AgvTaskNoSet = new List<string>();
- /// <summary>
- /// 获取出库任务
- /// </summary>
- /// <param name="param"></param>
- public static void GetOutTask(GetOutTaskParam param)
- {
- if (AgvTaskNoSet.Contains(param.OutId))
- {
- Log4netHelper.Logger_Info.InfoFormat("呼叫位置[{0}]方法[GetOutTask]调用失败,WMS接口[I_WCS_GetOutTask]调用正在执行中", param.OutEndPostion);
- }
- else
- {
- AgvTaskNoSet.Add(param.OutId);
- WCS_GetOutTask(param);
- AgvTaskNoSet.Remove(param.OutId);
- }
- }
- private static List<string> GetWeightSet = new List<string>();
- public static void ProInGetWeight(GetWeightParam param)
- {
- if (GetWeightSet.Contains(param.WMSTaskNum))
- {
- Log4netHelper.Logger_Info.InfoFormat("任务[{0}]调用方法[GetWeight]调用失败,WMS接口[I_WCS_GetWeight]调用正在执行中", param.WMSTaskNum);
- }
- else
- {
- GetWeightSet.Add(param.WMSTaskNum);
- GetWeight(param);
- GetWeightSet.Remove(param.WMSTaskNum);
- }
- }
- #endregion WMS接口调用
- private static int _putUpdateUnexecuteTask = 0;
- /// <summary>
- /// 更新未执行任务
- /// </summary>
- public static void UpdateUnexecuteTask()
- {
- if (Interlocked.Exchange(ref _putUpdateUnexecuteTask, 1) == 0)
- {
- Thread.Sleep(90000);
- try
- {
- TryCachHelper.TryExecute((db) =>
- {
- //更新每台堆垛机未执行任务数量
- var srmName = db.Queryable<WCS_PLC>().Where(v => v.PLC_EQUIPMENTTYPE == "srm").ToList();
- foreach (var item in srmName)
- {
- var taskSRMCount = db.Queryable<WCS_TASK>().Where(v => (v.TASK_WKSTATUS == 0 || v.TASK_WKSTATUS == 1 || v.TASK_WKSTATUS == 5) && v.TASK_SRMNO == item.PLC_NAME).ToList();
- //更新未执行任务数量
- db.Updateable<WCS_PLC>(it => new WCS_PLC() { PLC_UNEXECUTETASK = taskSRMCount.Count }).Where(it => it.PLC_NAME == item.PLC_NAME).ExecuteCommand();
- }
- var rgvName = db.Queryable<WCS_PLC>().Where(v => v.PLC_EQUIPMENTTYPE == "rgv").ToList();
- foreach (var item in rgvName)
- {
- var OutInMat = db.Queryable<WCS_RGVOutInInfo>().Where(v => v.RGVOUTIN_RGVNO == item.PLC_NAME && (v.RGVOUTIN_OUTINTYPE == "OnMat" || v.RGVOUTIN_OUTINTYPE == "OnUpMat")).Select(v => v.RGVOUTIN_CONVNO).ToList();
- var taskRGVCount = db.Queryable<WCS_TASK>().Where(v => (OutInMat.Contains(v.TASK_POSIDCUR) && v.TASK_POSIDCUR == v.TASK_POSIDNEXT) || (v.TASK_WKSTATUS == 7 && v.TASK_RGVNO == item.PLC_NAME)).ToList();
- db.Updateable<WCS_PLC>(it => new WCS_PLC() { PLC_UNEXECUTETASK = taskRGVCount.Count }).Where(it => it.PLC_NAME == item.PLC_NAME).ExecuteCommand();
- }
- });
- }
- catch (Exception ex)
- {
- LogMessageHelper.RecordLogMessage(ex);
- }
- finally
- {
- Interlocked.Exchange(ref _putUpdateUnexecuteTask, 0);
- }
- }
- }
- #endregion public Method
- }
- }
|