| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496 | 
							- 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;
 
- namespace WCS.Service.WebApi
 
- {
 
-     [ApiController]
 
-     [Route("[controller]/[action]")]
 
-     public class WCSApi : ControllerBase
 
-     {
 
-         [HttpPost]
 
-         public WcsContractApiResponse I_WMS_CreateTasks(List<PushCreateWcsTaskRequest> 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.Set<WCS_TASK>().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.Add(task);
 
-                             db.Default.SaveChanges();
 
-                             //task.CreateStatusLog(db);
 
-                         }
 
-                         else if (obj.TaskType == "2")
 
-                         {  //出库任务
 
-                             var wmstaskid = int.Parse(obj.WMSTaskNo);
 
-                             if (db.Default.Set<WCS_TASK>().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
 
-                             };
 
-                             db.Default.Add(task);
 
-                             db.Default.SaveChanges();
 
-                         }
 
-                         else if (obj.TaskType == "1")
 
-                         {//入库任务
 
-                             var wmstaskid = int.Parse(obj.WMSTaskNo);
 
-                             if (db.Default.Set<WCS_TASK>().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<WCS_AGVTask>().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);
 
-                                 db.Default.SaveChanges();
 
-                                 //task.CreateStatusLog(db);
 
-                             }
 
-                         }
 
-                     }
 
-                 });
 
-                 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<WCS_AGVTask>().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<WCS_TASK>().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<WCS_TASK>().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<WCS_AGVTask>().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;
 
-         }
 
-         ///// <summary>
 
-         ///// WMS 通过该接口获取码垛位当前各位置对应的托盘码
 
-         ///// </summary>
 
-         ///// <returns></returns>
 
-         //[HttpGet]
 
-         //public List<KeyValueViewModel<string, string>> I_WMS_GetPalletCode()
 
-         //{
 
-         //    //找出所有组盘站台信息
 
-         //    var station = Device.Where(v => v.Is(DF.组盘)).ToList();
 
-         //    //找出所有有光电信号站台中的任务号
 
-         //    var taskNumbers = station.Select(v => v.Device<IStation521>())
 
-         //                              .Where(p => p.Data.G_TaskId != 0 && p.Data.G_PhStatus)
 
-         //                              .Select(p => p.Data.G_TaskId);
 
-         //    var result = new List<KeyValueViewModel<string, string>>();
 
-         //    DB.Do(db =>
 
-         //    {
 
-         //        //找到有光电的位置对应的任务
 
-         //        var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(task => taskNumbers.Any(x => task.ID == x)).ToList();
 
-         //        station.ForEach(p =>
 
-         //        {
 
-         //            var value = tasks.FirstOrDefault(task => task.ADDRTO == p.CODE);
 
-         //            result.Add(new KeyValueViewModel<string, string>()
 
-         //            {
 
-         //                Key = p.CODE,
 
-         //                Value = value == null ? null : value.BARCODE,
 
-         //            });
 
-         //        });
 
-         //    });
 
-         //    return result;
 
-         //}
 
-         ///// <summary>
 
-         ///// 通过该接口获取指定条件设备信息
 
-         ///// </summary>
 
-         ///// <param name="model">筛选条件</param>
 
-         ///// <returns></returns>
 
-         //[HttpGet]
 
-         //public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
 
-         //{
 
-         //    var result = new List<DeviceStatusViewModel>();
 
-         //    //找到所有设备的读取协议
 
-         //    var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
 
-         //    //var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISC521>());
 
-         //    var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
 
-         //    //var robot = Device.Where(v => v.IsRobot()).Select(v => v.Device<IRobot>());
 
-         //    #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));
 
-         //        //result.AddRange(GetDeviceStatusWhere(robot, 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 == model.TASKNUM));
 
-         //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_TaskId == model.TASKNUM));
 
-         //        //result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID == model.TASKNUM));
 
-         //    }
 
-         //    if (model.REQUEST != null)
 
-         //    {
 
-         //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_Request == model.REQUEST));
 
-         //    }
 
-         //    if (model.PH_STATUS != null)
 
-         //    {
 
-         //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
 
-         //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_Request == model.REQUEST));
 
-         //    }
 
-         //    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.ToString())
 
-         //        //                                           || model.ADDRFROM.Contains(v.Data.SCol.ToString())
 
-         //        //                                           || model.ADDRFROM.Contains(v.Data.SLayer.ToString())));
 
-         //    }
 
-         //    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.ToString())
 
-         //        //                                           || model.ADDRTO.Contains(v.Data.ECol.ToString())
 
