|  |  |  | 
|---|
|  |  |  | using System.Drawing.Drawing2D; | 
|---|
|  |  |  | using Model.ModelDto.LogDto; | 
|---|
|  |  |  | using AutoMapper.Internal; | 
|---|
|  |  |  | using System.Diagnostics.Contracts; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace WMS.BLL.BllSoServer | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("批次不可为空!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //库存明细 | 
|---|
|  |  |  | List<DataStockDetail> stockDetails; | 
|---|
|  |  |  | //指定批次 | 
|---|
|  |  |  | 
|---|
|  |  |  | q2 = q3; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (q2 > d.skuQty - q1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (!dic.ContainsKey(stockInfo.Id)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | dic.Add(stockInfo.Id, d.skuQty - q1); | 
|---|
|  |  |  | 
|---|
|  |  |  | q1 += d.skuQty - q1; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (!dic.ContainsKey(stockInfo.Id)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | dic.Add(stockInfo.Id, (decimal)q2); | 
|---|
|  |  |  | 
|---|
|  |  |  | var notice = new BllExportNotice() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SONo = billNo, | 
|---|
|  |  |  | OrderCode=model.orderNo, | 
|---|
|  |  |  | OrderCode = model.orderNo, | 
|---|
|  |  |  | Type = model.orderType, | 
|---|
|  |  |  | Status = "0", | 
|---|
|  |  |  | Origin = "SAP", | 
|---|
|  |  |  | 
|---|
|  |  |  | IsWave = "0", | 
|---|
|  |  |  | WaveNo = "", | 
|---|
|  |  |  | IsDespatch = "0", | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CreateUser = 0, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (houseNo == "1000" || houseNo == "1001" || houseNo == "2000" || houseNo == "2002" || houseNo == "2003" || houseNo == "2004") | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | #region 通过接口发送至erp | 
|---|
|  |  |  | //系统对接后放开 | 
|---|
|  |  |  | /*var jsonData = JsonConvert.SerializeObject(soInfo); | 
|---|
|  |  |  | var jsonData = JsonConvert.SerializeObject(soInfo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var response = HttpHelper.DoPost(url, jsonData, "出库单完成上传", "ERP"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if (obj.Success != 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("上传失败" + obj.Message); | 
|---|
|  |  |  | }*/ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //生产叫料 | 
|---|
|  |  |  | public bool MESProductionCall(ProductionCallVm model) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //验证是否备料完成 | 
|---|
|  |  |  | var notice = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.OrderCode == model.OrderCode); | 
|---|
|  |  |  | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.OrderCode == model.OrderCode); | 
|---|
|  |  |  | if (notice == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("未查询到此工单号"); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new Exception("当前单据物料在此投料口叫料信息已收到,无需重复下发"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断当前投料口是否有其它工单投料 | 
|---|
|  |  |  | var call2 = Db.Queryable<BllProductionCallTask>().First(m => m.IsDel == "0" && m.PutInLocation == model.PutInLocation && m.OrderCode != model.OrderCode ); | 
|---|
|  |  |  | var call2 = Db.Queryable<BllProductionCallTask>().First(m => m.IsDel == "0" && m.PutInLocation == model.PutInLocation && m.OrderCode != model.OrderCode); | 
|---|
|  |  |  | if (call2 != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("此投料口有其它单据物料叫料信息"); | 
|---|
|  |  |  | 
|---|
|  |  |  | foreach (var pro in proCallList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var item in locateList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //获取备好料的托盘信息 | 
|---|
|  |  |  | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "2" && m.SONo == notice.SONo && m.SkuNo == pro.SkuNo && !list.Contains(m.Id)).Select(m => m.PalletNo).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | Db.Insertable(exTask).ExecuteCommand(); | 
|---|
|  |  |  | //更改分配表的任务号列 | 
|---|
|  |  |  | var allot = Db.Queryable<BllExportAllot>().First(m=>m.IsDel == "0" && m.Status =="2" && m.SONo == notice.SONo &&  m.StockId == stockDetail.Id); | 
|---|
|  |  |  | var allot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "2" && m.SONo == notice.SONo && m.StockId == stockDetail.Id); | 
|---|
|  |  |  | allot.TaskNo = taskNo; | 
|---|
|  |  |  | Db.Updateable(allot).ExecuteCommand(); | 
|---|
|  |  |  | list.Add(allot.Id); | 
|---|
|  |  |  | 
|---|
|  |  |  | item.PalletNo = stockDetail.PalletNo; | 
|---|
|  |  |  | Db.Updateable(item).ExecuteCommand(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locate = Db.Queryable<SysStorageLocat>().First(m=>m.LocatNo == stockDetail.LocatNo); | 
|---|
|  |  |  | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == stockDetail.LocatNo); | 
|---|
|  |  |  | locate.Status = "5"; | 
|---|
|  |  |  | Db.Updateable(locate).ExecuteCommand(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Db.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | Db.RollbackTran(); | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | 
|---|
|  |  |  | .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) | 
|---|
|  |  |  | .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) | 
|---|
|  |  |  | .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id) | 
|---|
|  |  |  | .LeftJoin<SysWareHouse>((a, b, c, d, e,f) => a.WareHouseNo == f.WareHouseNo) | 
|---|
|  |  |  | .Select((a, b, c, d, e,f) => new ExportNoticeDto() | 
|---|
|  |  |  | .LeftJoin<SysWareHouse>((a, b, c, d, e, f) => a.WareHouseNo == f.WareHouseNo) | 
|---|
|  |  |  | .Select((a, b, c, d, e, f) => new ExportNoticeDto() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Id = a.Id, | 
|---|
|  |  |  | SONo = a.SONo, | 
|---|
|  |  |  | 
|---|
|  |  |  | WaveNo = a.WaveNo, | 
|---|
|  |  |  | IsDespatch = a.IsDespatch, | 
|---|
|  |  |  | Demo = a.Demo, | 
|---|
|  |  |  | OrderCode = a.OrderCode, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CreateUserName = c.RealName, | 
|---|
|  |  |  | UpdateUserName = c.RealName, | 
|---|
|  |  |  | 
|---|
|  |  |  | switch (type)//0:原料 1:包材 2:成品 3:耗材 4:半成品 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | case "0"://成品出库 | 
|---|
|  |  |  | if (house !="W01") | 
|---|
|  |  |  | if (house != "W01") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("成品出库只能选择成品库"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | inspectStatus = "1"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "1"://领料出库 | 
|---|
|  |  |  | if (house != "W02") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("领料出库只能选择原料库"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (house != "W02") | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw new Exception("领料出库只能选择原料库"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | skuType = "(0,1,3)"; | 
|---|
|  |  |  | inspectStatus = "1"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | inspectStatus = "0,1"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "9"://生产领料出库 | 
|---|
|  |  |  | if (house != "W02") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("生产领料出库只能选择原料库"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (house != "W02") | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw new Exception("生产领料出库只能选择原料库"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | skuType = "(0,1,3)"; | 
|---|
|  |  |  | inspectStatus = "1"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | switch (model.WareHouseNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | case "W01"://成品库 | 
|---|
|  |  |  | if (skuList.Any(m=>m.Type !="2")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("仓库与出库物料不符"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (skuList.Any(m => m.Type != "2")) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw new Exception("仓库与出库物料不符"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "W02"://原料库 | 
|---|
|  |  |  | if (skuList.Any(m => m.Type == "2")) | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("未查询到出库单据信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (notice.Origin != "WMS" || notice.Status != "0") | 
|---|
|  |  |  | if (notice.Status != "0")//notice.Origin != "WMS" || | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("参数异常,请检查状态是否未等待执行或来源是否是WMS"); | 
|---|
|  |  |  | throw new Exception("参数异常,请检查状态是否未等待执行"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //总库存信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (d.Qty != d.CompleteQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (d.Qty != d.CompleteQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | #region 库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了) | 
|---|
|  |  |  | /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo); | 
|---|
|  |  |  | if (!string.IsNullOrWhiteSpace(d.LotNo)) | 
|---|
|  |  |  | 
|---|
|  |  |  | .AndIF(!string.IsNullOrWhiteSpace(model.BitPalletMark), m => m.BitPalletMark == model.BitPalletMark) | 
|---|
|  |  |  | .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo)) | 
|---|
|  |  |  | .And(a => a.Status == "0") | 
|---|
|  |  |  | .And(a => a.WareHouseNo == "W02") | 
|---|
|  |  |  | .And(a => a.WareHouseNo == "W01" || a.WareHouseNo == "W02") | 
|---|
|  |  |  | .ToExpression(); | 
|---|
|  |  |  | var data = await Db.Queryable<DataStockDetail>().Where(item).OrderBy(m => m.LocatNo).ToPageListAsync(model.Page, model.Limit, count); | 
|---|
|  |  |  | //data.Select(m => m.Status == "0" && m.IsDel == "0"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 托盘出库(密集库) | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="palletNo"></param> | 
|---|
|  |  |  | /// <param name="outMode"></param> | 
|---|
|  |  |  | /// <param name="userId"></param> | 
|---|
|  |  |  | /// <param name="url"></param> | 
|---|
|  |  |  | /// <param name="str"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | /// <exception cref="Exception"></exception> | 
|---|
|  |  |  | public List<OutCommandDto> IssuePalletNoOutMk(string palletNo, string outMode, int userId, string url, out string str) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //判断托盘号是否为空 | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"托盘号不能为空,请核实"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | str = ""; | 
|---|
|  |  |  | var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stockDetailList.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"未在库内查询到该托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var stocka = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetailList[0].SkuNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //验证库存托盘状态 | 
|---|
|  |  |  | if (stockDetailList[0].Status != "0") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"当前托盘未处于待分配状态,请核实!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断托盘库存信息分组后是否大于1条 | 
|---|
|  |  |  | var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList(); | 
|---|
|  |  |  | if (detailGroup.Count > 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"未在库内查询到该托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locatStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stockDetailList[0].LocatNo && w.Status == "1"); | 
|---|
|  |  |  | if (locatStart == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"起始储位不存在或非空闲,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #region 集合 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var outDto1 = new List<OutCommandDto>(); //先出库数据的集合(深度为1的储位) | 
|---|
|  |  |  | var outDto2 = new List<OutCommandDto>(); //后出库数据的集合(深度为2的储位) | 
|---|
|  |  |  | var moveDto = new List<OutCommandDto>(); //要移库数据的集合 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | var com = new Common(); | 
|---|
|  |  |  | var allot = new AllotLocation(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 集合 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Db.BeginTran(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<LogTask> logTaskList = new List<LogTask>();//此次出库任务集合,为应对同托盘不同物料出库 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var taskNoStr = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 储位号 | 
|---|
|  |  |  | var locateNo = locatStart.LocatNo; | 
|---|
|  |  |  | List<string> locateListStrs = new List<string>(); | 
|---|
|  |  |  | locateListStrs.Add(locateNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var row1 = int.Parse(locatStart.LocatNo.Substring(2, 2)); | 
|---|
|  |  |  | var row2 = int.Parse(locatStart.AisleOne.Substring(2, 2)); | 
|---|
|  |  |  | //需要移库的信息 | 
|---|
|  |  |  | var NeedMoveInfo = IsNeedMoveLocate(locatStart, locateListStrs, out int isOut); | 
|---|
|  |  |  | if (isOut == 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //巷道组中有入库或移入的储位,或者是当前储位前有储位未下发成功的任务 | 
|---|
|  |  |  | throw new Exception($"巷道组中有入库或移入的储位,请稍后再试"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (NeedMoveInfo.Count > 0)//需要移库 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //判断库内空储位是否够 | 
|---|
|  |  |  | var okRoad = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == locatStart.WareHouseNo).Select(m => m.RoadwayNo).ToList(); | 
|---|
|  |  |  | var nullSlotNum = Db.Queryable<SysStorageLocat>().Count(m => m.RoadwayNo != locatStart.RoadwayNo && okRoad.Contains(m.RoadwayNo) && m.Status == "0"); | 
|---|
|  |  |  | //判断空储位的数量是否大于需要移库的数量 | 
|---|
|  |  |  | if (nullSlotNum >= NeedMoveInfo.Count) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var s in NeedMoveInfo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //储位列 | 
|---|
|  |  |  | var rows = int.Parse(s.Substring(2, 2)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取移库储位 | 
|---|
|  |  |  | var moveAddress = GetMiJiMoveAddress(s, locatStart.AisleOne); | 
|---|
|  |  |  | var tary = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == s); | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(moveAddress)) // 判断是否获取到移库的库位 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"出库前有货物,需移库但未查询到空储位"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var ykTaskNo = new Common().GetMaxNo("TK"); | 
|---|
|  |  |  | var ykTask = new LogTask    //出库任务 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TaskNo = ykTaskNo, | 
|---|
|  |  |  | Sender = "WMS", | 
|---|
|  |  |  | Receiver = "WCS", | 
|---|
|  |  |  | IsSuccess = 0, //是否下发成功 0失败 1成功 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StartLocat = s,//起始位置 | 
|---|
|  |  |  | EndLocat = moveAddress,//outMode,//目标位置 | 
|---|
|  |  |  | PalletNo = tary.PalletNo,//托盘码 | 
|---|
|  |  |  | IsSend = 1,//是否可再次下发 | 
|---|
|  |  |  | IsCancel = 1,//是否可取消 | 
|---|
|  |  |  | IsFinish = 1,//是否可完成 | 
|---|
|  |  |  | Type = "2",//任务类型 0 入库任务 1 出库任务  2 移库任务 | 
|---|
|  |  |  | Status = "0",//任务状态0:等待执行1正在执行2执行完成 | 
|---|
|  |  |  | OrderType = "1",//0 入库单 1 出库单  2 盘点单  3 移库单 | 
|---|
|  |  |  | Msg = "从" + s + "到" + moveAddress + "的移库任务", //关键信息 | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | Db.Insertable(ykTask).ExecuteCommand(); | 
|---|
|  |  |  | logTaskList.Add(ykTask); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | outDto1.Add(new OutCommandDto() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PalletNo = ykTask.PalletNo,//托盘号 | 
|---|
|  |  |  | StartLocate = ykTask.StartLocat, // 起始位置 | 
|---|
|  |  |  | StartRoadway = locatStart.RoadwayNo,//其实巷道 | 
|---|
|  |  |  | EndLocate = moveAddress,//outMode, // 目标位置 | 
|---|
|  |  |  | TaskNo = ykTaskNo, // 任务号 | 
|---|
|  |  |  | TaskType = "2",// 任务类型 (出库)0入 1出 2移 | 
|---|
|  |  |  | Order = Math.Abs(row2 - rows), | 
|---|
|  |  |  | Type = PLCTypeEnum.ShuttleCar | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s); | 
|---|
|  |  |  | var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | slotChange.Status = "5"; //改变状态(正在出库) | 
|---|
|  |  |  | slotChange2.Status = "4"; // 改变状态(正在移入) | 
|---|
|  |  |  | Db.Updateable(slotChange).ExecuteCommand(); | 
|---|
|  |  |  | Db.Updateable(slotChange2).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"出库前有货物,需移库但空储位不够移库"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #region 添加出库任务 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var taskNo = new Common().GetMaxNo("TK"); | 
|---|
|  |  |  | var exTask = new LogTask    //出库任务 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TaskNo = taskNo, | 
|---|
|  |  |  | Sender = "WMS", | 
|---|
|  |  |  | Receiver = "WCS", | 
|---|
|  |  |  | IsSuccess = 0, //是否下发成功 0失败 1成功 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StartLocat = locatStart.LocatNo,//起始位置 | 
|---|
|  |  |  | EndLocat = outMode,//outMode,//目标位置 | 
|---|
|  |  |  | PalletNo = palletNo,//托盘码 | 
|---|
|  |  |  | IsSend = 1,//是否可再次下发 | 
|---|
|  |  |  | IsCancel = 1,//是否可取消 | 
|---|
|  |  |  | IsFinish = 1,//是否可完成 | 
|---|
|  |  |  | Type = "1",//任务类型 0 入库任务 1 出库任务  2 移库任务 | 
|---|
|  |  |  | Status = "0",//任务状态0:等待执行1正在执行2执行完成 | 
|---|
|  |  |  | OrderType = "1",//0 入库单 1 出库单  2 盘点单  3 移库单 | 
|---|
|  |  |  | Msg = "从" + locatStart.LocatNo + "到" + outMode + "的出库任务", //关键信息 | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | Db.Insertable(exTask).ExecuteCommand(); | 
|---|
|  |  |  | logTaskList.Add(exTask); | 
|---|
|  |  |  | var endroad = allot.RoadwayToStationNum(locatStart.RoadwayNo, outMode); | 
|---|
|  |  |  | outDto1.Add(new OutCommandDto() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PalletNo = palletNo,//托盘号 | 
|---|
|  |  |  | StartLocate = locatStart.LocatNo, // 起始位置 | 
|---|
|  |  |  | StartRoadway = locatStart.RoadwayNo,//起始巷道 | 
|---|
|  |  |  | EndLocate = outMode,//, // 目标位置 | 
|---|
|  |  |  | EndRoadway = endroad, | 
|---|
|  |  |  | TaskNo = exTask.TaskNo, // 任务号 | 
|---|
|  |  |  | TaskType = "1",// 任务类型 (出库)0入 1出 2移 | 
|---|
|  |  |  | OutMode = outMode,  //出库口 | 
|---|
|  |  |  | Order = Math.Abs(row2 - row1), | 
|---|
|  |  |  | Type = PLCTypeEnum.ShuttleCar | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | taskNoStr = exTask.TaskNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 改变数据 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | locatStart.Status = "3"; //要出库的储位改变状态 正在出库 | 
|---|
|  |  |  | Db.Updateable(locatStart).ExecuteCommand(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | outDto1.AddRange(moveDto); | 
|---|
|  |  |  | outDto1.AddRange(outDto2); | 
|---|
|  |  |  | //添加操作日志记录 | 
|---|
|  |  |  | new OperationSOServer().AddLogOperationSo("出库作业", "托盘出库", palletNo, "出库", $"点击出库按钮出库托盘为:{palletNo}", userId); | 
|---|
|  |  |  | Db.CommitTran(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (outDto1.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 正式运行程序放开 | 
|---|
|  |  |  | var list2 = outDto1.Select(m => m.TaskNo).ToList(); | 
|---|
|  |  |  | var jsonData = JsonConvert.SerializeObject(outDto1); | 
|---|
|  |  |  | string response = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") | 
|---|
|  |  |  | response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); | 
|---|
|  |  |  | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ////解析返回数据 | 
|---|
|  |  |  | var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); | 
|---|
|  |  |  | if (wcsModel.code == 200) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //更改任务的发送返回时间// | 
|---|
|  |  |  | new TaskServer().EditTaskIssueOk(list2, time1, time2); | 
|---|
|  |  |  | str += "下发成功"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); | 
|---|
|  |  |  | throw new Exception(wcsModel.message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return outDto1; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.RollbackTran(); | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 自动分配、取消分配、获取手动分配的数据源、手动分配 | 
|---|
|  |  |  | 
|---|
|  |  |  | Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数 | 
|---|
|  |  |  | var qty = 0m; | 
|---|
|  |  |  | var house = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //分配货物 | 
|---|
|  |  |  | qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, notice.WareHouseNo); | 
|---|
|  |  |  | foreach (var sc in stockQtyDic) | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var notcie = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.SONo == soNo); | 
|---|
|  |  |  | var notcie = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); | 
|---|
|  |  |  | if (notcie == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("未查询到出库单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return notcie.WareHouseNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public string GetHouseByPalletNo(string palletNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var datail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (datail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("未查询到托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return datail.WareHouseNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("出库口工位异常"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var taskNoStr = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 储位号 | 
|---|
|  |  |  | var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | flagList.Add(0); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | if (locate.Status == "1") //有物品 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #region 添加出库任务 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var taskNo = new Common().GetMaxNo("TK"); | 
|---|
|  |  |  | var exTask = new LogTask    //出库任务 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | StartLocate = locate.LocatNo, // 起始位置 | 
|---|
|  |  |  | StartRoadway = locate.RoadwayNo,//其实巷道 | 
|---|
|  |  |  | EndLocate = outModeLocate, // 目标位置 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Order = 999, | 
|---|
|  |  |  | Type  = PLCTypeEnum.AGV | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Type = PLCTypeEnum.AGV | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | taskNoStr = exTask.TaskNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 改变数据 | 
|---|
|  |  |  | 
|---|
|  |  |  | flagList.Add(1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //添加操作日志记录 | 
|---|
|  |  |  | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", soNo, "出库", $"点击出库按钮出库单号为:{soNo}的出库单", userId); | 
|---|
|  |  |  | Db.CommitTran(); | 
|---|
|  |  |  | 
|---|
|  |  |  | //if (wcsModel.StatusCode == 0) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    //更改任务的发送返回时间// | 
|---|
|  |  |  | new TaskServer().EditTaskIssueOk(list2, time1, time2); | 
|---|
|  |  |  | str += "下发成功"; | 
|---|
|  |  |  | new TaskServer().EditTaskIssueOk(list2, time1, time2); | 
|---|
|  |  |  | str += "下发成功"; | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //if (wcsModel.StatusCode == -1) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | 
|---|
|  |  |  | //要出库的明细集合 | 
|---|
|  |  |  | var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); | 
|---|
|  |  |  | //所有要出库的储位集合 | 
|---|
|  |  |  | var locateListStrs = outStockDetail.Where(m=> !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList(); | 
|---|
|  |  |  | var locateListStrs = outStockDetail.Where(m => !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList(); | 
|---|
|  |  |  | //物料编码表 | 
|---|
|  |  |  | var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); | 
|---|
|  |  |  | //包装表 | 
|---|
|  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<LogTask> logTaskList = new List<LogTask>();//此次出库任务集合,为应对同托盘不同物料出库 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //循环分配的信息生成出库任务 | 
|---|
|  |  |  | foreach (var item in list) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var taskNoStr = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 储位号 | 
|---|
|  |  |  | var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断储位 | 
|---|
|  |  |  | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 | 
|---|
|  |  |  | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0" && m.WareHouseNo == "W01");//当前出库的储位信息 | 
|---|
|  |  |  | if (locate == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | flagList.Add(2); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (locate.Status == "1") //有物品 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var row1 = int.Parse(locate.LocatNo.Substring(2,2)); | 
|---|
|  |  |  | var row1 = int.Parse(locate.LocatNo.Substring(2, 2)); | 
|---|
|  |  |  | var row2 = int.Parse(locate.AisleOne.Substring(2, 2)); | 
|---|
|  |  |  | //需要移库的信息 | 
|---|
|  |  |  | var NeedMoveInfo = IsNeedMoveLocate(locate, locateListStrs, out int isOut); | 
|---|
|  |  |  | 
|---|
|  |  |  | foreach (var s in NeedMoveInfo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //储位列 | 
|---|
|  |  |  | var rows = int.Parse(s.Substring(2,2)); | 
|---|
|  |  |  | var rows = int.Parse(s.Substring(2, 2)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取移库储位 | 
|---|
|  |  |  | var moveAddress = GetMiJiMoveAddress(s, locate.AisleOne); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | outDto1.Add(new OutCommandDto() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PalletNo = item.PalletNo,//托盘号 | 
|---|
|  |  |  | StartLocate = locate.LocatNo, // 起始位置 | 
|---|
|  |  |  | PalletNo = ykTask.PalletNo,//托盘号 | 
|---|
|  |  |  | StartLocate = ykTask.StartLocat, // 起始位置 | 
|---|
|  |  |  | StartRoadway = locate.RoadwayNo,//其实巷道 | 
|---|
|  |  |  | EndLocate = moveAddress,//outMode, // 目标位置 | 
|---|
|  |  |  | TaskNo = ykTaskNo, // 任务号 | 
|---|
|  |  |  | 
|---|
|  |  |  | Order = Math.Abs(row2 - rows), | 
|---|
|  |  |  | Type = PLCTypeEnum.ShuttleCar | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s); | 
|---|
|  |  |  | var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #region 添加出库任务 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var taskNo = new Common().GetMaxNo("TK"); | 
|---|
|  |  |  | var exTask = new LogTask    //出库任务 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | taskNoStr = exTask.TaskNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 改变数据 | 
|---|
|  |  |  | 
|---|
|  |  |  | /// <param name="addressList">要出口的储位集合</param> | 
|---|
|  |  |  | /// <param name="isOut">是否出库 1:有未下发的任务在前面</param> | 
|---|
|  |  |  | /// <returns>需要移库的集合(如果为空则不需移库)</returns> | 
|---|
|  |  |  | private List<string> IsNeedMoveLocate(SysStorageLocat lcoate,List<string> locateStrList, out int isOut) | 
|---|
|  |  |  | private List<string> IsNeedMoveLocate(SysStorageLocat lcoate, List<string> locateStrList, out int isOut) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var nowAddress = new List<string>(); //需要移库的集合 | 
|---|
|  |  |  | // 010101 派列层 | 
|---|
|  |  |  | //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var sArray = lcoate.LocatNo.Substring(4,2); | 
|---|
|  |  |  | // 010101 派列层 | 
|---|
|  |  |  | //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var sArray = lcoate.LocatNo.Substring(2, 2); | 
|---|
|  |  |  | var row = int.Parse(sArray);//储位列 | 
|---|
|  |  |  | var sArray2 = lcoate.AisleOne.Substring(4, 2); | 
|---|
|  |  |  | var sArray2 = lcoate.AisleOne.Substring(2, 2); | 
|---|
|  |  |  | var row2 = int.Parse(sArray2); //通道口列 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | isOut = 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var bol = row2 - row > 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //同组的储位集合 | 
|---|
|  |  |  | var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == lcoate.RoadwayNo).ToList(); | 
|---|
|  |  |  | List<string> list; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (bol) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //储位小于通道口   倒序 | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return nowAddress; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return nowAddress; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取移库目标储位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // | 
|---|
|  |  |  | var sArray = oldAddress.Substring(4,2); | 
|---|
|  |  |  | var sArray = oldAddress.Substring(4, 2); | 
|---|
|  |  |  | var ceng = int.Parse(sArray); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | var sArray2 = slotOut.Substring(2, 2); | 
|---|
|  |  |  | 
|---|
|  |  |  | //根据十字口差值最小的排序 | 
|---|
|  |  |  | shiKou3 = shiKou3.OrderBy(m => m.distNum).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | //1 移动到最近的空储位,必须回移。 | 
|---|
|  |  |  | //根据四向车移动轨迹计算出最近空储位。 | 
|---|
|  |  |  | //出库完成后根据批次号 生产日期 出口计算回移储位。 | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | //1 移动到最近的空储位,必须回移。 | 
|---|
|  |  |  | //根据四向车移动轨迹计算出最近空储位。 | 
|---|
|  |  |  | //出库完成后根据批次号 生产日期 出口计算回移储位。 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //2 移动适合存放的组,系统自动计算是否回移。 | 
|---|
|  |  |  | //根据批次号 生产日期 出口 物料等计算出移库目标储位 | 
|---|
|  |  |  | //出库完成后,判断是否有比当前库位更合适的存储储位,有移动,无不移动。 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | //2 移动适合存放的组,系统自动计算是否回移。 | 
|---|
|  |  |  | //根据批次号 生产日期 出口 物料等计算出移库目标储位 | 
|---|
|  |  |  | //出库完成后,判断是否有比当前库位更合适的存储储位,有移动,无不移动。 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress); | 
|---|
|  |  |  | if (oldSlot == null) | 
|---|
|  |  |  | var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress); | 
|---|
|  |  |  | if (oldSlot == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("未能找到储位信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #region 1不需要回移的 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //后期库存托盘表改了后需要加筛选条件托盘的状态(退货/预拣) | 
|---|
|  |  |  | var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList(); | 
|---|
|  |  |  | //根据物料、批次、托盘状态(退货/预拣/暂存等)分组判断 | 
|---|
|  |  |  | var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags }); | 
|---|
|  |  |  | var location = string.Empty; | 
|---|
|  |  |  | if (d.Any()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //旧储位同组的储位集合 | 
|---|
|  |  |  | var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList(); | 
|---|
|  |  |  | foreach (var item in d) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("未能找到储位信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #region 1不需要回移的 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //后期库存托盘表改了后需要加筛选条件托盘的状态(退货/预拣) | 
|---|
|  |  |  | var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList(); | 
|---|
|  |  |  | //根据物料、批次、托盘状态(退货/预拣/暂存等)分组判断 | 
|---|
|  |  |  | var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags }); | 
|---|
|  |  |  | var location = string.Empty; | 
|---|
|  |  |  | if (d.Any()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //旧储位同组的储位集合 | 
|---|
|  |  |  | var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList(); | 
|---|
|  |  |  | foreach (var item in d) | 
|---|
|  |  |  | foreach (var item2 in item) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var item2 in item) | 
|---|
|  |  |  | var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == item2.WareHouseNo).Select(m => m.RoadwayNo).ToList(); | 
|---|
|  |  |  | //当前托盘所在楼层 | 
|---|
|  |  |  | if (oldSlot.Layer == 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0").Select(m => m.RoadwayNo).ToList(); | 
|---|
|  |  |  | var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo | 
|---|
|  |  |  | okLan = okLan.Where(m => Convert.ToInt32(m.Replace("MR", "")) <= 56).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (oldSlot.Layer == 2) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | okLan = okLan.Where(m => Convert.ToInt32(m.Replace("MR", "")) > 56).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("当前托盘所在楼层异常"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo | 
|---|
|  |  |  | && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList(); | 
|---|
|  |  |  | if (tray2.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var s in tray2) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(s.RoadwayNo))//判断是否在库外,如是跳过 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (lan.Count(m => m.Status == "0") > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var bol = GetBecomingLocation(s.RoadwayNo, ref location); | 
|---|
|  |  |  | if (bol && !string.IsNullOrWhiteSpace(location)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | newAddress = location; | 
|---|
|  |  |  | return newAddress; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(string.IsNullOrEmpty(newAddress)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //已有物品的巷道 | 
|---|
|  |  |  | var roadwayHave = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == "W01").GroupBy(g => g.RoadwayNo).Select(s => s.RoadwayNo).ToList(); | 
|---|
|  |  |  | //查找没有物品的巷道 | 
|---|
|  |  |  | var roadwayNull = Db.Queryable<SysStorageRoadway>().Where(w => w.IsDel == "0" && w.WareHouseNo == "W01" && w.Status == "0" && okLan.Contains(w.RoadwayNo) && !roadwayHave.Contains(w.RoadwayNo)).Select(s => s.RoadwayNo).ToList(); | 
|---|
|  |  |  | if (roadwayNull.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var itemRoad in roadwayNull) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var bol = GetBecomingLocation(itemRoad, ref location); | 
|---|
|  |  |  | if (bol && !string.IsNullOrWhiteSpace(location)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | newAddress = location; | 
|---|
|  |  |  | return newAddress; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var itemRoad in roadwayHave) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var bol = GetBecomingLocation(itemRoad, ref location); | 
|---|
|  |  |  | if (bol && !string.IsNullOrWhiteSpace(location)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | newAddress = location; | 
|---|
|  |  |  | return newAddress; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 2需要回移的 | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ////如果没有找到合适的储位 | 
|---|
|  |  |  | //if (string.IsNullOrWhiteSpace(newAddress)) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    foreach (var s in shiKou3) | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        var r = int.Parse(s.slotCode.Substring(0, 2)); | 
|---|
|  |  |  | //        var l = int.Parse(s.slotCode.Substring(2, 2)); | 
|---|
|  |  |  | //        var c = int.Parse(s.slotCode.Substring(4, 2)); | 
|---|
|  |  |  | //        //查询空储位 | 
|---|
|  |  |  | //        var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum | 
|---|
|  |  |  | //                from SysStorageLocat where (AisleOneRow  = {r} or AisleTwoRow = {r}) and Status in (0) and | 
|---|
|  |  |  | //                 RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode"; | 
|---|
|  |  |  | #region 2需要回移的 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList(); | 
|---|
|  |  |  | //        foreach (var item in addressModels) | 
|---|
|  |  |  | //        {                            、 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            newAddress = item.slotCode; | 
|---|
|  |  |  | //            var dz = newAddress.Split(new char[] { '-' }); | 
|---|
|  |  |  | //            var l1 = dz[1]; | 
|---|
|  |  |  | //            var c1 = dz[0]; | 
|---|
|  |  |  | //            newLaneWayAddress = $"{c1}-{l1}-{a[2]}"; | 
|---|
|  |  |  | //            flags = newLaneWayAddress; | 
|---|
|  |  |  | ////如果没有找到合适的储位 | 
|---|
|  |  |  | //if (string.IsNullOrWhiteSpace(newAddress)) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    foreach (var s in shiKou3) | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode); | 
|---|
|  |  |  | //        var r = int.Parse(s.slotCode.Substring(0, 2)); | 
|---|
|  |  |  | //        var l = int.Parse(s.slotCode.Substring(2, 2)); | 
|---|
|  |  |  | //        var c = int.Parse(s.slotCode.Substring(4, 2)); | 
|---|
|  |  |  | //        //查询空储位 | 
|---|
|  |  |  | //        var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum | 
|---|
|  |  |  | //                from SysStorageLocat where (AisleOneRow  = {r} or AisleTwoRow = {r}) and Status in (0) and | 
|---|
|  |  |  | //                 RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList(); | 
|---|
|  |  |  | //            if (slotModel.SlotRow > int.Parse(a[2])) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                // 取最上面一排 | 
|---|
|  |  |  | //                lan = lan.OrderBy(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //                for (int i = 0; i < lan.Count; i++) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode); | 
|---|
|  |  |  | //                    if (slot.SlotStatus == 0) | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        if (i == lan.Count - 1) | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            newAddress = lan[lan.Count - 1].SlotCode; | 
|---|
|  |  |  | //        var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList(); | 
|---|
|  |  |  | //        foreach (var item in addressModels) | 
|---|
|  |  |  | //        {                            、 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                            break; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                        else | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            continue; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    else | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        newAddress = lan[i - 1].SlotCode; | 
|---|
|  |  |  | //                        break; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            newAddress = item.slotCode; | 
|---|
|  |  |  | //            var dz = newAddress.Split(new char[] { '-' }); | 
|---|
|  |  |  | //            var l1 = dz[1]; | 
|---|
|  |  |  | //            var c1 = dz[0]; | 
|---|
|  |  |  | //            newLaneWayAddress = $"{c1}-{l1}-{a[2]}"; | 
|---|
|  |  |  | //            flags = newLaneWayAddress; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            else | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                // 取最下面一排 | 
|---|
|  |  |  | //                lan = lan.OrderByDescending(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //                for (int i = 0; i < lan.Count; i++) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode); | 
|---|
|  |  |  | //                    if (slot.SlotStatus == 0) | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        if (i == lan.Count - 1) | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            newAddress = lan[lan.Count - 1].SlotCode; | 
|---|
|  |  |  | //                            break; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                        else | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            continue; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //            var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    else | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        newAddress = lan[i - 1].SlotCode; | 
|---|
|  |  |  | //                        break; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            //添加回移任务 | 
|---|
|  |  |  | //            AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode); | 
|---|
|  |  |  | //            refLanWayId = slotModel.SlotLanewayId; | 
|---|
|  |  |  | //            refLanOutCode = newLaneWayAddress; | 
|---|
|  |  |  | //            //9:锁定储位 | 
|---|
|  |  |  | //            var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList(); | 
|---|
|  |  |  | //            var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress); | 
|---|
|  |  |  | //            if (newAddressRow.SlotRow > int.Parse(a[2])) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            else | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //            var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList(); | 
|---|
|  |  |  | //            if (slotModel.SlotRow > int.Parse(a[2])) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                // 取最上面一排 | 
|---|
|  |  |  | //                lan = lan.OrderBy(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //                for (int i = 0; i < lan.Count; i++) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode); | 
|---|
|  |  |  | //                    if (slot.SlotStatus == 0) | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        if (i == lan.Count - 1) | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            newAddress = lan[lan.Count - 1].SlotCode; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            foreach (var source in updateSlot) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                if (source.SlotCode == newAddress) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                if (source.SlotStatus == 0) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    source.SlotStatus = 8; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //                            break; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                        else | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            continue; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            if (updateSlot.Count <= 0) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                refLanWayId = ""; | 
|---|
|  |  |  | //                refLanOutCode = ""; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            dataContext.SubmitChanges(); | 
|---|
|  |  |  | //            return newAddress; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    else | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        newAddress = lan[i - 1].SlotCode; | 
|---|
|  |  |  | //                        break; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            else | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                // 取最下面一排 | 
|---|
|  |  |  | //                lan = lan.OrderByDescending(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //                for (int i = 0; i < lan.Count; i++) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode); | 
|---|
|  |  |  | //                    if (slot.SlotStatus == 0) | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        if (i == lan.Count - 1) | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            newAddress = lan[lan.Count - 1].SlotCode; | 
|---|
|  |  |  | //                            break; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                        else | 
|---|
|  |  |  | //                        { | 
|---|
|  |  |  | //                            continue; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    else | 
|---|
|  |  |  | //                    { | 
|---|
|  |  |  | //                        newAddress = lan[i - 1].SlotCode; | 
|---|
|  |  |  | //                        break; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            //添加回移任务 | 
|---|
|  |  |  | //            AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode); | 
|---|
|  |  |  | //            refLanWayId = slotModel.SlotLanewayId; | 
|---|
|  |  |  | //            refLanOutCode = newLaneWayAddress; | 
|---|
|  |  |  | //            //9:锁定储位 | 
|---|
|  |  |  | //            var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList(); | 
|---|
|  |  |  | //            var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress); | 
|---|
|  |  |  | //            if (newAddressRow.SlotRow > int.Parse(a[2])) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList(); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            else | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            foreach (var source in updateSlot) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                if (source.SlotCode == newAddress) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                if (source.SlotStatus == 0) | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    source.SlotStatus = 8; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return newAddress; | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | //            if (updateSlot.Count <= 0) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                refLanWayId = ""; | 
|---|
|  |  |  | //                refLanOutCode = ""; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            dataContext.SubmitChanges(); | 
|---|
|  |  |  | //            return newAddress; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return newAddress; | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | private bool GetBecomingLocation(string laneWayId, ref string location) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | bool bl = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 循环判断当前组是否有剩余储位 | 
|---|
|  |  |  | string sqlString = string.Empty; | 
|---|
|  |  |  | location = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断储位组是否有空储位   关联库存明细表可防止储位状态不准确避免造成满入异常//not in ('1','2','4','6','7','8') | 
|---|
|  |  |  | sqlString = $"select LocatNo,Column,AisleOne from SysStorageLocat where RoadwayNo = {laneWayId} and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = { laneWayId}) order by Row;"; | 
|---|
|  |  |  | var slotModel =Db.SqlQueryable<LocateInfo>(sqlString).ToList(); | 
|---|
|  |  |  | sqlString = $"select LocatNo,[Column],AisleOne from SysStorageLocat where IsDel=0 and WareHouseNo='W01' and RoadwayNo = '{laneWayId}' and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = '{laneWayId}') order by Row;"; | 
|---|
|  |  |  | var slotModel = Db.SqlQueryable<LocateInfo>(sqlString).ToList(); | 
|---|
|  |  |  | if (slotModel.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | bl = false; | 
|---|
|  |  |  | 
|---|
|  |  |  | else  // 存在空储位 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 判断当前组合适的储位地址 | 
|---|
|  |  |  | var numstr = slotModel[0].AisleOne.Substring(4,2); | 
|---|
|  |  |  | var numstr = slotModel[0].AisleOne.Substring(4, 2); | 
|---|
|  |  |  | int aisleRow = int.Parse(numstr); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (slotModel[0].Column > aisleRow) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 取最上面一排 | 
|---|
|  |  |  | location = slotModel[0].LocatNo; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 取最下面一排 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | location = slotModel[slotModel.Count - 1].LocatNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 取最上面一排 | 
|---|
|  |  |  | location = slotModel[0].LocatNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | bl = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return bl; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | public string LocatNo { get; set; } | 
|---|
|  |  |  | public int Column { get; set; } | 
|---|
|  |  |  | public string AisleOne { get; set; } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | item.WareHouseNo = "";//所属仓库更改(改为空) | 
|---|
|  |  |  | item.RoadwayNo = "";//所属巷道更改(改为空) | 
|---|
|  |  |  | item.AreaNo = "";//所属区域更改(改为空) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库流水(更改状态) | 
|---|
|  |  |  | var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); | 
|---|
|  |  |  | var PalletType = "0"; //0:物料托  1:空托盘托 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in allot) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (item.SkuNo == "100099") | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m=>m.LocatNo).ToList(); | 
|---|
|  |  |  | var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m => m.LocatNo).ToList(); | 
|---|
|  |  |  | //判断是否是原辅料出库任务  货架储位=》平库储位 | 
|---|
|  |  |  | if ( endLocateList.Contains(task.EndLocat) && PalletType == "0") | 
|---|
|  |  |  | if (endLocateList.Contains(task.EndLocat) && PalletType == "0") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //修改目标地址状态 | 
|---|
|  |  |  | var endLocat = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == task.EndLocat); | 
|---|
|  |  |  | 
|---|
|  |  |  | ////判断起始目标位置都是平库 | 
|---|
|  |  |  | //if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | task.Status = "2"; | 
|---|
|  |  |  | task.Status = "2"; | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | task.IsSend = 0; | 
|---|
|  |  |  | task.IsCancel = 0; | 
|---|
|  |  |  | task.IsFinish = 0; | 
|---|
|  |  |  | 
|---|
|  |  |  | locate.Status = "0"; | 
|---|
|  |  |  | Db.Updateable(locate).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //目标储位改为有货物 1 | 
|---|
|  |  |  | locate2.Status = "1"; | 
|---|
|  |  |  | Db.Updateable(locate2).ExecuteCommand(); | 
|---|
|  |  |  | //判断起始目标位置都是平库 | 
|---|
|  |  |  | if ( pingKuList.Contains(task.EndLocat)) | 
|---|
|  |  |  | if (pingKuList.Contains(task.EndLocat)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var item in stockDetail) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Db.Updateable(stockDetail).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.BeginTran(); | 
|---|
|  |  |  | var task = Db.Queryable<LogTask>().First(m=>m.IsDel =="0" && m.TaskNo == taskNo); | 
|---|
|  |  |  | var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == taskNo); | 
|---|
|  |  |  | if (task == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("没有查询到任务信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (task.Status!="1") | 
|---|
|  |  |  | if (task.Status != "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("任务状态不是正在执行,请核实"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("没有查询到起始储位信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (locate.WareHouseNo!="W04") | 
|---|
|  |  |  | if (locate.WareHouseNo != "W04") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("起始储位不是平库储位,请核实"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new Exception("未查询到出库单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var task = Db.Queryable<BllExportTimingTask>().Count(m => m.SoNo == soNo); | 
|---|
|  |  |  | if (task>0) | 
|---|
|  |  |  | if (task > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("当前出库单已生成备料任务,无需重复点击"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | Db.Insertable(exTask).ExecuteCommand(); | 
|---|
|  |  |  | notice.Status = "3";//修改单据状态未正在执行 | 
|---|
|  |  |  | notice.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | notice.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | notice.UpdateUser = userId; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Db.Updateable(notice).ExecuteCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // JC23 备料定时任务开始 领料单备料下发出库(调用wcs接口给他库位地址) | 
|---|
|  |  |  | public List<OutCommandDto> BeiLiaoIssueOutHouse(string url) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); | 
|---|
|  |  |  | if (detailList.Count(m => m.FactQty>0) > 0) | 
|---|
|  |  |  | if (detailList.Count(m => m.FactQty > 0) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | notice.Status = "3"; //变更状态为正在执行 | 
|---|
|  |  |  | Db.Updateable(notice).ExecuteCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); | 
|---|
|  |  |  | if (detailList.Count(m => m.FactQty>0) > 0) | 
|---|
|  |  |  | if (detailList.Count(m => m.FactQty > 0) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | notice.Status = "3"; //变更状态为正在执行 | 
|---|
|  |  |  | Db.Updateable(notice).ExecuteCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //先查询任务表中要有任务的投料口信息 | 
|---|
|  |  |  | var proCallList = Db.Queryable<BllProductionCallTask>().Where(m => m.IsDel == "0").ToList(); | 
|---|
|  |  |  | var proLocationList = proCallList.Select(m=>m.PutInLocation).ToList(); | 
|---|
|  |  |  | var proLocationList = proCallList.Select(m => m.PutInLocation).ToList(); | 
|---|
|  |  |  | if (proCallList.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //当前投料口包含的工位 | 
|---|
|  |  |  | var list = locate.Where(m => m.AreaNo == item).ToList(); | 
|---|
|  |  |  | var listStr = locate.Where(m => m.AreaNo == item).Select(m=>m.LocatNo).ToList(); | 
|---|
|  |  |  | var listStr = locate.Where(m => m.AreaNo == item).Select(m => m.LocatNo).ToList(); | 
|---|
|  |  |  | //判断投料口的工位中是否有未下发成功的任务 | 
|---|
|  |  |  | var task = Db.Queryable<LogTask>().Where(m => m.Type == "1" && m.IsSuccess == 0 && m.Status == "0" && listStr.Contains(m.EndLocat) ).OrderBy(m=>m.TaskNo).ToList(); | 
|---|
|  |  |  | if(task.Count > 0) | 
|---|
|  |  |  | var task = Db.Queryable<LogTask>().Where(m => m.Type == "1" && m.IsSuccess == 0 && m.Status == "0" && listStr.Contains(m.EndLocat)).OrderBy(m => m.TaskNo).ToList(); | 
|---|
|  |  |  | if (task.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item2 in task) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //添加下发任务的信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | //item2.Status = "1"; | 
|---|
|  |  |  | //Db.Updateable(item2).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //return outlist; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (outlist.Count>0) | 
|---|
|  |  |  | if (outlist.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //将任务发送至AGV | 
|---|
|  |  |  | // 正式运行程序放开 | 
|---|
|  |  |  | 
|---|
|  |  |  | //if (wcsModel.StatusCode == 0) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    //更改任务的发送返回时间// | 
|---|
|  |  |  | new TaskServer().EditTaskIssueOk(list2, time1, time2); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | new TaskServer().EditTaskIssueOk(list2, time1, time2); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //if (wcsModel.StatusCode == -1) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new Exception(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("当前任务已完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Db.BeginTran(); | 
|---|
|  |  |  | //库存中当前托盘的信息 | 
|---|
|  |  |  | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); | 
|---|
|  |  |  | 
|---|
|  |  |  | var exTime = Db.Queryable<BllProductionCallTask>().First(m => m.IsDel == "0" && m.PutInLocation == locate.AreaNo && m.SkuNo == locate.SkuNo); | 
|---|
|  |  |  | if (exTime != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var notice = Db.Queryable<BllExportNotice>().First(m=>m.IsDel =="0" && m.SONo == exTime.OrderCode); | 
|---|
|  |  |  | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == exTime.OrderCode); | 
|---|
|  |  |  | //获取备好料的托盘信息 | 
|---|
|  |  |  | var taskStr = Db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.Receiver == "AGV").Select(m => m.TaskNo).ToList(); | 
|---|
|  |  |  | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "2" && m.SONo == notice.SONo && m.SkuNo == locate.SkuNo && !taskStr.Contains(m.TaskNo)).Select(m => m.PalletNo).ToList(); | 
|---|
|  |  |  | if (allotList.Count >0) | 
|---|
|  |  |  | if (allotList.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var stockDetail2 = Db.Queryable<DataStockDetail>().Where(m => allotList.Contains(m.PalletNo)).OrderBy(m => m.LocatNo).First(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var listLocate = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == locate.AreaNo).ToList(); | 
|---|
|  |  |  | if (listLocate.Count(m=>m.SkuNo == locate.SkuNo && m.Status != "0") == 0) | 
|---|
|  |  |  | if (listLocate.Count(m => m.SkuNo == locate.SkuNo && m.Status != "0") == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.Deleteable(exTime).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | //删除库存箱码明细 | 
|---|
|  |  |  | Db.Deleteable(item2).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (comList.Count>0) | 
|---|
|  |  |  | if (comList.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.Insertable(comList).ExecuteCommand(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 出库流水(更改状态) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | allot.Status = "5"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stockInfoList.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | allot.CompleteQty += item.LockQty; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 出库单及明细 | 
|---|
|  |  |  | var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.Id == allot.SODetailNo && m.IsDel == "0"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stockInfoList.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | noticeDetail.CompleteQty += item.LockQty; | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == noticeDetail.SONo); | 
|---|
|  |  |  | notice.Status = "4"; //更改为执行完成//修改出库单信息 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Db.Updateable(notice).ExecuteCommand(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | item.LocatNo = locate2.LocatNo;//储位更改(改为空) | 
|---|
|  |  |  | item.WareHouseNo = locate2.WareHouseNo;//所属仓库更改(改为空) | 
|---|
|  |  |  | item.RoadwayNo = locate2.RoadwayNo;//所属巷道更改(改为空) | 
|---|
|  |  |  | 
|---|
|  |  |  | OutMode = toLocation,  //目标地址 | 
|---|
|  |  |  | Order = 1, | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | item.TaskNo = taskNoStr; // 出库分配信息中更新任务号 | 
|---|
|  |  |  | item.Status = "1"; // 出库分配信息状态改为正在执行 | 
|---|
|  |  |  | item.UnstackingMode = unstackingMode2;//拆垛方式 | 
|---|
|  |  |  | item.OutMode =  outMode ;//出库口 | 
|---|
|  |  |  | item.OutMode = outMode;//出库口 | 
|---|
|  |  |  | //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//装车口 | 
|---|
|  |  |  | Db.Updateable(item).ExecuteCommand(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | item.TaskNo = taskNo.TaskNo; | 
|---|
|  |  |  | item.Status = "1"; // 出库分配信息状态改为正在执行 | 
|---|
|  |  |  | item.OutMode = item.OutMode;//出库口 | 
|---|
|  |  |  | item.UnstackingMode = unstackingMode2 ;//拆垛模式 | 
|---|
|  |  |  | item.UnstackingMode = unstackingMode2;//拆垛模式 | 
|---|
|  |  |  | Db.Updateable(item).ExecuteCommand(); | 
|---|
|  |  |  | flagList.Add(0); | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //重新下发出库任务 | 
|---|
|  |  |  | public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 判断出库是否需要拆箱 | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | sqlPub += $"AND tb1.IsDespatch = '{isDespatch}' "; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (logisticsId != null) | 
|---|
|  |  |  | if (logisticsId != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | sqlPub += $"AND tb1.LogisticsId = '{logisticsId}' "; | 
|---|
|  |  |  | } | 
|---|