| | |
| | | /// </summary> |
| | | /// <param name="searchDto">æç´¢è¯·æ±åæ°</param> |
| | | /// <returns>åé¡µç»æ</returns> |
| | | public PagedResult<ReturnableStockDto> GetReturnableStocks(ReturnableStockSearchDto searchDto) |
| | | public PagedResult<ReturnableStockDto> GetReturnableStocks( |
| | | ReturnableStockSearchDto searchDto) |
| | | { |
| | | // åæ°æ ¡éª |
| | | if (searchDto.PageIndex < 1) |
| | |
| | | } |
| | | |
| | | // 1.1 æåå»éåçæ¡ç å表ç¨äºæ¥è¯¢ |
| | | var distinctBarcodes = rackingTaskData.Select(x => x.ItemBarcode).Distinct().ToList(); |
| | | var distinctBarcodes = rackingTaskData.Select(x => x.ItemBarcode) |
| | | .Distinct().ToList(); |
| | | |
| | | // 2. æå»ºæ¥è¯¢æ¡ä»¶ |
| | | var query = Db.Queryable<MesInvItemStocks>() |
| | | .LeftJoin<MesItems>((stock, item) => stock.ItemId == item.Id) |
| | | .LeftJoin<MesDepots>((stock, item, depot) => stock.DepotsCode == depot.DepotCode) |
| | | .LeftJoin<Organize>((stock, item, depot, org) => item.UseOrg == org.Id.ToString()) |
| | | .LeftJoin<MesUnit>((stock, item, depot, org, unit) => item.ItemUnit == unit.Id.ToString()) |
| | | .Where((stock, item, depot, org, unit) => |
| | | (distinctBarcodes.Contains(stock.ItemBarcode) || distinctBarcodes.Contains(stock.StackCode) ) && |
| | | .LeftJoin<MesDepots>((stock, item, depot) => |
| | | stock.DepotsCode == depot.DepotCode) |
| | | .LeftJoin<Organize>((stock, item, depot, org) => |
| | | item.UseOrg == org.Id.ToString()) |
| | | .LeftJoin<MesUnit>((stock, item, depot, org, unit) => |
| | | item.ItemUnit == unit.Id.ToString()) |
| | | .Where((stock, item, depot, org, unit) => |
| | | (distinctBarcodes.Contains(stock.ItemBarcode) || |
| | | distinctBarcodes.Contains(stock.StackCode)) && |
| | | stock.Quantity > 0); |
| | | |
| | | // 3. åºç¨æç´¢æ¡ä»¶ |
| | |
| | | if (conditions.IqcStatus == "1") |
| | | { |
| | | // å½IqcStatus为"1"æ¶ï¼æ¥è¯¢ç¹éç´æ¥ä½¿ç¨ãå·²æ£ãå
æ£ç¶æ |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.IqcStatus == "ç¹éç´æ¥ä½¿ç¨" || |
| | | stock.IqcStatus == "å·²æ£" || |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.IqcStatus == "ç¹éç´æ¥ä½¿ç¨" || |
| | | stock.IqcStatus == "å·²æ£" || |
| | | stock.IqcStatus == "å
æ£"); |
| | | } |
| | | else |
| | | { |
| | | // å
¶ä»æ
嵿åå¼å¹é
|
| | | query = query.Where((stock, item, depot, org, unit) => stock.IqcStatus == conditions.IqcStatus); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.IqcStatus == conditions.IqcStatus); |
| | | } |
| | | } |
| | | |
| | | if (conditions.Quantity.HasValue) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => stock.Quantity == conditions.Quantity.Value); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.Quantity == conditions.Quantity.Value); |
| | | } |
| | | |
| | | // 模ç³å¹é
æ¡ä»¶ |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.DepotName)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | depot.DepotName != null && depot.DepotName.Contains(conditions.DepotName)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | depot.DepotName != null && |
| | | depot.DepotName.Contains(conditions.DepotName)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.DepotSectionsCode)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.DepotSectionsCode != null && stock.DepotSectionsCode.Contains(conditions.DepotSectionsCode)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.DepotSectionsCode != null && |
| | | stock.DepotSectionsCode.Contains(conditions |
| | | .DepotSectionsCode)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.ItemNo)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | item.ItemNo != null && item.ItemNo.Contains(conditions.ItemNo)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | item.ItemNo != null && |
| | | item.ItemNo.Contains(conditions.ItemNo)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.ItemName)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | item.ItemName != null && item.ItemName.Contains(conditions.ItemName)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | item.ItemName != null && |
| | | item.ItemName.Contains(conditions.ItemName)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.ItemModel)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | item.ItemModel != null && item.ItemModel.Contains(conditions.ItemModel)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | item.ItemModel != null && |
| | | item.ItemModel.Contains(conditions.ItemModel)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.ItemUnitName)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | unit.Fname != null && unit.Fname.Contains(conditions.ItemUnitName)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | unit.Fname != null && |
| | | unit.Fname.Contains(conditions.ItemUnitName)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.OrgCode)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | org.Fnumber != null && org.Fnumber.Contains(conditions.OrgCode)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | org.Fnumber != null && |
| | | org.Fnumber.Contains(conditions.OrgCode)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.OrgName)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | org.Fname != null && org.Fname.Contains(conditions.OrgName)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | org.Fname != null && |
| | | org.Fname.Contains(conditions.OrgName)); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(conditions.ItemBarcode)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.ItemBarcode != null && stock.ItemBarcode.Contains(conditions.ItemBarcode)); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.ItemBarcode != null && |
| | | stock.ItemBarcode.Contains(conditions.ItemBarcode)); |
| | | } |
| | | |
| | | // æ¥æèå´æ¡ä»¶ |
| | | if (!string.IsNullOrEmpty(conditions.IndepDateStart)) |
| | | { |
| | | if (DateTime.TryParse(conditions.IndepDateStart, out var startDate)) |
| | | if (DateTime.TryParse(conditions.IndepDateStart, |
| | | out var startDate)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => stock.IndepDate >= startDate); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.IndepDate >= startDate); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | if (DateTime.TryParse(conditions.IndepDateEnd, out var endDate)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => stock.IndepDate <= endDate); |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.IndepDate <= endDate); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 4. æ¥è¯¢ææç¬¦åæ¡ä»¶çæ°æ®ï¼ä¸åé¡µï¼ |
| | | var queryResult = query |
| | | .OrderByDescending((stock, item, depot, org, unit) => stock.IndepDate) |
| | | .OrderByDescending((stock, item, depot, org, unit) => |
| | | stock.IndepDate) |
| | | .Select((stock, item, depot, org, unit) => new |
| | | { |
| | | stock.IqcStatus, |
| | |
| | | .ToList(); |
| | | |
| | | // 5. å¨å
åä¸è½¬æ¢ä¸ºDTOï¼å
³èPalletCodeå¹¶èµå¼ItemBarcodeï¼ä¼å
使ç¨ç®±æ¡ç StockStackCodeï¼ |
| | | var tempDataList = queryResult.Select(x => |
| | | var tempDataList = queryResult.Select(x => |
| | | { |
| | | // ä¼å
使ç¨StockStackCodeï¼å¦å使ç¨ItemBarcode廿¥æ¾PalletCode |
| | | var barcodeToMatch = !string.IsNullOrEmpty(x.StockStackCode) ? x.StockStackCode : x.ItemBarcode; |
| | | var barcodeToMatch = !string.IsNullOrEmpty(x.StockStackCode) |
| | | ? x.StockStackCode |
| | | : x.ItemBarcode; |
| | | var rackingTask = rackingTaskData |
| | | .Where(r => r.ItemBarcode == barcodeToMatch) |
| | | .FirstOrDefault(); |
| | | |
| | | |
| | | // æ ¹æ®Codeå¼ç¡®å®åºåç¶æ: null为ç«åºå
¥åºä¸(0), 200为已å¨ç«åºå
(1) |
| | | string stockStatus = "è¿å
¥ç«åºçè·¯ä¸"; // é»è®¤ä¸ºç«åºå
¥åºä¸ |
| | | if (rackingTask?.Code != null) |
| | |
| | | if (conditions != null && !string.IsNullOrEmpty(conditions.StackCode)) |
| | | { |
| | | tempDataList = tempDataList |
| | | .Where(x => x.StackCode != null && x.StackCode.Contains(conditions.StackCode)) |
| | | .Where(x => |
| | | x.StackCode != null && |
| | | x.StackCode.Contains(conditions.StackCode)) |
| | | .ToList(); |
| | | } |
| | | |
| | |
| | | // 6. åºç¨ItemTypeçé(å¨å
åä¸è¿æ»¤) |
| | | if (conditions?.ItemType != null) |
| | | { |
| | | dataList = dataList.Where(x => x.ItemType == conditions.ItemType).ToList(); |
| | | dataList = dataList.Where(x => x.ItemType == conditions.ItemType) |
| | | .ToList(); |
| | | } |
| | | |
| | | // 7. è®¡ç®æ»è®°å½æ°åå页忰ï¼åºäºæç»ç»æï¼ |
| | | var totalRecords = dataList.Count; |
| | | var totalPages = (int)Math.Ceiling((double)totalRecords / searchDto.PageSize); |
| | | var totalPages = |
| | | (int)Math.Ceiling((double)totalRecords / searchDto.PageSize); |
| | | var skip = (searchDto.PageIndex - 1) * searchDto.PageSize; |
| | | |
| | | // 8. 对æç»ç»æè¿è¡å页 |
| | | var pagedDataList = dataList.Skip(skip).Take(searchDto.PageSize).ToList(); |
| | | var pagedDataList = |
| | | dataList.Skip(skip).Take(searchDto.PageSize).ToList(); |
| | | |
| | | // 9. è¿ååé¡µç»æ |
| | | return new PagedResult<ReturnableStockDto> |
| | |
| | | .ToList(); |
| | | |
| | | // 3. å¨å
åä¸è¿è¡æ°æ®è½¬æ¢ |
| | | var result = queryResult.Select(x => { |
| | | var result = queryResult.Select(x => |
| | | { |
| | | // æ ¹æ®æ¡ç æ¥æ¾å¯¹åºçç«åºä»»å¡ä¿¡æ¯ |
| | | var rackingTask = rackingTaskData |
| | | .Where(r => r.ItemBarcode == x.ItemBarcode) |
| | | .FirstOrDefault(); |
| | | |
| | | // æ ¹æ®Codeå¼ç¡®å®åºåç¶æ: null为ç«åºå
¥åºä¸(0), 200为已å¨ç«åºå
(1) |
| | | |
| | | // æ ¹æ®Codeå¼ç¡®å®åºåç¶æ: null为ç«åºå
¥åºä¸(0), 200为已å¨ç«åºå
(1) |
| | | string stockStatus = "0"; // é»è®¤ä¸ºç«åºå
¥åºä¸ |
| | | if (rackingTask?.Code != null) |
| | | { |
| | | stockStatus = rackingTask.Code == "200" ? "1" : "2"; // 200对åºå·²å¨ç«åºä¸(1)ï¼å
¶ä»é500å¼ä¸ºè¿å
¥ç«åºçè·¯ä¸(2) |
| | | stockStatus = |
| | | rackingTask.Code == "200" |
| | | ? "1" |
| | | : "2"; // 200对åºå·²å¨ç«åºä¸(1)ï¼å
¶ä»é500å¼ä¸ºè¿å
¥ç«åºçè·¯ä¸(2) |
| | | } |
| | | |
| | | return new ReturnableStockDto |
| | |
| | | // 对æ¯ä¸ªæ¡ç åç¬å¤ç |
| | | foreach (var barcode in dto.ItemBarcodes) |
| | | { |
| | | // æ£æ¥æè¿ä¸¤åéå
æ¯å¦å·²ç»åå¨ç¸åç barcode 被å¤çè¿ |
| | | var twoMinutesAgo = DateTime.Now.AddMinutes(-2); |
| | | var recentTask = Db.Queryable<XbRackingTaskSyxtLog>() |
| | | .Where(x => |
| | | x.ItemBarcode == barcode && |
| | | x.CreateDate >= twoMinutesAgo) |
| | | .First(); |
| | | |
| | | if (recentTask != null) |
| | | { |
| | | throw new Exception( |
| | | $"ç©ææ¡ç {barcode} å¨ä¸¤åéå
å·²è¢«æ«æå¤çï¼è¯·å¿é夿ä½ã为é¿å
ç«åºç³»ç»ä»»å¡éå¤ä¸åï¼ç³»ç»éå¶åä¸ç©ææ¡ç å¨ä¸¤åéå
åªè½å¤ç䏿¬¡ã"); |
| | | } |
| | | |
| | | decimal messageId = 0; |
| | | string taskCode = ""; |
| | | |
| | |
| | | .LeftJoin<MesItems>((stock, item) => |
| | | stock.ItemId == item.Id) |
| | | .Where((stock, item) => |
| | | (stock.ItemBarcode == barcode || stock.StackCode == barcode) && stock.Quantity > 0) |
| | | (stock.ItemBarcode == barcode || |
| | | stock.StackCode == barcode) && stock.Quantity > 0) |
| | | .GroupBy((stock, item) => |
| | | new { stock.ItemId, stock.LotNo }) |
| | | .Select((stock, item) => new |
| | |
| | | ItemName = SqlFunc.AggregateMax(item.ItemName), |
| | | LotNo = stock.LotNo ?? "", |
| | | Quantity = SqlFunc.AggregateSum(stock.Quantity), |
| | | StackCode = SqlFunc.AggregateMax(stock.DepotSectionsCode) |
| | | StackCode = |
| | | SqlFunc.AggregateMax(stock.DepotSectionsCode) |
| | | }) |
| | | .ToList(); |
| | | |
| | |
| | | taskCode = taskCode, |
| | | taskType = "1", |
| | | palletCode = rackingTaskInfo?.PalletCode ?? "", |
| | | widthType = rackingTaskInfo?.WidthType?.ToString() ?? "2000", |
| | | widthType = rackingTaskInfo?.WidthType?.ToString() ?? |
| | | "2000", |
| | | station = dto.Station |
| | | }; |
| | | var requestList = new[] { requestData }; |
| | | var jsonRequest = JsonConvert.SerializeObject(requestList); |
| | | |
| | | // 5. è®°å½å°MessageCenter表(请æ±å) |
| | | |
| | | |
| | | var messageCenter = new MessageCenter |
| | | { |
| | | { |
| | | TableName = "XB_RACKING_TASK_SYXT_LOG", |
| | | Url = |
| | | "http://172.20.5.5:50080/Services/Wmcs/RetrieveTask", |
| | |
| | | Data = jsonRequest, |
| | | DataInserted = jsonRequest |
| | | }; |
| | | messageId = Db.Insertable(messageCenter).ExecuteReturnIdentity(); |
| | | messageId = Db.Insertable(messageCenter) |
| | | .ExecuteReturnIdentity(); |
| | | |
| | | // 6. è°ç¨HTTPæ¥å£ |
| | | var apiUrl = |