-         //        //                                           || model.ADDRTO.Contains(v.Data.ELayer.ToString())));
 
-         //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_GoodsEnd == short.Parse(model.ADDRTO)));
 
-         //        //result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.Target == short.Parse(model.ADDRTO)));
 
-         //    }
 
-         //    #endregion 设备信息
 
-         //    #region 任务信息
 
-         //    //获取所有设备上的任务信息
 
-         //    if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
 
-         //    {
 
-         //        var info = new List<DeviceStatusViewModel>();
 
-         //        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 > 10000));
 
-         //        info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_TaskId > 10000));
 
-         //        //info.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID > 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<WCS_TASK>().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 静态方法
 
-         ///// <summary>
 
-         ///// 获取RGV设备信息
 
-         ///// </summary>
 
-         ///// <param name="soue"></param>
 
-         ///// <param name="func"></param>
 
-         ///// <returns></returns>
 
-         //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
 
-         //{
 
-         //    var result = new List<DeviceStatusViewModel>();
 
-         //    result.AddRange(soue.Where(func).Select(device =>
 
-         //    {
 
-         //        return new DeviceStatusViewModel
 
-         //        {
 
-         //            CODE = device.Entity.CODE,
 
-         //            TASKNUM = device.Data.TaskID_1,
 
-         //            PH_STATUS = device.Data.PH_Status_1,
 
-         //            ADDRFROM = device.Data.StartPosition_1.ToString(),
 
-         //            ADDRTO = device.Data.DestPosition_1.ToString(),
 
-         //        };
 
-         //    }));
 
-         //    return result;
 
-         //}
 
-         ///// <summary>
 
-         ///// 获取堆垛机设备信息
 
-         ///// </summary>
 
-         ///// <param name="soue"></param>
 
-         ///// <param name="func"></param>
 
-         ///// <returns></returns>
 
-         //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISC521>> soue, Func<Device<ISC521>, bool> func)
 
-         //{
 
-         //    var result = new List<DeviceStatusViewModel>();
 
-         //    result.AddRange(soue.Where(func).Select(device =>
 
-         //    {
 
-         //        var info = new DeviceStatusViewModel
 
-         //        {
 
-         //            CODE = device.Entity.CODE,
 
-         //            TASKNUM = device.Data.TaskID,
 
-         //            ADDRFROM = $"{device.Data.SLine}-{device.Data.SCol}-{device.Data.SLayer}",
 
-         //            ADDRTO = device.Data.ELine.ToString(),
 
-         //        };
 
-         //        if (device.Data.ECol != 0 && device.Data.ELayer != 0)
 
-         //            info.ADDRTO = $"{device.Data.ELine}-{device.Data.ECol}-{device.Data.ELayer}";
 
-         //        return info;
 
-         //    }));
 
-         //    return result;
 
-         //}
 
-         ///// <summary>
 
-         ///// 获取输送机设备信息
 
-         ///// </summary>
 
-         ///// <param name="soue"></param>
 
-         ///// <param name="func"></param>
 
-         ///// <returns></returns>
 
-         //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
 
-         //{
 
-         //    var result = new List<DeviceStatusViewModel>();
 
-         //    result.AddRange(soue.Where(func).Select(device =>
 
-         //    {
 
-         //        return new DeviceStatusViewModel
 
-         //        {
 
-         //            CODE = device.Entity.CODE,
 
-         //            TASKNUM = device.Data.G_TaskId,
 
-         //            REQUEST = device.Data.G_Request,
 
-         //            PH_STATUS = device.Data.G_PhStatus,
 
-         //            ADDRTO = device.Data.G_GoodsEnd.ToString(),
 
-         //        };
 
-         //    }));
 
-         //    return result;
 
-         //}
 
-         ///// <summary>
 
-         ///// 获取机械臂设备信息
 
-         ///// </summary>
 
-         ///// <param name="soue"></param>
 
-         ///// <param name="func"></param>
 
-         ///// <returns></returns>
 
-         //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRobot>> soue, Func<Device<IRobot>, bool> func)
 
-         //{
 
-         //    var result = new List<DeviceStatusViewModel>();
 
-         //    result.AddRange(soue.Where(func).Select(device =>
 
-         //    {
 
-         //        return new DeviceStatusViewModel
 
-         //        {
 
-         //            CODE = device.Entity.CODE,
 
-         //            TASKNUM = device.Data.TaskID,
 
-         //            ADDRTO = device.Data.Trigger.ToString(),
 
-         //        };
 
-         //    }));
 
-         //    return result;
 
-         //}
 
-         #endregion 静态方法
 
-     }
 
- }
 
 
  |