| | |
| | | /// </summary> |
| | | /// <param name="searchDto">搜索请求参数</param> |
| | | /// <returns>分页结果</returns> |
| | | public PagedResult<ReturnableStockDto> GetReturnableStocks(ReturnableStockSearchDto searchDto) |
| | | public PagedResult<ReturnableStockDto> GetReturnableStocks( |
| | | ReturnableStockSearchDto searchDto) |
| | | { |
| | | // 参数校验 |
| | | if (searchDto.PageIndex < 1) |
| | |
| | | throw new Exception("每页条数必须为10、20或50"); |
| | | } |
| | | |
| | | // 1. 查询XB_RACKING_TASK_SYXT_LOG中所有的条码并去重 |
| | | var distinctBarcodes = Db.Queryable<XbRackingTaskSyxtLog>() |
| | | // 1. 查询XB_RACKING_TASK_SYXT_LOG中ItemBarcode和PalletCode的映射关系 |
| | | var allRackingTaskData = Db.Queryable<XbRackingTaskSyxtLog>() |
| | | .Where(x => !string.IsNullOrEmpty(x.ItemBarcode)) |
| | | .Select(x => x.ItemBarcode) |
| | | .Distinct() |
| | | .Select(x => new { x.ItemBarcode, x.PalletCode, x.Code, x.Id }) |
| | | .ToList(); |
| | | |
| | | if (distinctBarcodes == null || !distinctBarcodes.Any()) |
| | | // ReturnableStockDto增加一个库存状态的字段 |
| | | // 当allRackingTaskData中的Code为null时,库存状态为立库入库中 |
| | | // 当allRackingTaskData中的Code为200时,库存状态为已经在立库内 |
| | | // 对每个条码,取最新ID的记录,并过滤掉Code为500(表示失败)的记录 |
| | | var rackingTaskData = allRackingTaskData |
| | | .GroupBy(x => x.ItemBarcode) // 按条码分组 |
| | | .Select(g => g.OrderByDescending(x => x.Id).First()) // 取每个条码最新的一条记录 |
| | | .Where(x => x.Code != "500") // 过滤掉Code为500的失败记录 |
| | | .ToList(); |
| | | |
| | | if (rackingTaskData == null || !rackingTaskData.Any()) |
| | | { |
| | | return new PagedResult<ReturnableStockDto> |
| | | { |
| | |
| | | }; |
| | | } |
| | | |
| | | // 1.1 提取去重后的条码列表用于查询 |
| | | 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) && |
| | | .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. 应用搜索条件 |
| | | var conditions = searchDto.Conditions; |
| | | if (conditions != null) |
| | | { |
| | | //当conditions.IqcStatus为1时查询的值就要是特采直接使用,已检,免检,1的值 |
| | | // 精确匹配条件 |
| | | if (!string.IsNullOrEmpty(conditions.IqcStatus)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => stock.IqcStatus == conditions.IqcStatus); |
| | | if (conditions.IqcStatus == "1") |
| | | { |
| | | // 当IqcStatus为"1"时,查询特采直接使用、已检、免检状态 |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | 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.StackCode)) |
| | | { |
| | | query = query.Where((stock, item, depot, org, unit) => |
| | | stock.StackCode != null && stock.StackCode.Contains(conditions.StackCode)); |
| | | } |
| | | |
| | | 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 totalRecords = query.Count(); |
| | | |
| | | // 5. 计算分页参数 |
| | | var totalPages = (int)Math.Ceiling((double)totalRecords / searchDto.PageSize); |
| | | var skip = (searchDto.PageIndex - 1) * searchDto.PageSize; |
| | | |
| | | // 6. 查询当前页数据(先查出中间数据) |
| | | // 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, |
| | | stock.StackCode, |
| | | DepotCode = stock.DepotsCode, |
| | | depot.DepotName, |
| | | stock.DepotSectionsCode, |
| | |
| | | stock.IndepDate, |
| | | OrgCode = org.Fnumber, |
| | | OrgName = org.Fname, |
| | | stock.ItemBarcode |
| | | stock.ItemBarcode, |
| | | StockStackCode = stock.StackCode |
| | | }) |
| | | .Skip(skip) |
| | | .Take(searchDto.PageSize) |
| | | .ToList(); |
| | | |
| | | // 7. 在内存中转换为DTO |
| | | var dataList = queryResult.Select(x => new ReturnableStockDto |
| | | // 5. 在内存中转换为DTO,关联PalletCode并赋值ItemBarcode(优先使用箱条码StockStackCode) |
| | | var tempDataList = queryResult.Select(x => |
| | | { |
| | | IqcStatus = x.IqcStatus == "已检" ? "1" : "0", |
| | | ItemType = x.DepotName == "原材料仓" ? "0" : "1", |
| | | StackCode = x.StackCode, |
| | | DepotCode = x.DepotCode, |
| | | DepotName = x.DepotName, |
| | | DepotSectionsCode = x.DepotSectionsCode, |
| | | ItemNo = x.ItemNo, |
| | | ItemName = x.ItemName, |
| | | ItemModel = x.ItemModel, |
| | | Quantity = x.Quantity, |
| | | ItemUnit = x.ItemUnit, |
| | | ItemUnitName = x.ItemUnitName, |
| | | IndepDate = x.IndepDate, |
| | | OrgCode = x.OrgCode, |
| | | OrgName = x.OrgName, |
| | | ItemBarcode = x.ItemBarcode |
| | | // 优先使用StockStackCode,否则使用ItemBarcode去查找PalletCode |
| | | 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) |
| | | { |
| | | stockStatus = rackingTask.Code == "200" ? "已在立库中" : "进入立库的路上"; |
| | | } |
| | | |
| | | return new |
| | | { |
| | | IqcStatus = x.IqcStatus == "已检" ? "1" : "0", |
| | | ItemType = x.DepotName == "原材料仓" ? "0" : "1", |
| | | StackCode = rackingTask?.PalletCode, // 使用PalletCode作为母托盘编号 |
| | | x.DepotCode, |
| | | x.DepotName, |
| | | x.DepotSectionsCode, |
| | | x.ItemNo, |
| | | x.ItemName, |
| | | x.ItemModel, |
| | | x.Quantity, |
| | | x.ItemUnit, |
| | | x.ItemUnitName, |
| | | x.IndepDate, |
| | | x.OrgCode, |
| | | x.OrgName, |
| | | ItemBarcode = barcodeToMatch, |
| | | StockStatus = stockStatus // 添加库存状态 |
| | | }; |
| | | }).ToList(); |
| | | |
| | | // 8. 应用ItemType筛选(在内存中过滤) |
| | | // 5.1 应用StackCode搜索条件(在内存中过滤PalletCode) |
| | | if (conditions != null && !string.IsNullOrEmpty(conditions.StackCode)) |
| | | { |
| | | tempDataList = tempDataList |
| | | .Where(x => |
| | | x.StackCode != null && |
| | | x.StackCode.Contains(conditions.StackCode)) |
| | | .ToList(); |
| | | } |
| | | |
| | | // 5.2 应用StockStatus搜索条件(在内存中过滤) |
| | | if (conditions != null && !string.IsNullOrEmpty(conditions.StockStatus)) |
| | | { |
| | | tempDataList = tempDataList |
| | | .Where(x => x.StockStatus == conditions.StockStatus) |
| | | .ToList(); |
| | | } |
| | | |
| | | // 5.3 分组并合计Quantity |
| | | var dataList = tempDataList |
| | | .GroupBy(x => new |
| | | { |
| | | x.IqcStatus, |
| | | x.ItemType, |
| | | x.StackCode, |
| | | x.DepotCode, |
| | | x.DepotName, |
| | | x.DepotSectionsCode, |
| | | x.ItemNo, |
| | | x.ItemName, |
| | | x.ItemModel, |
| | | x.ItemUnit, |
| | | x.ItemUnitName, |
| | | x.OrgCode, |
| | | x.OrgName, |
| | | x.ItemBarcode, |
| | | x.StockStatus // 添加库存状态到分组键中 |
| | | }) |
| | | .Select(g => new ReturnableStockDto |
| | | { |
| | | IqcStatus = g.Key.IqcStatus, |
| | | ItemType = g.Key.ItemType, |
| | | StackCode = g.Key.StackCode, |
| | | DepotCode = g.Key.DepotCode, |
| | | DepotName = g.Key.DepotName, |
| | | DepotSectionsCode = g.Key.DepotSectionsCode, |
| | | ItemNo = g.Key.ItemNo, |
| | | ItemName = g.Key.ItemName, |
| | | ItemModel = g.Key.ItemModel, |
| | | Quantity = g.Sum(x => x.Quantity), |
| | | ItemUnit = g.Key.ItemUnit, |
| | | ItemUnitName = g.Key.ItemUnitName, |
| | | IndepDate = g.Max(x => x.IndepDate), |
| | | OrgCode = g.Key.OrgCode, |
| | | OrgName = g.Key.OrgName, |
| | | ItemBarcode = g.Key.ItemBarcode, |
| | | StockStatus = g.Key.StockStatus // 添加库存状态到DTO中 |
| | | }).ToList(); |
| | | |
| | | // 6. 应用ItemType筛选(在内存中过滤) |
| | | if (conditions?.ItemType != null) |
| | | { |
| | | dataList = dataList.Where(x => x.ItemType == conditions.ItemType).ToList(); |
| | | // 重新计算分页信息 |
| | | totalRecords = dataList.Count; |
| | | totalPages = (int)Math.Ceiling((double)totalRecords / searchDto.PageSize); |
| | | dataList = dataList.Skip(skip).Take(searchDto.PageSize).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 skip = (searchDto.PageIndex - 1) * searchDto.PageSize; |
| | | |
| | | // 8. 对最终结果进行分页 |
| | | var pagedDataList = |
| | | dataList.Skip(skip).Take(searchDto.PageSize).ToList(); |
| | | |
| | | // 9. 返回分页结果 |
| | | return new PagedResult<ReturnableStockDto> |
| | | { |
| | | TbBillList = dataList, |
| | | TbBillList = pagedDataList, |
| | | Pagination = new PaginationInfo |
| | | { |
| | | CurrentPage = searchDto.PageIndex, |
| | |
| | | { |
| | | return new List<ReturnableStockDto>(); |
| | | } |
| | | |
| | | // 1.1 查询XB_RACKING_TASK_SYXT_LOG中ItemBarcode和PalletCode、Code的映射关系 |
| | | var allRackingTaskData = Db.Queryable<XbRackingTaskSyxtLog>() |
| | | .Where(x => !string.IsNullOrEmpty(x.ItemBarcode)) |
| | | .Select(x => new { x.ItemBarcode, x.PalletCode, x.Code, x.Id }) |
| | | .ToList(); |
| | | |
| | | var rackingTaskData = allRackingTaskData |
| | | .GroupBy(x => x.ItemBarcode) |
| | | .Select(g => g.OrderByDescending(x => x.Id).First()) |
| | | .ToList(); |
| | | |
| | | // 2. 使用条码查询MES_INV_ITEM_STOCKS中的数据,关联MES_ITEMS、MES_DEPOTS、ORGANIZE、MES_UNIT表 |
| | | var queryResult = Db.Queryable<MesInvItemStocks>() |
| | |
| | | .ToList(); |
| | | |
| | | // 3. 在内存中进行数据转换 |
| | | var result = queryResult.Select(x => new ReturnableStockDto |
| | | var result = queryResult.Select(x => |
| | | { |
| | | IqcStatus = x.IqcStatus == "已检" ? "1" : "0", |
| | | ItemType = x.DepotName == "原材料仓" ? "0" : "1", |
| | | StackCode = x.StackCode, |
| | | DepotCode = x.DepotCode, |
| | | DepotName = x.DepotName, |
| | | DepotSectionsCode = x.DepotSectionsCode, |
| | | ItemNo = x.ItemNo, |
| | | ItemName = x.ItemName, |
| | | ItemModel = x.ItemModel, |
| | | Quantity = x.Quantity, |
| | | ItemUnit = x.ItemUnit, |
| | | ItemUnitName = x.ItemUnitName, |
| | | IndepDate = x.IndepDate, |
| | | OrgCode = x.OrgCode, |
| | | OrgName = x.OrgName, |
| | | ItemBarcode = x.ItemBarcode |
| | | // 根据条码查找对应的立库任务信息 |
| | | var rackingTask = rackingTaskData |
| | | .Where(r => r.ItemBarcode == x.ItemBarcode) |
| | | .FirstOrDefault(); |
| | | |
| | | // 根据Code值确定库存状态: null为立库入库中(0), 200为已在立库内(1) |
| | | string stockStatus = "0"; // 默认为立库入库中 |
| | | if (rackingTask?.Code != null) |
| | | { |
| | | stockStatus = |
| | | rackingTask.Code == "200" |
| | | ? "1" |
| | | : "2"; // 200对应已在立库中(1),其他非500值为进入立库的路上(2) |
| | | } |
| | | |
| | | return new ReturnableStockDto |
| | | { |
| | | IqcStatus = x.IqcStatus == "已检" ? "1" : "0", |
| | | ItemType = x.DepotName == "原材料仓" ? "0" : "1", |
| | | StackCode = x.StackCode, |
| | | DepotCode = x.DepotCode, |
| | | DepotName = x.DepotName, |
| | | DepotSectionsCode = x.DepotSectionsCode, |
| | | ItemNo = x.ItemNo, |
| | | ItemName = x.ItemName, |
| | | ItemModel = x.ItemModel, |
| | | Quantity = x.Quantity, |
| | | ItemUnit = x.ItemUnit, |
| | | ItemUnitName = x.ItemUnitName, |
| | | IndepDate = x.IndepDate, |
| | | OrgCode = x.OrgCode, |
| | | OrgName = x.OrgName, |
| | | ItemBarcode = x.ItemBarcode, |
| | | StockStatus = stockStatus // 添加库存状态 |
| | | }; |
| | | }).ToList(); |
| | | |
| | | return result; |
| | |
| | | // 对每个条码单独处理 |
| | | 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 = ""; |
| | | |
| | | // 根据条码查询XB_RACKING_TASK_SYXT_LOG表,查询max(PALLETCODE)和对应的widthType |
| | | var rackingTaskInfo = Db.Queryable<XbRackingTaskSyxtLog>() |
| | | .Where(x => x.ItemBarcode == barcode) |
| | | .OrderByDescending(x => x.Id) |
| | | .Select(x => new { x.PalletCode, x.WidthType }) |
| | | .First(); |
| | | |
| | | try |
| | | { |
| | |
| | | .LeftJoin<MesItems>((stock, item) => |
| | | stock.ItemId == item.Id) |
| | | .Where((stock, item) => |
| | | stock.ItemBarcode == 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 = firstStock.StackCode ?? "", |
| | | widthType = "180", |
| | | station = "3" |
| | | palletCode = rackingTaskInfo?.PalletCode ?? "", |
| | | 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 = |
| | |
| | | CreateDate = DateTime.Now, |
| | | TaskCode = taskCode, |
| | | TaskType = "立库出库请求", |
| | | PalletCode = firstStock.StackCode, |
| | | WidthType = 180, |
| | | PalletCode = rackingTaskInfo?.PalletCode ?? "", |
| | | WidthType = rackingTaskInfo?.WidthType ?? 2000, |
| | | MaterialName = firstStock.ItemName, |
| | | MaterialCode = firstStock.ItemNo, |
| | | BatchNo = firstStock.LotNo, |
| | | Quantity = firstStock.Quantity, |
| | | WarehousingJson = responseStr, |
| | | QcStatus = 2, |
| | | ItemBarcode = barcode, |
| | | Code = "200", |
| | | JsonMessage = jsonMessage ?? "成功" |
| | | ItemBarcode = barcode |
| | | }; |
| | | Db.Insertable(taskLog).ExecuteCommand(); |
| | | |