using DBHelper_SqlSugar; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using WCS.Entity; using WCS.Entity.Protocol; using WCS.Service.Entity; namespace WCS.Service.WebApi { [ApiController] [Route("[controller]/[action]")] public class WCSApi : ControllerBase { [HttpPost] public WcsContractApiResponse I_WMS_CreateTasks(List list) { var res = new WcsContractApiResponse(); try { Db.Do(db => { foreach (var obj in list) { if (obj.TaskType == "3")//移库任务 { var wmstaskid = int.Parse(obj.WMSTaskNo); if (db.Default.Queryable().Any(v => v.WMSTASK == wmstaskid)) throw new Exception("任务号" + wmstaskid + "重复下发"); var scid = int.Parse(obj.SRMNo.Last().ToString()); var tunnel = "TY" + obj.StartTunnel; var task = new WCS_TASK { TYPE = TaskType.移库, STATUS = WCS.Entity.TaskStatus.新建, DEVICE = "SRM" + obj.SRMNo.Last(), BARCODE = obj.PalletCode, ADDRFROM = obj.StartLocation, ADDRTO = obj.EndLocation, UPDATETIME = DateTime.Now, UPDATEUSER = "WMS", TUNNEL = tunnel, WMSTASK = int.Parse(obj.WMSTaskNo), TaskGroupKey = obj.TaskGroupKey }; db.Default.Insertable(task).ExecuteCommand(); } else if (obj.TaskType == "2") { //出库任务 var wmstaskid = int.Parse(obj.WMSTaskNo); if (db.Default.Queryable().Any(v => v.WMSTASK == wmstaskid)) throw new Exception("任务号" + wmstaskid + "重复下发"); var tunnel = "TY" + obj.SRMNo.Last(); var task = new WCS_TASK { TYPE = TaskType.出库, STATUS = WCS.Entity.TaskStatus.新建, DEVICE = "SRM" + obj.SRMNo.Last(), BARCODE = obj.PalletCode, ADDRFROM = string.Format("{0}-{1}-{2}", obj.StartRow, obj.StartCol, obj.StartLayer), ADDRTO = obj.EndLocation, UPDATETIME = DateTime.Now, UPDATEUSER = "WMS", TUNNEL = tunnel, WMSTASK = int.Parse(obj.WMSTaskNo), ADDRNEXT = obj.EndLocation, Length = obj.Length, MaterialCode = obj.MaterialCode, FLOOR = 1, }; db.Default.Insertable(task).ExecuteCommand(); } else if (obj.TaskType == "1") {//入库任务 var wmstaskid = int.Parse(obj.WMSTaskNo); if (db.Default.Queryable().Any(v => v.WMSTASK == wmstaskid)) throw new Exception("任务号" + wmstaskid + "重复下发"); if (obj.StartLocation.Contains("_Back_")) {//生成AGV入库任务 var ws = int.Parse(obj.StartLocation.Split('_')[1]); var agvtask = new WCS_AGVTask { AGVStatus = AGVTaskStatus.新建, Status = AGVTaskStatus.新建, Position = obj.StartLocation, TaskType = AGVTaskType.入库, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, Workshop = ws, }; if (ws == 13 || ws == 14) { agvtask.Station = "2088"; agvtask.Workshop = 1314; } else if (ws == 1) { agvtask.Station = "2122"; } else if (ws == 2) agvtask.Station = "2131"; else if (ws == 3) agvtask.Station = "2143"; db.Default.Insertable(agvtask).ExecuteCommand(); } else { var task = new WCS_TASK { TYPE = TaskType.入库, STATUS = WCS.Entity.TaskStatus.新建, BARCODE = obj.PalletCode, ADDRFROM = obj.StartLocation, ADDRTO = obj.EndLocation, UPDATETIME = DateTime.Now, UPDATEUSER = "WMS", WMSTASK = int.Parse(obj.WMSTaskNo) }; db.Default.Insertable(task).ExecuteCommand(); } } } }); res.ResType = true; } catch (Exception ex) { res.ResMessage = ex.GetBaseException().Message; } return res; } [HttpPost] public WcsContractApiResponse I_WMS_CreateAGVTask(PushCreateAGVTaskRequest obj) { var res = new WcsContractApiResponse(); try { Db.Do(db => { if (obj.Type == 1) { var ws = int.Parse(obj.StartPos.Split('_')[1]); var agvtask = new WCS_AGVTask { AGVStatus = AGVTaskStatus.新建, Status = AGVTaskStatus.新建, Position = obj.StartPos, TaskType = AGVTaskType.入库, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, Workshop = ws, }; if (ws == 13 || ws == 14) { agvtask.Station = "2088"; agvtask.Workshop = 1314; } else if (ws == 1) { agvtask.Station = "2122"; } else if (ws == 2) agvtask.Station = "2131"; else if (ws == 3) agvtask.Station = "2143"; db.Default.Insertable(agvtask).ExecuteCommand(); } else throw new Exception($"类型{obj.Type}不支持"); }); res.ResType = true; } catch (Exception ex) { res.ResMessage = ex.GetBaseException().Message; } return res; } [HttpPost] public WcsContractApiResponse I_CancelWCSTaskByCode(string code) { var res = new WcsContractApiResponse(); try { Db.Do(db => { var task = db.Default.Queryable().First(v => v.BARCODE == code && v.STATUS < WCS.Entity.TaskStatus.已完成 && v.TYPE == TaskType.组盘); if (task == null) throw new Exception("WCS任务不存在"); task.STATUS = WCS.Entity.TaskStatus.已取消; task.UPDATETIME = DateTime.Now; task.UPDATEUSER = "RF"; db.Default.Updateable(task).ExecuteCommand(); }); res.ResType = true; } catch (Exception ex) { res.ResMessage = ex.GetBaseException().Message; } return res; } [HttpPost] public WcsContractApiResponse I_CancelWCSTaskByID(int wmstaskId) { var res = new WcsContractApiResponse(); try { Db.Do(db => { var task = db.Default.Queryable().First(v => v.WMSTASK == wmstaskId); if (task == null) throw new Exception("WCS任务不存在"); if (task.STATUS != WCS.Entity.TaskStatus.新建) throw new Exception("WCS任务当前状态不允许取消"); task.STATUS = WCS.Entity.TaskStatus.已取消; task.UPDATETIME = DateTime.Now; task.UPDATEUSER = "WMS"; db.Default.Updateable(task).ExecuteCommand(); if (task.TYPE != TaskType.出库 || task.AGVTASKID <= 0) return; var agvtask = db.Default.Queryable().InSingle(task.AGVTASKID); agvtask.Status = AGVTaskStatus.取消; agvtask.UpdateTime = DateTime.Now; db.Default.Updateable(agvtask).ExecuteCommand(); }); res.ResType = true; } catch (Exception ex) { res.ResMessage = ex.GetBaseException().Message; } return res; } } }