|  |  |  | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | public async Task<List<StockDetailWithQtyDto>> GetStockQueryList(string locatNo, string palletNo, string boxNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Db.Queryable<DataStockDetail>("a") | 
|---|
|  |  |  | .InnerJoin<DataBoxInfo>((a, b) => a.LotNo == b.LotNo) | 
|---|
|  |  |  | .Where((a, b) => a.IsDel == "0") | 
|---|
|  |  |  | .WhereIF(!string.IsNullOrWhiteSpace(locatNo), (a, b) => a.LocatNo.Contains(locatNo)) | 
|---|
|  |  |  | .WhereIF(!string.IsNullOrWhiteSpace(palletNo), (a, b) => a.PalletNo.Contains(palletNo)) | 
|---|
|  |  |  | .WhereIF(!string.IsNullOrWhiteSpace(boxNo), (a, b) => b.BoxNo.Contains(boxNo)) | 
|---|
|  |  |  | .OrderBy((a, b) => new { a.LotNo, a.LocatNo, a.PalletNo }) | 
|---|
|  |  |  | .Select((a, b) => new StockDetailWithQtyDto | 
|---|
|  |  |  | { | 
|---|
|  |  |  | LotNo = a.LotNo, | 
|---|
|  |  |  | LotText = a.LotText, | 
|---|
|  |  |  | SupplierLot = a.SupplierLot, | 
|---|
|  |  |  | OwnerNo = a.OwnerNo, | 
|---|
|  |  |  | OwnerName = a.OwnerName, | 
|---|
|  |  |  | SupplierNo = a.SupplierNo, | 
|---|
|  |  |  | SupplierName = a.SupplierName, | 
|---|
|  |  |  | SkuNo = a.SkuNo, | 
|---|
|  |  |  | SkuName = a.SkuName, | 
|---|
|  |  |  | Standard = a.Standard, | 
|---|
|  |  |  | Qty = b.Qty,  // DataBoxInfo的Qty字段 | 
|---|
|  |  |  | LockQty = a.LockQty, | 
|---|
|  |  |  | FrozenQty = a.FrozenQty, | 
|---|
|  |  |  | InspectQty = a.InspectQty, | 
|---|
|  |  |  | ASNNo = a.ASNNo, | 
|---|
|  |  |  | ASNDetailNo = a.ASNDetailNo, | 
|---|
|  |  |  | SONo = a.SONo, | 
|---|
|  |  |  | WareHouseNo = a.WareHouseNo, | 
|---|
|  |  |  | RoadwayNo = a.RoadwayNo, | 
|---|
|  |  |  | AreaNo = a.AreaNo, | 
|---|
|  |  |  | LocatNo = a.LocatNo, | 
|---|
|  |  |  | PalletNo = a.PalletNo, | 
|---|
|  |  |  | PalletNo2 = a.PalletNo2, | 
|---|
|  |  |  | PalletNo3 = a.PalletNo3, | 
|---|
|  |  |  | PalletTags = a.PalletTags, | 
|---|
|  |  |  | CompleteTime = a.CompleteTime, | 
|---|
|  |  |  | ProductionTime = a.ProductionTime, | 
|---|
|  |  |  | ExpirationTime = a.ExpirationTime, | 
|---|
|  |  |  | Status = a.Status, | 
|---|
|  |  |  | InspectMark = a.InspectMark, | 
|---|
|  |  |  | BitPalletMark = a.BitPalletMark, | 
|---|
|  |  |  | InspectStatus = a.InspectStatus, | 
|---|
|  |  |  | InspectTime = a.InspectTime, | 
|---|
|  |  |  | PackagNo = a.PackagNo, | 
|---|
|  |  |  | IsBale = a.IsBale, | 
|---|
|  |  |  | IsBelt = a.IsBelt, | 
|---|
|  |  |  | UDF5 = a.UDF5, | 
|---|
|  |  |  | IsDel = a.IsDel, | 
|---|
|  |  |  | CreateTime = a.CreateTime, | 
|---|
|  |  |  | CreateUser = a.CreateUser, | 
|---|
|  |  |  | UpdateTime = a.UpdateTime, | 
|---|
|  |  |  | UpdateUser = a.UpdateUser, | 
|---|
|  |  |  | Demo = a.Demo | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .ToListAsync(); | 
|---|
|  |  |  | return await Db.Queryable<DataStockDetail>("a") | 
|---|
|  |  |  | .InnerJoin<DataBoxInfo>((a, b) => a.LotNo == b.LotNo) | 
|---|
|  |  |  | .Where((a, b) => a.IsDel == "0") | 
|---|
|  |  |  | .WhereIF(!string.IsNullOrWhiteSpace(locatNo), (a, b) => a.LocatNo.Contains(locatNo)) | 
|---|
|  |  |  | .WhereIF(!string.IsNullOrWhiteSpace(palletNo), (a, b) => a.PalletNo.Contains(palletNo)) | 
|---|
|  |  |  | .WhereIF(!string.IsNullOrWhiteSpace(boxNo), (a, b) => b.BoxNo.Contains(boxNo)) | 
|---|
|  |  |  | .GroupBy((a, b) => new | 
|---|
|  |  |  | { | 
|---|
|  |  |  | a.LotNo, | 
|---|
|  |  |  | a.LotText, | 
|---|
|  |  |  | a.SupplierLot, | 
|---|
|  |  |  | a.OwnerNo, | 
|---|
|  |  |  | a.OwnerName, | 
|---|
|  |  |  | a.SupplierNo, | 
|---|
|  |  |  | a.SupplierName, | 
|---|
|  |  |  | a.SkuNo, | 
|---|
|  |  |  | a.SkuName, | 
|---|
|  |  |  | a.Standard, | 
|---|
|  |  |  | a.LockQty, | 
|---|
|  |  |  | a.FrozenQty, | 
|---|
|  |  |  | a.InspectQty, | 
|---|
|  |  |  | a.ASNNo, | 
|---|
|  |  |  | a.ASNDetailNo, | 
|---|
|  |  |  | a.SONo, | 
|---|
|  |  |  | a.WareHouseNo, | 
|---|
|  |  |  | a.RoadwayNo, | 
|---|
|  |  |  | a.AreaNo, | 
|---|
|  |  |  | a.LocatNo, | 
|---|
|  |  |  | a.PalletNo, | 
|---|
|  |  |  | a.PalletNo2, | 
|---|
|  |  |  | a.PalletNo3, | 
|---|
|  |  |  | a.PalletTags, | 
|---|
|  |  |  | a.CompleteTime, | 
|---|
|  |  |  | a.ProductionTime, | 
|---|
|  |  |  | a.ExpirationTime, | 
|---|
|  |  |  | a.Status, | 
|---|
|  |  |  | a.InspectMark, | 
|---|
|  |  |  | a.BitPalletMark, | 
|---|
|  |  |  | a.InspectStatus, | 
|---|
|  |  |  | a.InspectTime, | 
|---|
|  |  |  | a.PackagNo, | 
|---|
|  |  |  | a.IsBale, | 
|---|
|  |  |  | a.IsBelt, | 
|---|
|  |  |  | a.UDF5, | 
|---|
|  |  |  | a.IsDel, | 
|---|
|  |  |  | a.CreateTime, | 
|---|
|  |  |  | a.CreateUser, | 
|---|
|  |  |  | a.UpdateTime, | 
|---|
|  |  |  | a.UpdateUser, | 
|---|
|  |  |  | a.Demo | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .OrderBy((a, b) => new { a.LotNo, a.LocatNo, a.PalletNo }) | 
|---|
|  |  |  | .Select((a, b) => new StockDetailWithQtyDto | 
|---|
|  |  |  | { | 
|---|
|  |  |  | LotNo = a.LotNo, | 
|---|
|  |  |  | LotText = a.LotText, | 
|---|
|  |  |  | SupplierLot = a.SupplierLot, | 
|---|
|  |  |  | OwnerNo = a.OwnerNo, | 
|---|
|  |  |  | OwnerName = a.OwnerName, | 
|---|
|  |  |  | SupplierNo = a.SupplierNo, | 
|---|
|  |  |  | SupplierName = a.SupplierName, | 
|---|
|  |  |  | SkuNo = a.SkuNo, | 
|---|
|  |  |  | SkuName = a.SkuName, | 
|---|
|  |  |  | Standard = a.Standard, | 
|---|
|  |  |  | Qty = SqlFunc.AggregateSum(b.Qty),  // DataBoxInfo的Qty字段 | 
|---|
|  |  |  | LockQty = a.LockQty, | 
|---|
|  |  |  | FrozenQty = a.FrozenQty, | 
|---|
|  |  |  | InspectQty = a.InspectQty, | 
|---|
|  |  |  | ASNNo = a.ASNNo, | 
|---|
|  |  |  | ASNDetailNo = a.ASNDetailNo, | 
|---|
|  |  |  | SONo = a.SONo, | 
|---|
|  |  |  | WareHouseNo = a.WareHouseNo, | 
|---|
|  |  |  | RoadwayNo = a.RoadwayNo, | 
|---|
|  |  |  | AreaNo = a.AreaNo, | 
|---|
|  |  |  | LocatNo = a.LocatNo, | 
|---|
|  |  |  | PalletNo = a.PalletNo, | 
|---|
|  |  |  | PalletNo2 = a.PalletNo2, | 
|---|
|  |  |  | PalletNo3 = a.PalletNo3, | 
|---|
|  |  |  | PalletTags = a.PalletTags, | 
|---|
|  |  |  | CompleteTime = a.CompleteTime, | 
|---|
|  |  |  | ProductionTime = a.ProductionTime, | 
|---|
|  |  |  | ExpirationTime = a.ExpirationTime, | 
|---|
|  |  |  | Status = a.Status, | 
|---|
|  |  |  | InspectMark = a.InspectMark, | 
|---|
|  |  |  | BitPalletMark = a.BitPalletMark, | 
|---|
|  |  |  | InspectStatus = a.InspectStatus, | 
|---|
|  |  |  | InspectTime = a.InspectTime, | 
|---|
|  |  |  | PackagNo = a.PackagNo, | 
|---|
|  |  |  | IsBale = a.IsBale, | 
|---|
|  |  |  | IsBelt = a.IsBelt, | 
|---|
|  |  |  | UDF5 = a.UDF5, | 
|---|
|  |  |  | IsDel = a.IsDel, | 
|---|
|  |  |  | CreateTime = a.CreateTime, | 
|---|
|  |  |  | CreateUser = a.CreateUser, | 
|---|
|  |  |  | UpdateTime = a.UpdateTime, | 
|---|
|  |  |  | UpdateUser = a.UpdateUser, | 
|---|
|  |  |  | Demo = a.Demo | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .ToListAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (models.WareHouseNo == "W02") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | storageArea = await Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.AreaNo != storageLocat.AreaNo && w.WareHouseNo == "W04" && (w.AreaNo == "B01" || w.AreaNo == "B02")).OrderBy(o => o.AreaNo).ToListAsync(); | 
|---|
|  |  |  | storageArea = await Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.AreaNo != storageLocat.AreaNo && w.WareHouseNo == "W04" && (w.AreaNo == "B01" || w.AreaNo == "B02" || w.AreaNo == "B05")).OrderBy(o => o.AreaNo).ToListAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return storageArea; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 根据区域号获取储位地址集合 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="areaNo"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | /// <exception cref="Exception"></exception> | 
|---|
|  |  |  | public List<string> GetLocatByArea(string areaNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (string.IsNullOrEmpty(areaNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("请选择区域"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var _list = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.AreaNo == areaNo && w.WareHouseNo == "W04").Select(s => s.LocatNo).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return _list; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 获取已分配的出库单据 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }*/ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public async Task AgvTransport(string palletNo, string areaNo, string ruku, string url, int userId) | 
|---|
|  |  |  | public async Task AgvTransport(string palletNo, string areaNo,string locatNoEnd, string ruku, string url, int userId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("所选区域信息不存在,请检查!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | EndLocat = await GetLocat(areaNo); | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(locatNoEnd)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | EndLocat = locatNoEnd;//指定储位地址 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | EndLocat = await GetLocat(areaNo);//系统分配储位地址 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("托盘储位信息不存在,请检查!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockDetail.WareHouseNo != "W04") | 
|---|
|  |  |  | if (stockDetail.WareHouseNo != "W04" && stockDetail.WareHouseNo != "W02") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘未在平库内,请检查!"); | 
|---|
|  |  |  | throw Oops.Bah("该托盘未在平库或货架库内,请检查!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //起始储位信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("储位信息不存在,请检查!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //目标储位信息 | 
|---|
|  |  |  | //var storageLocatEnd = new SysStorageLocat(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0"); | 
|---|
|  |  |  | var storageLocatEnd = new SysStorageLocat(); | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(areaNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0" && w.WareHouseNo == "W04" && w.AreaNo == areaNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0" && w.WareHouseNo == "W04"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (storageLocatEnd == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("目标储位信息不存在,请检查!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //开启事务 | 
|---|
|  |  |  | Db.BeginTran(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //库存箱支明细信息 | 
|---|
|  |  |  | var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList(); | 
|---|
|  |  |  | var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo && w.Status == "2").ToList(); | 
|---|
|  |  |  | if (boxList.Count != 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("该箱码信息错误,存在多个此箱码信息"); | 
|---|