using DBHelper; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using WCS.Entity; using WCS.Entity.Protocol; using WCS.Service.Entity; using WCS.Service.Extensions; 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 == "1") //入库任务 // { // var wmstaskid = int.Parse(obj.WMSTaskNo); // if (db.Default.Set().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.Set().Add(agvtask); // db.Default.SaveChanges(); // } // 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.Add(task); // } // } // else if (obj.TaskType == "2")//出库任务 // { // var wmsTaskId = int.Parse(obj.WMSTaskNo); // if (db.Default.Set().Any(v => v.WMSTASK == wmsTaskId)) // throw new Exception("任务号" + wmsTaskId + "重复下发"); // var tunnel = "TY" + obj.SRMNo.Last(); // var task = new WCS_TASK // { // TYPE = TaskType.出库, // STATUS = TaskStatus.新建, // DEVICE = "SRM" + obj.SRMNo.Last(), // BARCODE = obj.PalletCode, // ADDRFROM = $"{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 = obj.EndLocation == "G1340" ? 1 : 2 // }; // task.TaskGetSrmStation(); // db.Default.Add(task); // } // else if (obj.TaskType == "3") //移库任务 // { // var wmstaskid = int.Parse(obj.WMSTaskNo); // if (db.Default.Set().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.StartRow}-{obj.StartCol}-{obj.StartLayer}", // ADDRTO = $"{obj.EndRow}-{obj.EndCol}-{obj.EndLayer}", // UPDATETIME = DateTime.Now, // UPDATEUSER = "WMS", // TUNNEL = tunnel, // WMSTASK = int.Parse(obj.WMSTaskNo), // TaskGroupKey = obj.TaskGroupKey // }; // db.Default.Add(task); // } // else if (obj.TaskType == "6") //倒库任务 // { // var wmsTaskId = int.Parse(obj.WMSTaskNo); // if (db.Default.Set().Any(v => v.WMSTASK == wmsTaskId)) // throw new Exception("任务号" + wmsTaskId + "重复下发"); // var srmNo = obj.SRMNo.Last(); // var endSrmNo = obj.EndSRMNo.Last(); // var task = new WCS_TASK // { // TYPE = TaskType.倒库, // STATUS = TaskStatus.新建, // BARCODE = obj.PalletCode, // ADDRFROM = $"{obj.StartRow}-{obj.StartCol}-{obj.StartLayer}", // ADDRTO = $"{obj.EndRow}-{obj.EndCol}-{obj.EndLayer}", // UPDATETIME = DateTime.Now, // UPDATEUSER = "WMS", // TUNNEL = $"TY{srmNo}", // DEVICE = $"SRM{srmNo}", // TUNNELDL = $"TY{endSrmNo}", // DEVICEDL = $"SRM{endSrmNo}", // WMSTASK = int.Parse(obj.WMSTaskNo), // ADDRNEXT = obj.EndLocation, // Length = obj.Length, // MaterialCode = obj.MaterialCode, // FLOOR = obj.EndLocation == "G1340" ? 1 : 2, // TaskGroupKey = obj.TaskGroupKey // }; // task.TaskGetSrmStation(); // db.Default.Add(task); // } // } // db.Default.SaveChanges(); // }); // 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.Set().Add(agvtask); // db.Default.SaveChanges(); // } // 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.Set().Where(v => v.BARCODE == code && v.STATUS < WCS.Entity.TaskStatus.已完成 && v.TYPE == TaskType.组盘).FirstOrDefault(); // if (task == null) // throw new Exception("WCS任务不存在"); // task.STATUS = WCS.Entity.TaskStatus.已取消; // task.UPDATETIME = DateTime.Now; // task.UPDATEUSER = "RF"; // db.Default.SaveChanges(); // }); // 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.Set().Where(v => v.WMSTASK == wmstaskId).FirstOrDefault(); // 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.SaveChanges(); // if (task.TYPE == TaskType.出库 && task.AgvTask > 0) // { // var agvtask = db.Default.Set().Find(task.AgvTask); // agvtask.Status = AGVTaskStatus.取消; // agvtask.UpdateTime = DateTime.Now; // db.Default.SaveChanges(); // } // }); // res.ResType = true; // } // catch (Exception ex) // { // res.ResMessage = ex.GetBaseException().Message; // } // return res; // } // /// // /// 通过该接口获取指定条件设备信息 // /// // /// 筛选条件 // /// // //[HttpGet] // //public List GetDeviceStatus([FromQuery] DeviceStatusViewModel model) // //{ // // var result = new List(); // // //找到所有设备的读取协议 // // var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device()); // // var sc = Device.Where(v => v.IsSC()).Select(v => v.Device()); // // var conv = Device.Where(v => v.IsConv()).Select(v => v.Device()); // // #region 检索分两部分,设备、任务(数据库) // // #region 设备信息 // // if (!string.IsNullOrEmpty(model.CODE)) // // { // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE)); // // result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE)); // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE)); // // } // // if (model.TASKNUM > 10000) // // { // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM)); // // result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 == model.TASKNUM)); // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum == model.TASKNUM)); // // } // // if (model.PH_STATUS != null) // // { // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM)); // // } // // if (!string.IsNullOrEmpty(model.ADDRFROM)) // // { // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition_1 == short.Parse(model.ADDRFROM))); // // result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine_1.ToString()) // // || model.ADDRFROM.Contains(v.Data.SCol_1.ToString()) // // || model.ADDRFROM.Contains(v.Data.SLayer_1.ToString()))); // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsstart ==short.Parse(model.ADDRFROM))); // // } // // if (!string.IsNullOrEmpty(model.ADDRTO)) // // { // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition_1 == short.Parse(model.ADDRTO))); // // result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine_1.ToString()) // // || model.ADDRTO.Contains(v.Data.ECol_1.ToString()) // // || model.ADDRTO.Contains(v.Data.ELayer_1.ToString()))); // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsend == short.Parse(model.ADDRTO))); // // } // // #endregion 设备信息 // // #region 任务信息 // // //获取所有设备上的任务信息 // // if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE)) // // { // // var info = new List(); // // var ids = result.Select(v => v.TASKNUM); // // info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 > 10000)); // // info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 > 10000)); // // info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum > 10000)); // // result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM))); // // } // // DB.Do(db => // // { // // var ids = result.Select(v => v.TASKNUM); // // var tasks = db.Default.Set().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList(); // // tasks.ForEach(task => // // { // // var info = result.Find(v => v.TASKNUM == task.ID); // // info.TYPE = task.TYPE; // // info.BARCODE = task.BARCODE; // // }); // // }); // // if (model.TYPE != null) // // { // // result = result.Where(v => v.TYPE == model.TYPE).ToList(); // // } // // if (!string.IsNullOrEmpty(model.BARCODE)) // // { // // result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList(); // // } // // #endregion 任务信息 // // #endregion 检索分两部分,设备、任务(数据库) // // return result; // //} // #region 静态方法 // ///// // ///// 获取RGV设备信息 // ///// // ///// // ///// // ///// // //public static List GetDeviceStatusWhere(IEnumerable> soue, Func, bool> func) // //{ // // var result = new List(); // // result.AddRange(soue.Where(func).Select(device => // // { // // return new DeviceStatusViewModel // // { // // CODE = device.Entity.CODE, // // TASKNUM = device.Data.TaskID_1 , // // PH_STATUS = device.Data.SystemStatus.HasFlag(RGVStatus.光电), // // ADDRFROM = device.Data.StartPosition_1.ToString(), // // ADDRTO = device.Data.DestPosition_1.ToString(), // // }; // // })); // // return result; // //} // ///// // ///// 获取堆垛机设备信息 // ///// // ///// // ///// // ///// // //public static List GetDeviceStatusWhere(IEnumerable> soue, Func, bool> func) // //{ // // var result = new List(); // // result.AddRange(soue.Where(func).Select(device => // // { // // var info = new DeviceStatusViewModel // // { // // CODE = device.Entity.CODE, // // TASKNUM = device.Data.TaskID_1, // // ADDRFROM = $"{device.Data.SLine_1}-{device.Data.SCol_1}-{device.Data.SLayer_1}", // // ADDRTO = device.Data.ELine_1.ToString(), // // }; // // if (device.Data.ECol_1 != 0 && device.Data.ELayer_1 != 0) // // info.ADDRTO = $"{device.Data.ELine_1}-{device.Data.ECol_1}-{device.Data.ELayer_1}"; // // return info; // // })); // // return result; // //} // ///// // ///// 获取输送机设备信息 // ///// // ///// // ///// // ///// // //public static List GetDeviceStatusWhere(IEnumerable> soue, Func, bool> func) // //{ // // var result = new List(); // // result.AddRange(soue.Where(func).Select(device => // // { // // return new DeviceStatusViewModel // // { // // CODE = device.Entity.CODE, // // TASKNUM = device.Data.Tasknum, // // ADDRFROM =device.Data.Goodsstart.ToString(), // // ADDRTO = device.Data.Goodsend.ToString(), // // }; // // })); // // return result; // //} // #endregion 静态方法 //} }