| | |
| | | public string PalletNo { get; set; } |
| | | } |
| | | |
| | | public class BoxInfoCheck |
| | | { |
| | | public string PalletNo { get; set; } |
| | | public string TaskNo { get; set; } |
| | | } |
| | | |
| | | public class RequestBoxInfoCheck |
| | | { |
| | | /// <summary> |
| | | /// 托盘号 |
| | | /// </summary> |
| | | public string PalletNo { get; set; } |
| | | /// <summary> |
| | | /// 任务号 |
| | | /// </summary> |
| | | public string TaskNo { get; set; } |
| | | /// <summary> |
| | | /// 订单号 |
| | | /// </summary> |
| | | public string OrderNo { get; set; } |
| | | /// <summary> |
| | | /// 物料编码 |
| | | /// </summary> |
| | | public string SkuNo { get; set; } |
| | | /// <summary> |
| | | /// 物料名称 |
| | | /// </summary> |
| | | public string SkuName { get; set; } |
| | | /// <summary> |
| | | /// 批次 |
| | | /// </summary> |
| | | public string LotNo { get; set; } |
| | | /// <summary> |
| | | /// 规格 |
| | | /// </summary> |
| | | public string Standard { get; set; } |
| | | /// <summary> |
| | | /// 拆箱数量 |
| | | /// </summary> |
| | | public int? Qty { get; set; } |
| | | /// <summary> |
| | | /// 托盘上总箱数 |
| | | /// </summary> |
| | | public int? QtyCount { get; set; } |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | /// 格式: “yyyy-MM-ddHH:mm:ss” |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public string EeqTime { get; set; } |
| | | public string ReqTime { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 客户端编号,如 PDA,HCWMS 等。 |
| | |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public string CtnrTyp { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 容器数量(叉车/CTU 专用) |
| | | /// 叉车项目必传 |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public string CtnrNum { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 容器编号(叉车/CTU 专用) |
| | |
| | | /// </summary> |
| | | public class AgvTaskDto |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 请求编号,每个请求都要一个唯一编号 |
| | | /// 同一个请求重复提交 使用同一编号 |
| | |
| | | /// 地码 X 坐标(mm):任务完成时有值 |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public int CooX { get; set; } |
| | | public decimal CooX { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 地码 Y 坐标(mm):任务完成时有值 |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public int CooY { get; set; } |
| | | public decimal CooY { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 当前位置编号 |
| | |
| | | /// </summary> |
| | | public string CtnrCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 容器类型 |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public string CtnrType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 巷道编号 |
| | |
| | | /// 是否必填:否 |
| | | /// </summary> |
| | | public string EqpCode { get; set; } |
| | | public string DstBinCode { get; set; } |
| | | public string IndBind { get; set; } |
| | | public string Layer { get; set; } |
| | | public string MapShortName { get; set; } |
| | | public string MaterialType { get; set; } |
| | | |
| | | public string Action { get; set; } |
| | | public string AreaCode { get; set; } |
| | | |
| | | public string BerthCode { get; set; } |
| | | |
| | | |
| | | |
| | | public string CallCode { get; set; } |
| | | |
| | | public string CallTyp { get; set; } |
| | | public string ClientCode { get; set; } |
| | | public string OrgCode { get; set; } |
| | | public string CtnrTyp { get; set; } |
| | | public string CurrentCallCode { get; set; } |
| | | |
| | | public string PodCode { get; set; } |
| | | |
| | | public string PodTyp { get; set; } |
| | | public string PodNum { get; set; } |
| | | public string RelatedArea { get; set; } |
| | | public string ReqTime { get; set; } |
| | | public string SubTaskNum { get; set; } |
| | | |
| | | public string TaskTyp { get; set; } |
| | | |
| | | public string TokenCode { get; set; } |
| | | public string Username { get; set; } |
| | | public string WhCode { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string Data { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WMS下发AGV取消任务回传参数 |
| | | /// </summary> |
| | | public class cancelTaskModel |
| | | { |
| | | /// <summary> |
| | | /// 返回码 |
| | | /// 0:成功 |
| | | /// 1:参数相关的错误 |
| | | /// 6:重复发送,上层系统不需要重发 |
| | | /// 99:其他未知错误,调用失败后,可以重试 |
| | | /// 100: 该任务不存在,上层系统不需重发,需要人工介入处理 |
| | | /// 是否必填:是 |
| | | /// </summary> |
| | | public string Code { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 返回消息 |
| | | /// 是否必填:是 |
| | | /// </summary> |
| | | public string Message { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 请求编号 |
| | | /// 是否必填:是 |
| | | /// </summary> |
| | | public string ReqCode { get; set; } |
| | | } |
| | | #endregion |
| | | |
| | | #region FuMa-Model |
| | |
| | | |
| | | if (model.Type == "0")//成品入库单下发WCS信息 |
| | | { |
| | | //计算出总箱数 |
| | | var packmodel = Db.Queryable<SysPackag>().First(w=>w.PackagNo == detailModel.SkuNo); |
| | | int xqty = 0; |
| | | if (packmodel.L1Name == "箱") { |
| | | xqty = (int)detailModel.Qty; |
| | | } |
| | | if (packmodel.L2Name == "箱") |
| | | { |
| | | xqty = (int)(detailModel.Qty / packmodel.L2Num); |
| | | } |
| | | if (packmodel.L3Name == "箱") |
| | | { |
| | | xqty = (int)(detailModel.Qty/ packmodel.L2Num / packmodel.L3Num); |
| | | } |
| | | addOder.Add(new ResponseOrderTaskModel() |
| | | { |
| | | OrderNo = model.ASNNo, |
| | |
| | | SkuNo = detailModel.SkuNo, |
| | | SkuName = detailModel.SkuName, |
| | | BoxType = detailModel.Standard, |
| | | Qty = (int)detailModel.Qty, |
| | | Qty = xqty, |
| | | TaskType = 0 |
| | | }); |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public HttpReturnModel HttpCreateAsn(AsnInfo model) |
| | | public HttpReturnModel HttpCreateAsn(AsnInfo model, string url) |
| | | { |
| | | try |
| | | { |
| | | var addOder = new List<ResponseOrderTaskModel>(); |
| | | var resultModel = new HttpReturnModel() { Success = "-1", Message = "" }; |
| | | if (string.IsNullOrEmpty(model.AsnType)) |
| | | { |
| | |
| | | }; |
| | | |
| | | detailModels.Add(detailModel); |
| | | |
| | | if (model.AsnType == "0")//成品入库单下发WCS信息 |
| | | { |
| | | //计算出总箱数 |
| | | var packmodel = Db.Queryable<SysPackag>().First(w => w.PackagNo == detailModel.SkuNo); |
| | | int xqty = 0; |
| | | if (packmodel.L1Name == "箱") |
| | | { |
| | | xqty = (int)detailModel.Qty; |
| | | } |
| | | if (packmodel.L2Name == "箱") |
| | | { |
| | | xqty = (int)(detailModel.Qty / packmodel.L2Num); |
| | | } |
| | | if (packmodel.L3Name == "箱") |
| | | { |
| | | xqty = (int)(detailModel.Qty / packmodel.L2Num / packmodel.L3Num); |
| | | } |
| | | addOder.Add(new ResponseOrderTaskModel() |
| | | { |
| | | OrderNo = asnNo, |
| | | LotNo = asnDetailModel.LotNo, |
| | | SkuNo = asnDetailModel.SkuNo, |
| | | SkuName = skuModel.SkuName, |
| | | BoxType = skuModel.Standard, |
| | | Qty = (int)asnDetailModel.Qty, |
| | | TaskType = 0 |
| | | }); |
| | | } |
| | | } |
| | | |
| | | |
| | | Db.BeginTran(); |
| | | // 插入入库单总表 |
| | |
| | | Db.Insertable(detailModels).ExecuteCommand(); |
| | | Db.CommitTran(); |
| | | |
| | | |
| | | if (addOder.Count > 0) |
| | | { |
| | | // 正式运行程序放开 |
| | | var jsonData = JsonConvert.SerializeObject(addOder); |
| | | string response = ""; |
| | | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //给WCS下发入库单信息 |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给WCS入库命令", "WCS"); |
| | | |
| | | //解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | { |
| | | |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | { |
| | | throw new Exception($"下发WCS失败:{wcsModel.Msg}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | resultModel.Success = "0"; |
| | | resultModel.Message = "成功"; |
| | | return resultModel; |
| | |
| | | throw new Exception("未找到该托盘条码:" + palletNo); |
| | | } |
| | | var palletBindList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.LocatNo.Substring(0,1) != "B").First(); |
| | | if (palletBindList.IsBelt == "1") |
| | | if (palletBindList.IsBale == "2") |
| | | { |
| | | palletBindList.IsBelt = "0"; |
| | | palletBindList.IsBale = "0"; |
| | | Db.Updateable(palletBindList).ExecuteCommand(); |
| | | t = 1; |
| | | } |
| | |
| | | var palletBindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.Status == "1").OrderByDescending(m => m.CreateTime).First(); |
| | | if (palletBindList.IsBale == "1") |
| | | { |
| | | palletBindList.IsBelt = "1"; |
| | | palletBindList.IsBale = "2"; |
| | | Db.Updateable(palletBindList).ExecuteCommand(); |
| | | t = 1; |
| | | } |
| | | |
| | | return t; |
| | |
| | | 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 |
| | | { |
| | | // 正式运行程序放开 |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.ReqCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | string response = ""; |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | try |
| | | //////解析返回数据 |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | if (agvModel.Code == "0") |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | if (agvModel.Code == "0") |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | IsTrue = true; |
| | | } |
| | | if (agvModel.Code == "1") |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message); |
| | | throw new Exception(agvModel.Message); |
| | | } |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | catch (Exception ex) |
| | | if (agvModel.Code == "1") |
| | | { |
| | | throw new Exception(ex.Message); |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message); |
| | | throw new Exception(agvModel.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | 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(); |
| | |
| | | using WMS.IBLL.IBllSoServer; |
| | | using Model.ModelVm; |
| | | using System.Runtime.Intrinsics.X86; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using Model.ModelDto; |
| | | using WMS.BLL.BllPdaServer; |
| | | using WMS.IBLL.IPdaServer; |
| | | using System.DirectoryServices.Protocols; |
| | | using Model.ModelDto.SysDto; |
| | | |
| | | namespace WMS.BLL.BllSoServer |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | //wcs返回的成功信号(出库成功) |
| | | public void ExportSuccess(string taskNo, int userId) |
| | | //wcs返回的成功信号(出库成功) |
| | | public void ExportSuccess(string taskNo, int userId,string url) |
| | | { |
| | | try |
| | | { |
| | | //出库任务号更改,如果由PLC出库,则PLC回传任务号为:任务号+实际出库口 |
| | | var TtaskNo = taskNo; |
| | | var outLine = ""; |
| | | if (userId == 0) |
| | | { |
| | | TtaskNo = taskNo.Substring(0, taskNo.Length - 4); |
| | | outLine = taskNo.Substring(taskNo.Length - 4, 3); |
| | | } |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == TtaskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | throw new Exception($"未查询到任务号为:‘{TtaskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | //出库流水(更改状态) |
| | | var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); |
| | | var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == TtaskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); |
| | | |
| | | foreach (var item in allot) |
| | | { |
| | |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库日志", TtaskNo, "完成", $"点击完成按钮、完成任务号为:{TtaskNo}的任务", userId); |
| | | } |
| | | if (outLine != "") |
| | | { |
| | | #region 分配出库目的位 |
| | | string positionStart = outLine, positionEnd = "" ,type ="D00"; |
| | | var type1 = Db.Queryable<BllExportNotice>().Where(m => m.SONo == allot.First().SONo && m.IsDel == "0" && m.Status == "3").First(); |
| | | if (type1 == null) |
| | | { |
| | | var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B13").ToList(); |
| | | type = "D02" ; //空托盘垛出库 |
| | | if (outLine == "443")//西侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(3, 2) == "01" && m.LocatNo.Substring(3, 2) == "02" && m.LocatNo.Substring(3, 2) == "03" && |
| | | m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else if (outLine == "440") //东侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(4, 2) == "04" && m.LocatNo.Substring(4, 2) == "05" && m.LocatNo.Substring(4, 2) == "06" && |
| | | m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位 |
| | | } |
| | | |
| | | } |
| | | if (type1.Type == "1" && (type1.Type == "5" || (positionStart == "440" && positionStart == "440"))) //3楼领料出库 /3L中间品出库 |
| | | { |
| | | var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B11").ToList(); |
| | | if (outLine == "443")//西侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(3, 2) == "01"&& m.LocatNo.Substring(4, 2) == "02" && m.Status == "0" && m.Flag == "0").LocatNo; //西侧房间库位 |
| | | } |
| | | else if(outLine == "440") //东侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(3, 2) == "03" && m.LocatNo.Substring(4, 2) == "04" && m.LocatNo.Substring(4, 2) == "05" && |
| | | m.LocatNo.Substring(4, 2) == "06" && m.LocatNo.Substring(3, 2) == "07" && m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位 |
| | | } |
| | | } |
| | | else if (type1.Type == "2" && type1.Type == "3") //抽检出库 /取样出库 |
| | | { |
| | | positionEnd = Db.Queryable<SysStorageLocat>().First(m => m.AreaNo == "B04" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else if (type1.Type == "4")//不合格品出库 |
| | | { |
| | | |
| | | positionEnd = Db.Queryable<SysStorageLocat>().First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else //其他单据类型都存放发货缓存区 |
| | | { |
| | | positionEnd = Db.Queryable<SysStorageLocat>().First(m => m.AreaNo == "B02" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | #endregion |
| | | |
| | | #region AGV调用 |
| | | var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == positionEnd && w.Flag == "0" && w.Status == "0"); |
| | | if (storageLocatEnd == null) |
| | | { |
| | | throw new Exception("生成的AGV任务目的地址不正确"); |
| | | } |
| | | List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); |
| | | |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = positionStart, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = positionEnd, |
| | | type = "00" |
| | | }; |
| | | |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | agvTask.ReqCode = TtaskNo; //agv请求编号,需要随机生成 (最大32位) |
| | | agvTask.TaskCode = TtaskNo; //任务号 |
| | | agvTask.TaskTyp = type; //搬运类型 |
| | | agvTask.PositionCodePath = position; //起始和目的位集合 |
| | | agvTask.CtnrTyp = "1"; //容器类型,值为1 |
| | | if (type == "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); |
| | | if (agvModel.Code != "0") |
| | | { |
| | | //记录log |
| | | var logStr = $@".\log\AGV\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | jsonData = JsonConvert.SerializeObject(agvModel); |
| | | LogFile.SaveLogToFile($"AGV任务反馈执行通知:( {jsonData} ),", logStr); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | Db.CommitTran(); |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="taskNo">任务号</param> |
| | | /// <param name="userId">操作人</param> |
| | | /// <exception cref="Exception"></exception> |
| | | /// <exception cref="Exception"></exception> |
| | | public void RelocationSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | |
| | | |
| | | return nowAddress; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取拆垛托盘拆垛信息 |
| | | /// </summary> |
| | | /// <param name="model">拆垛托盘号和WCS任务号</param> |
| | | /// <returns>拆垛托盘信息</returns> |
| | | public RequestBoxInfoCheck BoxInfoCheckWcs (BoxInfoCheck model) |
| | | { |
| | | try |
| | | { |
| | | // 判断当前任务状态 Status 1:正在执行 3:异常结束 |
| | | var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); |
| | | if (taskModel == null) |
| | | { |
| | | throw new Exception("此任务不存在或任务状态已变更!"); |
| | | } |
| | | // 验证托盘分配信息 |
| | | var palletBindModel = Db.Queryable<BllExportAllot>().First(m => m.PalletNo == model.PalletNo && m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); |
| | | if (palletBindModel != null) |
| | | { |
| | | throw new Exception("未找到当前托盘分配任务信息!"); |
| | | } |
| | | //计算当前当前托盘上箱数和拆垛箱数 |
| | | var storcklist = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletBindModel.PalletNo && m.SkuNo == palletBindModel.SkuNo && m.LotNo == palletBindModel.LotNo); |
| | | |
| | | string level = "1"; |
| | | int qty = 0, qtycount = 0; |
| | | var packlist = Db.Queryable<SysPackag>().First(m => m.PackagNo == palletBindModel.SkuNo && m.IsDel == "0"); |
| | | if (packlist.L2Name == "箱") |
| | | { |
| | | level = "2"; |
| | | } |
| | | switch (level) |
| | | { |
| | | case "1": |
| | | qty = (int)(palletBindModel.Qty / packlist.L1Num); |
| | | qtycount = (int)(storcklist.Qty / packlist.L1Num); |
| | | break; |
| | | case "2": |
| | | qty = (int)(palletBindModel.Qty / packlist.L2Num); |
| | | qtycount = (int)(storcklist.Qty / packlist.L2Num); |
| | | break; |
| | | |
| | | } |
| | | |
| | | var list = new RequestBoxInfoCheck |
| | | { |
| | | PalletNo = model.PalletNo, |
| | | TaskNo = model.TaskNo, |
| | | SkuNo = palletBindModel.SkuNo, |
| | | SkuName = palletBindModel.SkuName, |
| | | LotNo = palletBindModel.LotNo, |
| | | OrderNo = palletBindModel.SONo, |
| | | Standard = palletBindModel.Standard, |
| | | Qty = qty,//拆垛箱数 |
| | | QtyCount = qtycount //托盘上箱数 |
| | | }; |
| | | return list; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取拆垛分拣主扫箱码出库 |
| | | /// </summary> |
| | | /// <param name="model">拆垛托盘号和WCS任务号</param> |
| | | /// <returns>拆垛托盘信息</returns> |
| | | public string BoxInfoExportWcs(string boxno) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrWhiteSpace(boxno)) |
| | | { |
| | | throw new Exception("主扫分拣箱码为空"); |
| | | } |
| | | //箱码所在拆垛拣货信息 |
| | | var boxModel = Db.Queryable<DataBoxInfo>().First(m=>m.BoxNo == boxno); |
| | | if (boxModel == null) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == boxModel.PalletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | } |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == allot.SONo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == allot.SODetailNo); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | } |
| | | |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxno && m.StockDetailId == stockDetail.Id); |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == boxModel.PalletNo).ToList(); |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != boxModel.PalletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | decimal pickQty = 0;//拣货的数量 |
| | | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = allot.SONo, |
| | | SODetailNo = allot.SODetailNo, |
| | | ExportAllotId = allot.Id, |
| | | StockId = allot.StockId, |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | |
| | | LotNo = allot.LotNo, |
| | | LotText = allot.LotText, |
| | | SupplierLot = allot.SupplierLot, |
| | | SkuNo = allot.SkuNo, |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = boxModel.PalletNo, |
| | | CompleteQty = item.Qty, |
| | | |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | |
| | | pickQty += item.Qty; |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | if (allot.Status == "5") |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | | } |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= pickQty; |
| | | stockDetail.LockQty -= pickQty; |
| | | if (stockDetail.Qty == stockDetail.LockQty) |
| | | { |
| | | stockDetail.Status = "2"; |
| | | } |
| | | else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) |
| | | { |
| | | stockDetail.Status = "1"; |
| | | } |
| | | else |
| | | { |
| | | stockDetail.Status = "0"; |
| | | } |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == boxModel.PalletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == boxModel.PalletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == allot.SONo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | return ""; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | using Model.ModelVm.DataVm; |
| | | using SqlSugar; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllSoEntity; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | | using WMS.Entity.LogEntity; |
| | | using WMS.Entity.SysEntity; |
| | | using WMS.IBLL.IDataServer; |
| | | |
| | |
| | | return stockDetailsList; |
| | | } |
| | | #endregion |
| | | |
| | | #region AGV小车任务完成 |
| | | |
| | | /// <summary> |
| | | /// AGV入库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <returns></returns> |
| | | public void ArriveFinish(string TaskCode) |
| | | { |
| | | try |
| | | { |
| | | var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.OrderType == "0");//获取任务信息 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | //修改起始库位状态 |
| | | storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //修改任务状态 |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LocatNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.WareHouseNo = ""; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | //下发WCS申请入库 |
| | | |
| | | |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// AGV出库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <returns></returns> |
| | | public void SoFinish(string TaskCode) |
| | | { |
| | | try |
| | | { |
| | | var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.OrderType == "1");//获取任务信息 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息 |
| | | var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息 |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //修改目的库位状态 |
| | | storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //修改任务状态 |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "2";// 0:待分配 1:部分分配 2:已分配 3:盘点锁定: 4移库锁定 |
| | | stockDetail.LocatNo = storageLocat.LocatNo; |
| | | stockDetail.AreaNo = storageLocat.AreaNo; |
| | | stockDetail.RoadwayNo = storageLocat.RoadwayNo; |
| | | stockDetail.WareHouseNo = storageLocat.WareHouseNo; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception ex ) |
| | | { |
| | | |
| | | throw new Exception("AGV返回出库完成信号处理错误,错误信息:" + ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// AGV移库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <returns></returns> |
| | | public void MoveFinish(string TaskCode) |
| | | { |
| | | try |
| | | { |
| | | var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.OrderType == "3");//获取任务信息 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息 |
| | | var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息 |
| | | //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息 |
| | | |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //修改起始库位状态 |
| | | storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //修改目的库位状态 |
| | | storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //修改任务状态 |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "2";// 0:待分配 1:部分分配 2:已分配 3:盘点锁定: 4移库锁定 |
| | | stockDetail.LocatNo = storageLocat.LocatNo; |
| | | stockDetail.AreaNo = storageLocat.AreaNo; |
| | | stockDetail.RoadwayNo = storageLocat.RoadwayNo; |
| | | stockDetail.WareHouseNo = storageLocat.WareHouseNo; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw new Exception("AGV返回移库完成信号处理错误,错误信息:"+ex); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | HttpReturnModel HttpCreateAsn(AsnInfo model); |
| | | HttpReturnModel HttpCreateAsn(AsnInfo model,string url); |
| | | /// <summary> |
| | | /// 订单回传上游系统 |
| | | /// </summary> |
| | |
| | | /// <param name="taskNo">任务号</param> |
| | | /// <param name="userId">操作人</param> |
| | | /// <returns></returns> |
| | | void ExportSuccess(string taskNo,int userId); |
| | | void ExportSuccess(string taskNo,int userId,string url); |
| | | |
| | | /// <summary> |
| | | /// wcs返回的成功信号或手动完成(移库成功) |
| | |
| | | /// <param name="soNo"></param> |
| | | /// <returns></returns> |
| | | string IsNeedUnpack(string soNo); |
| | | |
| | | /// <summary> |
| | | /// 获取拆垛托盘拆垛信息 |
| | | /// </summary> |
| | | /// <param name="model">拆垛托盘号和WCS任务号</param> |
| | | /// <returns>拆垛托盘信息</returns> |
| | | |
| | | public RequestBoxInfoCheck BoxInfoCheckWcs(BoxInfoCheck model); |
| | | } |
| | | } |
| | |
| | | /// <returns></returns> |
| | | List<StockDetailDto> GetInventoryList1DaoChu(string skuNo, string skuName, string lotNo, string locatNo, string palletNo, string status, string inspectStatus); |
| | | #endregion |
| | | |
| | | #region AGV小车任务完成 |
| | | /// <summary> |
| | | /// 入库任务完成 |
| | | /// </summary> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <param name="skuName">物料名称</param> |
| | | /// <returns></returns> |
| | | public void ArriveFinish(string TaskCode); |
| | | /// <summary> |
| | | /// 出库任务完成 |
| | | /// </summary> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <param name="skuName">物料名称</param> |
| | | /// <returns></returns> |
| | | public void SoFinish(string TaskCode); |
| | | /// <summary> |
| | | /// 移库任务完成 |
| | | /// </summary> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <param name="skuName">物料名称</param> |
| | | /// <returns></returns> |
| | | public void MoveFinish(string TaskCode); |
| | | #endregion |
| | | } |
| | | } |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto.BllCheckDto; |
| | | using Model.ModelDto.PdaDto; |
| | | using WMS.Entity.DataEntity; |
| | |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="areaNo"></param> |
| | | /// <param name="userId"></param> |
| | | List<string> AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url); |
| | | List<string> AgvTransport2(string soNo, string palletNo, string areaNo,string ruku, int userId, string url); |
| | | |
| | | /// <summary> |
| | | /// agv任务下发 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | public OutCommanAgvDto AGVTask(string type, string taskno, string positionStart, string positionEnd, string url); |
| | | |
| | | /// <summary> |
| | | /// agv任务取消 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | public void cancelTask(string taskno, string url); |
| | | #endregion |
| | | |
| | | #region 人工转运 |
| | |
| | | var type = _taskSvc.GetTaskType(taskNo); |
| | | if (type == "1")//出库完成 |
| | | { |
| | | _exNoticeSvc.ExportSuccess(taskNo, int.Parse(userId)); |
| | | _exNoticeSvc.ExportSuccess(taskNo, int.Parse(userId), ""); |
| | | } |
| | | else if (type == "2")//出库时产生的移库任务完成 |
| | | { |
| | |
| | | using Model.ModelVm.PdaVm; |
| | | using WMS.IBLL.IPdaServer; |
| | | using Model.ModelVm; |
| | | using WMS.IBLL.IDataServer; |
| | | |
| | | namespace Wms.Controllers |
| | | { |
| | |
| | | private readonly ITaskServer _taskSvc;//任务Svc |
| | | private readonly IPdaSoServer _pdaSoSvc;//空托出库Svc |
| | | private readonly IPdaAsnServer _paAsnSvc;//空托跺绑定 |
| | | private readonly IStockServer _stockSvc;//AGV任务完成箅 |
| | | |
| | | public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IPdaSoServer pdaSoSvc,IPdaAsnServer paAsnSvc) |
| | | public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IPdaSoServer pdaSoSvc,IPdaAsnServer paAsnSvc,IStockServer stockSvc) |
| | | { |
| | | _config = setting.Value; |
| | | _exNoticeSvc = exNoticeSvc; |
| | |
| | | _taskSvc = taskSvc; |
| | | _pdaSoSvc = pdaSoSvc; |
| | | _paAsnSvc = paAsnSvc; |
| | | _stockSvc = stockSvc; |
| | | } |
| | | |
| | | #region WMS接口 调用下游系统接口 |
| | |
| | | case "1"://出库完成任务 |
| | | if (model.TaskType == "1")//0:入库 1:出库 2:移库 |
| | | { |
| | | _exNoticeSvc.ExportSuccess(model.TaskNo, 0); |
| | | _exNoticeSvc.ExportSuccess(model.TaskNo, 0, _config.AgvHost + _config.GenAgvSchedulingTask); |
| | | return Ok(new WcsModel { StatusCode = 0, Msg = "出库完成" }); |
| | | } |
| | | else if (model.TaskType == "2") |
| | |
| | | |
| | | //车间叫料 |
| | | |
| | | //WCS申请拆垛信息 |
| | | /// <summary> |
| | | /// 成品箱码拆垛拣货 |
| | | /// </summary> |
| | | /// <param name="model">入库单信息</param> |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public IActionResult ResultBoxInfoCheckWcs(BoxInfoCheck model) |
| | | { |
| | | var logStr = $@".\log\WCS\WCS申请拆垛托盘信息" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | try |
| | | { |
| | | RequestBoxInfoCheck list = _exNoticeSvc.BoxInfoCheckWcs(model); |
| | | return Ok(new { Success = 1,Message = "拆垛信息获取成功",data = list}); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"WCS申请托盘拆垛异常返回:( {e.Message} ),", logStr); |
| | | |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message}); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | #region AGV |
| | | |
| | |
| | | /// AGV 执行回调的方法,包含任务开始,走出储位,任务完成及任务取消。 |
| | | /// 取消通知为任务单,其他通知为单个任务组或子任务。注意:是否通知需要在任务模板配置 |
| | | /// </summary> |
| | | /// <param name="model">入库单信息</param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | [HttpPost] |
| | | public IActionResult AgvCallback(AgvContinueTask model) |
| | | public IActionResult AgvCallback(AgvTaskDto model) |
| | | { |
| | | try |
| | | { |
| | |
| | | |
| | | //接收时间 |
| | | var time1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | //测试接口用 |
| | | var orderType = _taskSvc.GetTaskOrderType(model.TaskCode);// 判断单据类型入出移 |
| | | |
| | | var taskType = _taskSvc.GetTaskType(model.TaskCode);//根据任务号获取任务类型 |
| | | switch (orderType) |
| | | { |
| | | case "0"://入库任务执行 |
| | | _stockSvc.ArriveFinish(model.TaskCode); |
| | | break; |
| | | |
| | | case "1"://出库任务执行 |
| | | _stockSvc.SoFinish(model.TaskCode); |
| | | break; |
| | | |
| | | case "2"://盘库任务执行 |
| | | |
| | | case "3"://移库任务执行 |
| | | return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode }); |
| | | _stockSvc.MoveFinish(model.TaskCode); |
| | | break; |
| | | // return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode }); |
| | | |
| | | default: |
| | | return Ok(new OutCommanAgvDto { Code = "1", Message = "失败", ReqCode = model.ReqCode }); |
| | | } |
| | | return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode }); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | |
| | | } |
| | | |
| | | var uId = int.Parse(userId); |
| | | _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, uId, _config.WcsHost + _config.GenAgvSchedulingTask); |
| | | _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, uId, _config.AgvHost + _config.GenAgvSchedulingTask); |
| | | |
| | | return Ok(new { data = "", code = 0, msg = "成功" }); |
| | | } |
| | |
| | | } |
| | | |
| | | var uId = int.Parse(userId); |
| | | var str = _pdaCrSvc.AgvTransport2(model.SoNo,model.PalletNo, model.AreaNo, uId, _config.WcsHost + _config.GenAgvSchedulingTask); |
| | | var str = _pdaCrSvc.AgvTransport2(model.SoNo,model.PalletNo, model.AreaNo,model.Ruku, uId, _config.WcsHost + _config.GenAgvSchedulingTask); |
| | | var msgStr = ""; |
| | | if (str.Contains("0")) |
| | | { |
| | |
| | | using WMS.IBLL.IBllCheckServer; |
| | | using Model.ModelVm.BllCheckVm; |
| | | using Microsoft.Extensions.Logging; |
| | | using WMS.IBLL.IPdaServer; |
| | | |
| | | namespace Wms.Controllers |
| | | { |
| | |
| | | private readonly IExportNoticeServer _exNoticeSvc;//出库单Svc |
| | | private readonly IArrivalNoticeServer _arrivalNoticeSvc; |
| | | private readonly IStockCheckServer _stockCheckSvc;//盘点单Svc |
| | | public UpApiController(IOptions<ApiUrlConfig> setting,IExportNoticeServer exNoticeSvc,IArrivalNoticeServer arrivalNoticeServer,IStockCheckServer stockCheckSvc) |
| | | private readonly IPdaCrServer _daCrSvc;//PDA |
| | | public UpApiController(IOptions<ApiUrlConfig> setting,IExportNoticeServer exNoticeSvc,IArrivalNoticeServer arrivalNoticeServer,IStockCheckServer stockCheckSvc,IPdaCrServer daCrSvc) |
| | | { |
| | | _config = setting.Value; |
| | | _exNoticeSvc = exNoticeSvc; |
| | | _arrivalNoticeSvc = arrivalNoticeServer; |
| | | _stockCheckSvc = stockCheckSvc; |
| | | _daCrSvc = daCrSvc; |
| | | } |
| | | #endregion |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [HttpPost] |
| | | public IActionResult FinishExportNotice(FinshVm model) |
| | | { |
| | | try |
| | |
| | | } |
| | | } |
| | | |
| | | //箱码信息 手持组托用 (扫箱码向追溯要信息) |
| | | //箱码信息 手持组托用 (扫箱码向追溯要信息) |
| | | // |
| | | |
| | | |
| | | /// <summary> |
| | | /// 下发AGV调度任务 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult AGVTask(string type, string taskno, string positionStart, string positionEnd) |
| | | { |
| | | try |
| | | { |
| | | |
| | | OutCommanAgvDto agvRequest = _daCrSvc.AGVTask(type,taskno,positionStart,positionEnd, _config.AgvHost + _config.GenAgvSchedulingTask); |
| | | if (agvRequest.Code != "0") |
| | | { |
| | | return Ok(new { code = 1, msg = "小车任务执行失败" }); |
| | | } |
| | | |
| | | return Ok(new { code = 1, msg = "AGV任务下发成功" }); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 下发AGV取消任务 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult cancelTask(string taskno) |
| | | { |
| | | try |
| | | { |
| | | |
| | | _daCrSvc.cancelTask(taskno, _config.AgvHost + _config.CancelTask); |
| | | return Ok(new { code = 1, msg = "AGV任务取消成功" }); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | |
| | | LogFile.SaveLogToFile($"入库单下发:( {jsonData} ),", logStr); |
| | | } |
| | | |
| | | result = _arrivalNoticeSvc.HttpCreateAsn(model); |
| | | result = _arrivalNoticeSvc.HttpCreateAsn(model, _config.WcsHost + _config.AddOrderTaskUrl); |
| | | if (logStr != "") |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(result); |
| | |
| | | { |
| | | "iisSettings": { |
| | | "windowsAuthentication": false, |
| | | "anonymousAuthentication": true, |
| | | "iisExpress": { |
| | | "applicationUrl": "http://localhost:50515/", |
| | | "sslPort": 44363 |
| | | } |
| | | }, |
| | | "$schema": "http://json.schemastore.org/launchsettings.json", |
| | | "profiles": { |
| | | "IIS Express": { |
| | | "commandName": "IISExpress", |
| | | "launchBrowser": true, |
| | | "environmentVariables": { |
| | | "ASPNETCORE_ENVIRONMENT": "Development" |
| | | } |
| | | }, |
| | | "sqlDebugging": false, |
| | | "nativeDebugging": true |
| | | }, |
| | | "Wms": { |
| | | "commandName": "Project", |
| | |
| | | }, |
| | | "applicationUrl": "https://localhost:5001;http://localhost:5000" |
| | | } |
| | | }, |
| | | "$schema": "http://json.schemastore.org/launchsettings.json", |
| | | "iisSettings": { |
| | | "windowsAuthentication": false, |
| | | "anonymousAuthentication": true, |
| | | "iisExpress": { |
| | | "applicationUrl": "http://192.168.137.94:8081/", |
| | | "sslPort": 44363 |
| | | } |
| | | } |
| | | } |
| | |
| | | public string GenAgvSchedulingTask { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 取消任务接口 |
| | | /// </summary> |
| | | public string CancelTask { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 继续执行任务接口 |
| | | /// </summary> |
| | | public string ContinueTask { get; set; } |
| | |
| | | "MesHost": "http://10.18.99.67:3000", //mesIP |
| | | "WcsHost": "http://10.60.16.10:5005", // "http://localhost:57061", //wcsIPhttp://localhost:57061/ |
| | | "BoxHost": "http://10.110.24.30:8081", //boxIP |
| | | "AgvHost": "http://10.110.24.30:8081", //agvIP |
| | | "AgvHost": "http://10.18.99.66:8181", //agvIP |
| | | |
| | | // WCS |
| | | "IssueComApiUrl": "/api/demo/wcsTasks", //下发命令(出库、移库) |
| | |
| | | "FuMaGetTokenUrl": "/port/mes/service/system/sign_login", //获取令牌 |
| | | |
| | | // AGV |
| | | "GenAgvSchedulingTask": "http://IP:PORT/rcms/services/rest/hikRpcService/genAgvSchedulingTask", //生成任务单接口 |
| | | "ContinueTask": "http://IP:PORT/rcms/services/rest/hikRpcService/continueTask", //继续执行任务接口 |
| | | "GenPreScheduleTask": "http://IP:PORT/rcms/services/rest/hikRpcService/genPreScheduleTask" // 预调度对外接口 |
| | | "GenAgvSchedulingTask": "/rcms/services/rest/hikRpcService/genAgvSchedulingTask", //生成任务单接口 |
| | | "CancelTask": "/rcms/services/rest/hikRpcService/cancelTask",//取消任务接口 |
| | | "ContinueTask": "/rcms/services/rest/hikRpcService/continueTask", //继续执行任务接口 |
| | | "GenPreScheduleTask": "/rcms/services/rest/hikRpcService/genPreScheduleTask" // 预调度对外接口 |
| | | }, |
| | | "MesConfig": { |
| | | "MesUser": "wms", |