| | |
| | | { |
| | | try |
| | | { |
| | | Expression<Func<BllBoxInfo, bool>> item1 = Expressionable.Create<BllBoxInfo>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(model.ASNNo), it => it.ASNNo.Contains(model.ASNNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(model.PalletNo), it => it.PalletNo.Contains(model.PalletNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(model.SkuNo), it => it.SkuNo.Contains(model.SkuNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(model.SkuName), it => it.SkuName.Contains(model.SkuName.Trim())) |
| | | .AndIF((model.BindNo != 0 && !string.IsNullOrWhiteSpace(model.BindNo.ToString())),it=>it.BindNo == model.BindNo) |
| | | .And(m => m.IsDel == "0") |
| | | .ToExpression(); |
| | | |
| | | var total = 0; |
| | | var data = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == model.BindNo) |
| | | DbHelper<BllBoxInfo> helper = new DbHelper<BllBoxInfo>(Db); |
| | | var data = helper.GetAllWhereAsync(item1).Where(m => m.IsDel == "0") |
| | | .LeftJoin<BllPalletBind>((a, b) => a.BindNo == b.Id) |
| | | .GroupBy((a, b) => new |
| | | { |
| | |
| | | Db.Updateable(boxInfos).ExecuteCommand(); |
| | | |
| | | //修改托盘绑定信息 |
| | | bind.Qty -= qty; |
| | | bind.Qty -= qty; // 数量变更 |
| | | bind.BitPalletMark = "1"; // 零托标记变更 |
| | | |
| | | if (bind.Qty == 0) |
| | | { |
| | |
| | | { |
| | | 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).Select(m => m.RoadwayNo).ToList(); |
| | | .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); |
| | | |
| | | SysRoadwayUseLog useLog = Db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //巷道最后一次使用记录 |
| | | SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //巷道最后一次使用记录 |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && !string.IsNullOrWhiteSpace(m.RoadwayNo)) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | #region 确定巷道排序 |
| | | |
| | | List<string> roadList2 = new List<string>(); |
| | | List<string> roadSmall = new List<string>(); |
| | | List<string> roadLarge = new List<string>(); |
| | | if (useLog != null) |
| | | { |
| | | roadList2.Add(useLog.RoadwayNo); |
| | | foreach (var r in roadList) |
| | | { |
| | | if (r == useLog.RoadwayNo) |
| | | { |
| | | continue; |
| | | } |
| | | //如果结果为0,则说明两个字符串相等; |
| | | //如果结果小于0,则说明第一个字符串小于第二个字符串; |
| | | //如果结果大于0,则说明第一个字符串大于第二个字符串。 |
| | | var bol = String.CompareOrdinal(r, useLog.RoadwayNo); |
| | | if (bol < 0) |
| | | { |
| | | roadSmall.Add(r); |
| | | } |
| | | if (bol > 0) |
| | | { |
| | | roadLarge.Add(r); |
| | | } |
| | | } |
| | | roadList2.AddRange(roadLarge); |
| | | roadList2.AddRange(roadSmall); |
| | | } |
| | | |
| | | roadList = roadList2; |
| | | #endregion |
| | | |
| | | |
| | | var roadNo = ""; |
| | | if (laneAllot == 0)//跳巷道平均分配 |
| | | { |
| | | //如果同级巷道有多条则查上次位置日志 |
| | | if (roadList.Count > 1) |
| | | { |
| | | useLog = Db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First(); |
| | | } |
| | | //取各巷道所有排第一个合适位 |
| | | foreach (var l in roadList) |
| | | { |
| | |
| | | } |
| | | |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo)).Count(); |
| | | .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) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = l; |
| | |
| | | { |
| | | if (useLog != null) |
| | | { |
| | | roadNo = useLog.RoadwayNo; |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == useLog.RoadwayNo).Count(); |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == useLog.RoadwayNo) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = useLog.RoadwayNo; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | foreach (var item in roadList) |
| | | { |
| | | roadNo = item; |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == item).Count(); |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == item) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = item; |
| | | } |
| | | //当前巷有位置则退出 |
| | | if (roadNo != null) |
| | | { |
| | | break; |
| | |
| | | } |
| | | #endregion |
| | | |
| | | return null; |
| | | return comDto; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | throw new Exception($"{palletNo}托盘条码不具有箱码信息,不可入库!"); |
| | | } |
| | | skuNo = stockDetail.First().SkuNo; |
| | | //else |
| | | //{ |
| | | // //判断是否有零箱 |
| | | // var detailIdList = stockDetail.Select(m => m.Id).ToList(); |
| | | // var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => detailIdList.Contains(m.StockDetailId)).ToList(); |
| | | // if (dataBoxInfo.Count(m => m.BitBoxMark == "1")>0) |
| | | // { |
| | | // throw new Exception($"{palletNo}托盘上有零箱,不可入库!"); |
| | | // } |
| | | if (!string.IsNullOrWhiteSpace(stockDetail.First().WareHouseNo)) |
| | | { |
| | | if (stockDetail.First().WareHouseNo == "W01")//立库 |
| | | { |
| | | throw new Exception($"{palletNo}托盘上在立库中有库存储位信息,请核实!"); |
| | | } |
| | | |
| | | //} |
| | | if (stockDetail.First().WareHouseNo == "W02")//平库 |
| | | { |
| | | var locatePingKu = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == stockDetail.First().LocatNo); |
| | | if (locatePingKu != null) |
| | | { |
| | | locatePingKu.Status = "0"; |
| | | Db.Updateable(locatePingKu).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //获取对应回库规则 |
| | |
| | | #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, |
| | |
| | | PackagNo = noticeDetail.PackagNo, |
| | | IsBale = item.IsBale, |
| | | IsBelt = item.IsBelt, |
| | | Demo = item.Demo, |
| | | |
| | | OwnerNo = ownerNo, |
| | | OwnerName = ownerName, |
| | |
| | | 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(); |