using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using yunneiWCS.Common; using yunneiWCS.data; using yunneiWCS.DataAccess; using yunneiWCS.EnumDefine; using yunneiWCS.ORM; using yunneiWCS.SystemInteraction.tianyong; namespace yunneiWCS.ExtendFunction { /// /// 一些任务的处理类 /// public class TaskHelper { /// /// 下发旁路工位的任务 /// /// /// /// public static bool IssueTaskForPangLuGongWei(int taskId, string midStorePosition, ref string errMsg) { using (dbmodel mod = new dbmodel()) { //判断输送线站点是否有任务占用 var isStationHasDoingTaskResult = MyExtendHelper.IsStationHasDoingTask(mod, midStorePosition); if (isStationHasDoingTaskResult.result == false) { errMsg = isStationHasDoingTaskResult.resMsg; return false; } var task = mod.task.Where(x => x.taskId == taskId).FirstOrDefault(); if (task == null) { errMsg = "没有找到任务"; return false; } if (task.taskStatus != (int)taskStatus.新建) { errMsg = "任务状态不是新建状态,不允许操作"; return false; } if (task.taskType != (int)taskType.旁路工位缸体空托回库 && task.taskType != (int)taskType.旁路工位缸体余料回库) { errMsg = "任务类型不是旁路工位缸体空托回库或旁路工位缸体余料回库,不允许操作"; return false; } //更新状态为 未下发 task.middlePlace = midStorePosition; task.taskStatus = (int)taskStatus.未下发; task.remark = "未下发"; task.LastModifyTime = DateTime.Now; var res = mod.SaveChanges(); if (res > 0) { return true; } else { errMsg = "更新任务状态失败"; return false; } } } /// /// 处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理 /// /// /// /// 输送线站点 /// public static void sendTaskForHasIssuedFor呼叫空托And缸体上线And缸盖上线(dbmodel mod, task item, string convPlace, string tasktype) { #region 清空库存更新状态 item.taskStatus = (int)taskStatus.完成; item.remark = "完成"; //mod.SaveChanges(); //agvSendStatus[0] = DateTime.Now.ToString("dd日HH:mm:ss") + "发送成功,任务ID:" + item.taskId; //库存位 position sourcePosition = mod.position.FirstOrDefault(x => x.positionName == item.sourcePlace); //上下线站点位 //解锁输送线 position convs = mod.position.FirstOrDefault(x => x.positionName == convPlace); //convs.isLock = false; PositionHandler.Lock(false, convs, "处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理", SysGloble.WCSNAME, item); if (sourcePosition != null) { #region 清空库位 productStock stock = mod.productStock.FirstOrDefault(x => x.positionId == sourcePosition.positionId); if (stock != null) { if (item.taskType == (int)taskType.缸体上线 || item.taskType == (int)taskType.缸盖上线 )//上线就把数据放到上线站点上 { position positionStation = mod.position.FirstOrDefault(x => x.positionName == item.toPlace); if (positionStation != null) { stock.positionId = positionStation.positionId; stock.updateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); //positionStation.isfree = true; PositionHandler.Free(true, positionStation, "处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理", SysGloble.WCSNAME, item); } List stocklist = mod.productStockList.Where(x => x.stockId == sourcePosition.positionId).ToList(); if (stocklist.Count > 0) { foreach (var itemList in stocklist) { itemList.stockId = positionStation.positionId; } } } else//呼叫空托就清空库存 { mod.productStock.Remove(stock); } //sourcePosition.isfree = false; //sourcePosition.isLock = false; PositionHandler.LockAndFree(false, false, sourcePosition, "处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理", SysGloble.WCSNAME, item); sourcePosition.quantity = 0; sourcePosition.positionType = 1; OutInStockRecordHandler.AddOutInStockRecord(mod, OutInFlag.出库, item.sourcePlace, item.toPlace, item, "出库类型的任务"); } else { WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "任务ID" + item.taskId + "-" + tasktype + "查找库存失败"); } #endregion } else { WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "任务ID" + item.taskId + "-" + tasktype + "查找库位失败"); } #endregion if (item.taskType == (int)taskType.缸盖上线) //增加任务类型 【EditBy shaocx,2022-04-23】 { //给天永发信号 TianYongSystem.UpdateStoreByTaskID(mod, item, item.toPlace, (int)item.taskId, "缸盖上线,进入天永站点"); } int saveRes = mod.SaveChanges(); if (saveRes < 1) { WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "数据库保存失败! 任务id:" + item.taskId); } else {//处理成功后 } } /// /// 处理任务是下发中,发送堆垛机任务 /// /// /// /// /// 输送线站点 public static void sendTaskForHasIssuedFor发送堆垛机任务(dbmodel mod, task item, string convPlace) { if (convPlace == "") { //保存失败信息到任务表中 【EditBy shaocx,2022-03-16】 item.remark = "起点为空!!!!"; mod.SaveChanges(); return; } if (!MyExtendHelper.IsAllowSimulatorHandle(item)) { //if (srm.mode == "自动" && srm.Alarm_info == "无故障" && srm.state == "待机") if (MyExtendHelper.IsAllowSendNewTaskToSrm()) { //发送堆垛机任务 baseData.sendSrmTask(item, item.taskId, convPlace, item.toPlace, 1); } else { //保存失败信息到任务表中 【EditBy shaocx,2022-03-16】 item.remark = "堆垛机不是自动,无故障,待机状态,不能下发堆垛机任务!!!!"; mod.SaveChanges(); return; } } #region 数据操作 position convs = mod.position.FirstOrDefault(x => x.positionName == convPlace); if (convs != null) { // convs.isLock = false; PositionHandler.Lock(false, convs, "处理任务是下发中,发送堆垛机任务", SysGloble.WCSNAME, item); } item.taskStatus = (int)taskStatus.待完成; item.remark = "待完成"; int saveRes = mod.SaveChanges(); for (int i = 0; i < 4; i++) { if (saveRes < 1) { saveRes = mod.SaveChanges(); } else { break; } } if (saveRes < 1) { WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "数据库保存失败! 任务id:" + item.taskId); } #endregion } /// /// 处理任务是未下发,发送堆垛机任务 /// /// /// /// /// 输送线站点 public static void sendTaskForNoIssuedFor发送堆垛机任务(dbmodel mod, task item, string convPlace) { if (!MyExtendHelper.IsAllowSimulatorHandle(item)) { // if (srm.mode == "自动" && srm.Alarm_info == "无故障" && srm.state == "待机") if (MyExtendHelper.IsAllowSendNewTaskToSrm()) { //发送堆垛机任务 baseData.sendSrmTask(item, item.taskId, item.sourcePlace, convPlace, 1); } else { //保存失败信息到任务表中 【EditBy shaocx,2022-03-16】 item.remark = "堆垛机不是自动,无故障,待机状态,不能下发堆垛机任务!!!!"; mod.SaveChanges(); return; } } #region 数据操作 position unlockPosition = mod.position.FirstOrDefault(x => x.positionName == convPlace); if (unlockPosition != null) { //unlockPosition.isLock = true; PositionHandler.Lock(true, unlockPosition, "发送堆垛机任务时", SysGloble.WCSNAME, item); } //保存任务记录 item.middlePlace = convPlace; //item.taskStatus = 3; item.taskStatus = (int)taskStatus.已下发; item.remark = "已下发"; //增加出库单 状态更改 int saveRes = mod.SaveChanges(); for (int i = 0; i < 4; i++) { if (saveRes < 1) { saveRes = mod.SaveChanges(); } else { break; } } if (saveRes < 1) { WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "数据库保存失败! 任务id:" + item.taskId); } #endregion } } }