core/WCSCore.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
wms/WCSHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
core/WCSCore.cs
@@ -56,8 +56,8 @@ } else { var TN_Task = WCSHelper.GetTask(model.task_no);//根据当前model编号查询任务 if (TN_Task != null) var tN_Task = WCSHelper.GetTask(model.task_no);//根据当前model编号查询任务 if (tN_Task != null) { if (model.state <= 8) { @@ -65,43 +65,43 @@ switch (model.state) { case 1: WCSHelper.Begin(TN_Task, model.forklift_no);//已推送的任务的状态改成执行 WCSHelper.Begin(tN_Task, model.forklift_no);//已推送的任务的状态改成执行 Task task4 = Task.Run(() => { OpenScanCode(model.task_no, model.forklift_no);//开启扫码 }); break; case 3: WCSHelper.UpdateStatus(TN_Task, "开始取货");//任务状态改成开始取货 WCSHelper.UpdateStatus(tN_Task, "开始取货");//任务状态改成开始取货 break; case 4: WCSHelper.UpdateStatus(TN_Task, "取货完成");//任务状态改成取货完成 TaskProcess.OperateStatus(TN_Task, 4);//起点容器货位解绑,解锁起点 WCSHelper.UpdateStatus(tN_Task, "取货完成");//任务状态改成取货完成 TaskProcess.OperateStatus(tN_Task, 4);//起点容器货位解绑,解锁起点 Task task3 = Task.Run(() => { EmptyInStackArea(TN_Task); EmptyInStackArea(tN_Task); }); Task task1 = Task.Run(() => { returnS7Ok(TN_Task); returnS7Ok(tN_Task); }); break; case 5: WCSHelper.UpdateStatus(TN_Task, "开始卸货");//任务状态改成开始卸货 WCSHelper.UpdateStatus(tN_Task, "开始卸货");//任务状态改成开始卸货 break; case 6: WCSHelper.UpdateStatus(TN_Task, "卸货完成");//任务状态改成卸货完成 TaskProcess.OperateStatus(TN_Task, 6);//终点容器货位绑定,解锁终点 WCSHelper.UpdateStatus(tN_Task, "卸货完成");//任务状态改成卸货完成 TaskProcess.OperateStatus(tN_Task, 6);//终点容器货位绑定,解锁终点 Task task2 = Task.Run(() => { if (TN_Task.S_TYPE == "空托出库入线") if (tN_Task.S_TYPE == "空托出库入线") { var ip = Settings.ProductionLines.FirstOrDefault(a => a.PointIn == TN_Task.S_END_LOC).ProductionLine_IP; var ip = Settings.ProductionLines.FirstOrDefault(a => a.PointIn == tN_Task.S_END_LOC).ProductionLine_IP; if (!Settings.S7TestMoni) { S7Helper.WriteBytes(ip, 10, 2, new byte[] { 0, 11, 1 }); @@ -111,110 +111,73 @@ Task task29 = Task.Run(() => { if (TN_Task.S_TYPE == "余料下线入库") if (tN_Task.S_TYPE == "余料下线入库") { SpecHelper.UpdateSurplusDetail(TN_Task.S_CODE); SpecHelper.UpdateSurplusDetail(tN_Task.S_CODE); } }); Task task30 = Task.Run(() => { if (TN_Task.S_TYPE.Contains("回炉")) if (tN_Task.S_TYPE.Contains("回炉")) { SpecHelper.UpdateRemeltDetail(TN_Task.S_CODE); SpecHelper.UpdateRemeltDetail(tN_Task.S_CODE); } }); Task task31 = Task.Run(() => { if (TN_Task.S_TYPE == "满托出库上线") if (tN_Task.S_TYPE == "满托出库上线") { SpecHelper.UpdateComponentDetail(TN_Task.S_CODE); SpecHelper.UpdateComponentDetail(tN_Task.S_CODE); } }); Task task12 = Task.Run(() => { if (TN_Task.S_TYPE == "PDA满托下线入库" || TN_Task.S_TYPE == "PLC满托下线入库") if (tN_Task.S_TYPE == "PDA满托下线入库" || tN_Task.S_TYPE == "PLC满托下线入库") { SpecHelper.UpdateComponentDetail(TN_Task.S_CODE); SpecHelper.UpdateComponentDetail(tN_Task.S_CODE); } }); Task task19 = Task.Run(() => { if (TN_Task.S_END_AREA == Settings.Areas[1]) if (tN_Task.S_END_AREA == Settings.Areas[1]) { SpecHelper.UpdateInventoryM_RuKu(TN_Task.S_CNTR_CODE); SpecHelper.UpdateInventoryM_RuKu(tN_Task.S_CNTR_CODE); } else { LogHelper.Info($"更新WMS库存明细的入库时间跳过,TN_Task.S_END_AREA: {TN_Task.S_END_AREA }不等于 Settings.Areas[1]:{Settings.Areas[1]}"); LogHelper.Info($"更新WMS库存明细的入库时间跳过,TN_Task.S_END_AREA: {tN_Task.S_END_AREA }不等于 Settings.Areas[1]:{Settings.Areas[1]}"); } }); break; case 2: WCSHelper.End(TN_Task);//任务状态改成结束 WCSHelper.End(tN_Task);//任务状态改成结束 break; case 7: Task task10 = Task.Run(() => { if (TN_Task.S_END_AREA == Settings.Areas[1])//终点是满托缓存库区 { TaskProcess.OperateStatus(TN_Task, 7);//异常处理 } else if(TN_Task.S_START_AREA == Settings.Areas[1])//起点是满托缓存库区 { if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4))//未取货完成 { WCSHelper.Fail(TN_Task);//任务状态改成错误 } else { WCSHelper.End(TN_Task);//任务状态改成结束 LocationHelper.BindingLoc(TN_Task.S_END_LOC, TN_Task.S_CNTR_CODE.Split(',').ToList());// 绑定终点容器货位 } LocationHelper.UnLockLoc(TN_Task.S_END_LOC); LocationHelper.UnLockLoc(TN_Task.S_START_LOC);//解锁起点终点 } else { if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4))//未取货完成 { WCSHelper.Fail(TN_Task);//任务状态改成错误 var db = new SqlHelper<object>().GetInstance(); var cginfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == TN_Task.S_CNTR_CODE); if (cginfo != null) { db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == cginfo.S_ID || it.RFID == TN_Task.S_CNTR_CODE).ExecuteCommand(); } else { db.Deleteable<TN_InventoryM>().Where(it => it.RFID == TN_Task.S_CNTR_CODE).ExecuteCommand(); } } else { WCSHelper.End(TN_Task);//任务状态改成结束 LocationHelper.BindingLoc(TN_Task.S_END_LOC, TN_Task.S_CNTR_CODE.Split(',').ToList()); } LocationHelper.UnLockLoc(TN_Task.S_END_LOC); LocationHelper.UnLockLoc(TN_Task.S_START_LOC);//解锁起点终点 } WCSHelper.CancleTaskInfo(tN_Task); }); break; case 8: var res = NDCApi.CancelOrder(TN_Task.S_CODE); var res = NDCApi.CancelOrder(tN_Task.S_CODE); if (res != null && (res.err_code == 50002 || res.err_code == 0)) { LogHelper.Info($"异常和取消操作 请求结果成功{res}"); Task task8 = Task.Run(() => { WCSHelper.CancleTaskInfo(tN_Task); }); } else { wms/WCSHelper.cs
@@ -1,4 +1,6 @@ using HH.WCS.Mobox3.DoubleCoin.util; using HH.WCS.Mobox3.DoubleCoin.models; using HH.WCS.Mobox3.DoubleCoin.process; using HH.WCS.Mobox3.DoubleCoin.util; using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -13,12 +15,12 @@ var date = DateTime.Now.ToString("yyMMdd"); return $"TN{date}{id.ToString().PadLeft(4, '0')}"; } internal static bool UpdateStatus(TN_Task task, string status) internal static bool UpdateStatus(TN_Task task, string status) { var res = false; var db = new SqlHelper<TN_Task>().GetInstance(); task.S_B_STATE = status; res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand()>0; res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand() > 0; return res; } internal static bool UpdateStatus(TN_Task task) { @@ -36,7 +38,7 @@ db.Updateable(task).UpdateColumns(it => new { it.S_EQ_TASK_CODE, it.T_MODIFY }).ExecuteCommand(); return res; } internal static TN_Task GetTask(string no) { var db = new SqlHelper<TN_Task>().GetInstance(); var task = db.Queryable<TN_Task>().Where(a => a.S_CODE == no).First(); @@ -56,7 +58,7 @@ /// <param name="cntrInfo">容器编码</param> /// <param name="spec">物料规格</param> /// <returns></returns> internal static bool CreateTask(string from, string to, string taskType, int pri, string cntrInfo,string spec = "") internal static bool CreateTask(string from, string to, string taskType, int pri, string cntrInfo, string spec = "") { var fromLoc = LocationHelper.GetLocation(from); var endLoc = LocationHelper.GetLocation(to); @@ -95,7 +97,7 @@ } internal static bool CreateTask(string from, string to, string taskType, int pri, string cntrInfo, out string taskNo, string spec = "" ) internal static bool CreateTask(string from, string to, string taskType, int pri, string cntrInfo, out string taskNo, string spec = "") { var fromLoc = LocationHelper.GetLocation(from); var endLoc = LocationHelper.GetLocation(to); @@ -180,12 +182,12 @@ return db.Queryable<TN_Task_Action>().Count(a => a.S_TASK_CODE == no && a.N_ACTION_CODE == code) > 0; } internal static void Begin(TN_Task task, string forklift_no) internal static void Begin(TN_Task task, string forklift_no) { var db = new SqlHelper<TN_Task>().GetInstance(); if (task != null) if (task != null) { if (task.N_B_STATE == 1) if (task.N_B_STATE == 1) { task.N_B_STATE = 2; task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE); @@ -233,6 +235,68 @@ var db = new SqlHelper<object>().GetInstance(); return db.Queryable<TN_Task>().Where(a => a.N_B_STATE == 0 && (a.S_B_STATE == "等待" || a.S_B_STATE == "待推送")).ToList(); } public static void CancleTaskInfo(TN_Task tN_Task) { var HJ = Settings.Areas[1]; if (tN_Task.S_END_AREA == HJ || tN_Task.S_TYPE.Contains("满托下线入库"))//终点是满托缓存库区 { LogHelper.Info($"取消任务: {tN_Task.S_CODE} 终点是满托缓存库区: {tN_Task.S_END_AREA}"); TaskProcess.OperateStatus(tN_Task, 7);//异常处理 } else if (tN_Task.S_START_AREA == HJ || tN_Task.S_TYPE.Contains("满托出库上线"))//起点是满托缓存库区 { LogHelper.Info($"取消任务: {tN_Task.S_CODE} 起点是满托缓存库区: {tN_Task.S_START_AREA}"); if (!WCSHelper.CheckActionRecordExist(tN_Task.S_CODE, 4))//未取货完成 { WCSHelper.Fail(tN_Task);//任务状态改成错误 LogHelper.Info($"取消任务: {tN_Task.S_CODE} 未取货完成,任务状态改成错误"); } else { WCSHelper.End(tN_Task);//任务状态改成结束 LocationHelper.BindingLoc(tN_Task.S_END_LOC, tN_Task.S_CNTR_CODE.Split(',').ToList());// 绑定终点容器货位 LogHelper.Info($"取消任务: {tN_Task.S_CODE} 取货完成,任务状态改成结束,绑定终点容器货位"); } LocationHelper.UnLockLoc(tN_Task.S_END_LOC); LocationHelper.UnLockLoc(tN_Task.S_START_LOC);//解锁起点终点 } else { LogHelper.Info($"取消任务: {tN_Task.S_CODE} 起点终点都不是满托缓存库区: {tN_Task.S_START_AREA} {tN_Task.S_END_AREA}"); if (!WCSHelper.CheckActionRecordExist(tN_Task.S_CODE, 4))//未取货完成 { WCSHelper.Fail(tN_Task);//任务状态改成错误 var db = new SqlHelper<object>().GetInstance(); var cginfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == tN_Task.S_CNTR_CODE); if (cginfo != null) { db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == cginfo.S_ID || it.RFID == tN_Task.S_CNTR_CODE).ExecuteCommand(); } else { db.Deleteable<TN_InventoryM>().Where(it => it.RFID == tN_Task.S_CNTR_CODE).ExecuteCommand(); } LogHelper.Info($"取消任务: {tN_Task.S_CODE} 未取货完成,任务状态改成错误,删除改容器号的所有库存{tN_Task.S_CNTR_CODE}"); } else { WCSHelper.End(tN_Task);//任务状态改成结束 LocationHelper.BindingLoc(tN_Task.S_END_LOC, tN_Task.S_CNTR_CODE.Split(',').ToList()); LogHelper.Info($"取消任务: {tN_Task.S_CODE} 未取货完成,任务状态改成结束,绑定终点容器货位"); } LocationHelper.UnLockLoc(tN_Task.S_END_LOC); LocationHelper.UnLockLoc(tN_Task.S_START_LOC);//解锁起点终点 } } } public class CreateTasks