| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Security.Policy; |
| | |
| | | using System.Threading.Tasks; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto.BllCheckDto; |
| | | using Model.ModelDto.LogDto; |
| | | using Model.ModelDto.PdaDto; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm; |
| | |
| | | } |
| | | try |
| | | { |
| | | string EndLocat = string.Empty;//目标位置 |
| | | string EndLocat = string.Empty,OrderTy = "";//目标位置 |
| | | |
| | | |
| | | var log = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1")); |
| | | if (log != null) |
| | |
| | | throw new Exception("所选区域信息不存在,请检查!"); |
| | | } |
| | | EndLocat = GetLocat(areaNo, stockDetail.SkuNo, stockDetail.LotNo, palletNo); |
| | | OrderTy = "3";//移库 |
| | | } |
| | | else |
| | | { |
| | | EndLocat = ruku; |
| | | OrderTy = "0";//入库 |
| | | |
| | | |
| | | } |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | OrderType = OrderTy,//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | |
| | | CreateTime = DateTime.Now |
| | | }; |
| | |
| | | |
| | | #region 呼叫小车代码 |
| | | |
| | | var endlono = EndLocat; |
| | | var tasktype = "D00"; //默认为点到点任务 |
| | | //根据目的地址库区获取小车任务类型 |
| | | switch (storageLocatEnd.AreaNo) |
| | | { |
| | | case "B13" : |
| | | tasktype = "D02"; // 叠托任务(目的地址为空托盘收集区) |
| | | break; |
| | | case "B15": |
| | | tasktype = "D01"; // 拆托任务(目的地址为拣货区) |
| | | break; |
| | | } |
| | | |
| | | //缓存库位转换 3楼原辅料Y003_001,Y003_002,Y003_003 1楼Y138_001到Y138_021外包缓存区 1楼Y128_001到Y128_015内包缓存区 |
| | | if (storageLocatEnd.AreaNo == "B12") |
| | | { |
| | | switch (EndLocat.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + EndLocat.ToString().Substring(6, 1); |
| | | tasktype = "D00"; //点到点任务 |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | case "3": |
| | | endlono = "Y128_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | //点到点指令集合 |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = stockDetail.LocatNo, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = endlono, |
| | | type = "00" |
| | | }; |
| | | |
| | | List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); |
| | | Random r = new Random(); |
| | | long ran =DateTime.Now.Ticks; |
| | | |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | agvTask.ReqCode = taskNo; |
| | | agvTask.TaskTyp = "F01"; |
| | | agvTask.WbCode = ""; |
| | | agvTask.PositionCodePath = null; |
| | | agvTask.PodCode = "-1"; |
| | | agvTask.TaskCode = taskNo; |
| | | agvTask.ReqCode = ran.ToString(); |
| | | agvTask.TaskTyp = tasktype; |
| | | agvTask.PositionCodePath = position; |
| | | agvTask.CtnrTyp = "1"; |
| | | if (tasktype == "D02") |
| | | { |
| | | agvTask.CtnrNum = "10"; //叠托任务需要下发空托盘数量 |
| | | } |
| | | |
| | | agvTaskList.Add(agvTask); |
| | | |
| | | var IsTrue = false; |
| | | while (IsTrue == true) |
| | | { |
| | | |
| | | // 正式运行程序放开 |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.ReqCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | jsonData = jsonData.Substring(1, jsonData.Length - 1); |
| | | jsonData = jsonData.Substring(0, jsonData.Length - 1); |
| | | string response = ""; |
| | | |
| | | try |
| | |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | IsTrue = true; |
| | | } |
| | | if (agvModel.Code == "1") |
| | | { |
| | |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //提交事务 |
| | |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="areaNo"></param> |
| | | /// <param name="userId"></param> |
| | | public List<string> AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url) |
| | | public List<string> AgvTransport2(string soNo, string palletNo, string areaNo,string ruku, int userId, string url) |
| | | { |
| | | if (string.IsNullOrEmpty(soNo)) |
| | | { |
| | |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | var endlono = EndLocat; |
| | | var tasktype = "D00"; |
| | | |
| | | //根据目的地址库区获取小车任务类型 |
| | | switch (storageLocatEnd.AreaNo) |
| | | { |
| | | case "B13": |
| | | tasktype = "D02"; // 叠托任务(目的地址为空托盘收集区) |
| | | break; |
| | | case "B15": |
| | | tasktype = "D01"; // 拆托任务(目的地址为拣货区) |
| | | break; |
| | | } |
| | | |
| | | //缓存库位转换 3楼原辅料Y003_001,Y003_002,Y003_003 1楼Y138_001到Y138_021外包缓存区 1楼Y128_001到Y128_015内包缓存区 |
| | | if (storageLocatEnd.AreaNo == "B12") |
| | | { |
| | | switch (EndLocat.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + EndLocat.ToString().Substring(6, 1); |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | case "3": |
| | | endlono = "Y128_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | //点到点指令集合 |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = item.LocatNo, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = endlono, |
| | | type = "00" |
| | | }; |
| | | |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | agvTask.ReqCode = taskNo; |
| | | agvTask.TaskTyp = "F01"; |
| | | agvTask.WbCode = ""; |
| | | agvTask.PositionCodePath = null; |
| | | agvTask.PodCode = "-1"; |
| | | agvTask.TaskTyp = tasktype; |
| | | agvTask.PositionCodePath = position; |
| | | |
| | | agvTaskList.Add(agvTask); |
| | | |
| | |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.ReqCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | jsonData = jsonData.Substring(1, jsonData.Length - 1); |
| | | jsonData = jsonData.Substring(0, jsonData.Length - 1); |
| | | string response = ""; |
| | | |
| | | try |
| | |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// agv调度任务下发 |
| | | /// </summary> |
| | | /// <param name="type">搬运类型</param> |
| | | /// <param name="taskno">任务号</param> |
| | | /// <param name="positionStart">起始地址</param> |
| | | /// <param name="positionEnd">目的地址</param> 2 |
| | | /// <param name="url">接口URL</param> |
| | | public OutCommanAgvDto AGVTask(string type, string taskno, string positionStart, string positionEnd ,string url) |
| | | { |
| | | |
| | | var endlono = positionEnd; |
| | | var tasktype = type; |
| | | var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == endlono && w.Flag == "0" && w.Status == "0"); |
| | | if (storageLocatEnd == null) |
| | | { |
| | | throw new Exception("生成的AGV任务目的地址不正确"); |
| | | } |
| | | //根据目的地址库区获取小车任务类型 |
| | | switch (storageLocatEnd.AreaNo) |
| | | { |
| | | case "B13": |
| | | tasktype = "D02"; // 叠托任务(目的地址为空托盘收集区) |
| | | break; |
| | | case "B15": |
| | | tasktype = "D01"; // 拆托任务(目的地址为拣货区) |
| | | break; |
| | | } |
| | | |
| | | // MES申请备料,备料区库位需要转换 车间备料缓存位名称:3楼原辅料Y003_001-->Y003_003 1楼外包缓存区Y138_001-->Y138_021 1楼内包缓存区Y128_001-->Y128_015 |
| | | if (storageLocatEnd.AreaNo == "B12") |
| | | { |
| | | switch (endlono.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + endlono.Substring(6, 1); |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + endlono.Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | case "3": |
| | | endlono = "Y128_0" + endlono.Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); |
| | | |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = positionStart, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = endlono, |
| | | type = "00" |
| | | }; |
| | | |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | agvTask.ReqCode = taskno; //agv请求编号,需要随机生成 (最大32位) |
| | | agvTask.TaskCode = taskno; //任务号 |
| | | agvTask.TaskTyp = tasktype; //搬运类型 |
| | | agvTask.PositionCodePath = position; //起始和目的位集合 |
| | | agvTask.CtnrTyp = "1"; //容器类型,值为1 |
| | | if (tasktype == "D02") |
| | | { |
| | | agvTask.CtnrNum = "10"; //叠托任务需要下发空托盘数量 |
| | | } |
| | | |
| | | agvTaskList.Add(agvTask); |
| | | |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.ReqCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | jsonData = jsonData.Substring(1, jsonData.Length-1); |
| | | jsonData = jsonData.Substring(0, jsonData.Length - 1); |
| | | var response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | |
| | | return agvModel; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// agv任务取消 |
| | | /// </summary> |
| | | /// <param name="taskno">取消任务编号</param> |
| | | /// <param name="url">接口URL</param> |
| | | public void cancelTask(string taskno,string url) |
| | | { |
| | | try |
| | | { |
| | | AgvCancelTask agvTaskList = new AgvCancelTask(); |
| | | agvTaskList.ReqCode = "006"; //随机生成 |
| | | agvTaskList.TaskCode = taskno.ToString(); |
| | | //agvTaskList.ReqTime = DateTime.Now.ToString(); |
| | | |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | var response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var agvModel = JsonConvert.DeserializeObject<cancelTaskModel>(response); |
| | | |
| | | if (agvModel.Code != "0") |
| | | { |
| | | throw new Exception("下发AGV取消任务失败"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw ex; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据区域分配储位 |
| | | /// </summary> |
| | |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var endlono = EndLocat.LocatNo; |
| | | //缓存库位转换 |
| | | switch (EndLocat.LocatNo.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + EndLocat.LocatNo.ToString().Substring(6, 1); |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + EndLocat.LocatNo.ToString().Substring(5, 2); |
| | | break; |
| | | case"3": |
| | | endlono = "Y128_0" + EndLocat.LocatNo.ToString().Substring(5, 2); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First(); |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = mescode.OrderCode, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = EndLocat.LocatNo, |
| | | layer_no = endlono, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | |
| | | |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "人工转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |