| | |
| | | { |
| | | OrderNo = notice.ASNNo, |
| | | PalletNo = bind.PalletNo, |
| | | Msg = info == null ? $"物料:{noticeDetail.SkuNo}、批次:{noticeDetail.LotNo};": $"物料:{info.SkuNo}、批次:{info.LotNo};", |
| | | Msg = info == null ? $"物料:{noticeDetail.SkuNo}、批次:{noticeDetail.LotNo};" : $"物料:{info.SkuNo}、批次:{info.LotNo};", |
| | | Reason = reason, |
| | | Status = "0", |
| | | Opinion = "", |
| | |
| | | |
| | | #region 指定储位 |
| | | //指定储位数据源(正常的空储位) |
| | | public List<LocatDto> GetLocateList(string houseNo, string roadwayNo, string row, string column, string layer, string locateNo, int page, int limit, out int count) |
| | | public List<LocatDto> GetLocateList(string houseNo, string roadwayNo, string row, string column, string layer, string locateNo, string BindId, int page, int limit, out int count) |
| | | { |
| | | try |
| | | { |
| | | //获取托盘绑定 |
| | | var bindASNDetailNo = Db.Queryable<BllPalletBind>().Where(a => a.IsDel == "0" && a.Status == "0" && a.Id == int.Parse(BindId)).Select(a => a.ASNDetailNo).First(); |
| | | //获取单据明细 |
| | | var noticeDetailSkuNo = Db.Queryable<BllArrivalNoticeDetail>().Where(a => a.Id == bindASNDetailNo && a.IsDel == "0").Select(a => a.SkuNo).First(); |
| | | //获取物料 |
| | | var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == noticeDetailSkuNo).Select(a => a.CategoryNo).First(); |
| | | //获取物料对应区域 |
| | | var categoryAreaNo = Db.Queryable<SysMaterialCategory>().Where(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo).Select(a => a.AreaNo).First(); |
| | | |
| | | Expression<Func<SysStorageLocat, bool>> item = Expressionable.Create<SysStorageLocat>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(row), m => m.Row == int.Parse(row)) |
| | |
| | | .AndIF(!string.IsNullOrWhiteSpace(layer), m => m.Layer == int.Parse(layer)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo.Contains(locateNo)) |
| | | .And(m => m.IsDel == "0" && m.Status == "0" && m.Flag == "0" && m.WareHouseNo == houseNo) |
| | | .And(m => m.AreaNo.Contains(categoryAreaNo)) |
| | | .ToExpression();//注意 这一句 不能少 |
| | | var total = 0; |
| | | var list = Db.Queryable<SysStorageLocat>().Where(item) |
| | |
| | | { |
| | | throw new Exception("该储位状态不是空储位或标志不是正常的"); |
| | | } |
| | | |
| | | |
| | | |
| | | //判断当前托盘是否存在绑定信息 |
| | | if (bind.LocatNo != null) |
| | | { |
| | | //分割已绑储位与新储位 |
| | | //已绑储位 |
| | | var bindRow = bind.LocatNo.Substring(0, 2); |
| | | var bindColumn = bind.LocatNo.Substring(2, 2); |
| | | var bindLayer = bind.LocatNo.Substring(4, 2); |
| | | var bindDepth = bind.LocatNo.Substring(6, 2); |
| | | //新储位 |
| | | var Row = locate.LocatNo.Substring(0, 2); |
| | | var Column = locate.LocatNo.Substring(2, 2); |
| | | var Layer = locate.LocatNo.Substring(4, 2); |
| | | var Depth = locate.LocatNo.Substring(6, 2); |
| | | |
| | | if (bindDepth == "02") |
| | | { |
| | | //判断排列层是否相同 |
| | | if (bindRow == Row && bindColumn == Column && bindLayer == Layer) |
| | | { |
| | | throw new Exception("同储位深度2不可向深度1切换!"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //若是深度1的 则判断深度2是否为空储位 |
| | | if (locate.Depth == "01") |
| | | { |
| | | var locateDepth = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.Row == locate.Row && a.Column == locate.Column && a.Layer == locate.Layer && a.Depth == "02"); |
| | | if (locateDepth != null) |
| | | { |
| | | if (locateDepth.Status != "1") |
| | | { |
| | | throw new Exception("该储位深度2不是有物品,不可绑定"); |
| | | } |
| | | } |
| | | } |
| | | //判断是否为深度2的 若为深度2 则获取深度1储位 判断是否为空储位 |
| | | if (locate.Depth == "02") |
| | | { |
| | | var locateDepth = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.Row == locate.Row && a.Column == locate.Column && a.Layer == locate.Layer && a.Depth == "01"); |
| | | if (locateDepth.Status != "0" || locateDepth.Flag == "2") |
| | | { |
| | | throw new Exception("该储位深度1不是空储位或标志不是正常的"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | var bindIdList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == bind.PalletNo && m.Status != "2").Select(m => m.Id).ToList(); |
| | | //判断是否有零箱 |
| | | foreach (var item in bindIdList) |
| | |
| | | var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo)) |
| | | .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); |
| | | |
| | | SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m=>m.IsDel =="0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //巷道最后一次使用记录 |
| | | SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //巷道最后一次使用记录 |
| | | |
| | | #region 确定巷道排序 |
| | | |
| | |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l).Count(); |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo== l) |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == l) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = useLog.RoadwayNo; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else//按照巷道优先级分配 |
| | | { |
| | | foreach (var item in roadList) |
| | | { |
| | | { |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == item).Count(); |
| | | |
| | |
| | | if (roadNo != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | #endregion |
| | | |
| | | break; |
| | | case "0": |
| | | case "0": |
| | | var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.ASNDetailNo); |
| | | if (noticeDetail == null) |
| | | { |
| | |
| | | { |
| | | LotNo = item.LotNo, |
| | | LotText = noticeDetail.LotText, |
| | | SupplierLot = noticeDetail.SupplierLot, |
| | | SupplierLot = noticeDetail.SupplierLot, |
| | | SkuNo = noticeDetail.SkuNo, |
| | | SkuName = noticeDetail.SkuName, |
| | | Standard = noticeDetail.Standard, |
| | |
| | | var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo && m.Status != "2"); |
| | | if (asnDetailNum == 0) |
| | | { |
| | | { |
| | | notice.Status = "2"; |
| | | notice.CompleteTime = comTime; |
| | | Db.Updateable(notice).ExecuteCommand(); |