后端改动

This commit is contained in:
杨学谦 2025-12-09 11:14:28 +08:00
parent b456252541
commit 4d35a2a337
7 changed files with 356 additions and 54 deletions

View File

@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wms_main.constant.enums.wms.WmsPickTaskStatusEnum; import com.wms_main.constant.enums.wms.WmsPickTaskStatusEnum;
import com.wms_main.dao.ITAppPickTaskService; import com.wms_main.dao.ITAppPickTaskService;
import com.wms_main.dao.ITAppStockCompareService; import com.wms_main.dao.ITAppStockCompareService;
import com.wms_main.dao.ITAppStockService;
import com.wms_main.dao.ITempEwmInboundDataService; import com.wms_main.dao.ITempEwmInboundDataService;
import com.wms_main.model.bo.wcs.WcsStackerTask; import com.wms_main.model.bo.wcs.WcsStackerTask;
import com.wms_main.model.bo.wms.StockConfirmEntity;
import com.wms_main.model.dto.request.ewm.*; import com.wms_main.model.dto.request.ewm.*;
import com.wms_main.model.dto.request.wcs.WcsBoxArriveRequest; import com.wms_main.model.dto.request.wcs.WcsBoxArriveRequest;
import com.wms_main.model.dto.request.wcs.WcsTaskResultRequest; import com.wms_main.model.dto.request.wcs.WcsTaskResultRequest;
@ -19,9 +21,11 @@ import com.wms_main.model.dto.response.wcs.WcsApiResponse;
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse; import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
import com.wms_main.model.dto.response.wms.WmsApiResponse; import com.wms_main.model.dto.response.wms.WmsApiResponse;
import com.wms_main.model.po.TAppPickTask; import com.wms_main.model.po.TAppPickTask;
import com.wms_main.model.po.TAppStock;
import com.wms_main.model.po.TAppStockCompare; import com.wms_main.model.po.TAppStockCompare;
import com.wms_main.model.vo.wms.InventoryConfirmVo; import com.wms_main.model.vo.wms.InventoryConfirmVo;
import com.wms_main.model.vo.wms.TaskConfirmVo; import com.wms_main.model.vo.wms.TaskConfirmVo;
import com.wms_main.repository.utils.StringUtils;
import com.wms_main.service.api.IEwmApiService; import com.wms_main.service.api.IEwmApiService;
import com.wms_main.service.controller.ITaskControllerService; import com.wms_main.service.controller.ITaskControllerService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -41,7 +45,7 @@ public class TaskController {
private final ITaskControllerService taskControllerService; private final ITaskControllerService taskControllerService;
private final IEwmApiService ewmApiService; private final IEwmApiService ewmApiService;
private final ITAppPickTaskService appPickTaskService;// 拣选任务服务 private final ITAppPickTaskService appPickTaskService;// 拣选任务服务
private final ITAppStockService appStockService;// 库存服务
/** /**
* 请求入库 * 请求入库
@ -58,7 +62,7 @@ public class TaskController {
* @param stockOutRequest 请求信息 * @param stockOutRequest 请求信息
* @return 处理结果 * @return 处理结果
*/ */
//@PostMapping("/requireStockOut") @PostMapping("/requireStockOut")
public BaseWmsApiResponse requireStockOut(@RequestBody StockOutRequest stockOutRequest) { public BaseWmsApiResponse requireStockOut(@RequestBody StockOutRequest stockOutRequest) {
return taskControllerService.requireStockOut(stockOutRequest); return taskControllerService.requireStockOut(stockOutRequest);
} }
@ -133,11 +137,67 @@ public class TaskController {
* test * test
*/ */
@PostMapping("/status") @PostMapping("/status")
public EwmApiBackResponse test(@RequestBody SendWarehouseOutCompletedRequest request) { public EwmApiBackResponse test(@RequestBody StockConfirmEntity stockConfirm) {
//return taskControllerService.ewmInformationBack(wcsVehicleInRequest); //return taskControllerService.ewmInformationBack(wcsVehicleInRequest);
// return ewmApiService.getEwmStock(request); // return ewmApiService.getEwmStock(request);
return ewmApiService.sendWarehouseOutCompleted(request); //return ewmApiService.sendWarehouseOutCompleted(request);
//return ewmApiService.sendWarehouseInCompleted(new SendWarehouseInCompletedRequest()); //return ewmApiService.sendWarehouseInCompleted(new SendWarehouseInCompletedRequest());
// 查询对应的库存信息
List<TAppStock> stockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
// 特殊库存字段精确匹配 - 根据传入值决定匹配条件
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getSpecialStock())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getSpecialStock)
.or()
.eq(TAppStock::getSpecialStock, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getSpecialStock, stockConfirm.getSpecialStock());
}
})
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getSpecialStockNo())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getSpecialStockNo)
.or()
.eq(TAppStock::getSpecialStockNo, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getSpecialStockNo, stockConfirm.getSpecialStockNo());
}
})
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getSpecialStockItemNo())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getSpecialStockItemNo)
.or()
.eq(TAppStock::getSpecialStockItemNo, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getSpecialStockItemNo, stockConfirm.getSpecialStockItemNo());
}
})
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getBatchNo())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getBatchNo)
.or()
.eq(TAppStock::getBatchNo, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getBatchNo, stockConfirm.getBatchNo());
}
})
.orderByDesc(TAppStock::getFirstInTime)
);
return EwmApiBackResponse.success(
"查询成功",
stockList
);
} }
/** /**

View File

@ -34,4 +34,28 @@ public class InventoryConfirmRequest extends BaseWmsRequest {
*/ */
@JsonProperty("confirmNum") @JsonProperty("confirmNum")
private Integer confirmNum; private Integer confirmNum;
/**
* 特殊库存
*/
@JsonProperty("specialStock")
private String specialStock;
/**
* 批次号
*/
@JsonProperty("batchNo")
private String batchNo;
/**
* 特殊库存号
*/
@JsonProperty("specialStockNo")
private String specialStockNo;
/**
* 特殊库存item号
*/
@JsonProperty("specialStockItemNo")
private String specialStockItemNo;
} }

View File

@ -18,7 +18,7 @@ public interface IStockDataService {
* @param userName 用户名 * @param userName 用户名
* @param inventoryId 盘点任务号 * @param inventoryId 盘点任务号
*/ */
void updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId); boolean updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId);
/** /**
* 查询库存预警值 * 查询库存预警值

View File

@ -260,7 +260,7 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
.eq(TAppStock::getStockStatus, WmsStockStatusEnums.OUTING.getCode()) .eq(TAppStock::getStockStatus, WmsStockStatusEnums.OUTING.getCode())
); );
// 更新当前载具到达当前点位的拣选任务为已到达 // 更新当前载具到达当前点位的拣选任务为已到达
updateVehicleArriveStatus(targetPickTask); //updateVehicleArriveStatus(targetPickTask);
} }
// 更新拣选任务信息添加拣选任务记录信息 // 更新拣选任务信息添加拣选任务记录信息
pickRecords.add(new TAppPickTaskBak( pickRecords.add(new TAppPickTaskBak(
@ -549,6 +549,20 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
return resultVo; return resultVo;
} }
/**
* 构建包含特殊库存属性的复合键
* @param stock 库存对象
* @return 复合键字符串
*/
private String buildCompositeKey(TAppStock stock) {
return stock.getGoodsId() + "_" +
(stock.getSpecialStock() != null ? stock.getSpecialStock() : "") + "_" +
(stock.getBatchNo() != null ? stock.getBatchNo() : "") + "_" +
(stock.getSpecialStockNo() != null ? stock.getSpecialStockNo() : "") + "_" +
(stock.getSpecialStockItemNo() != null ? stock.getSpecialStockItemNo() : "");
}
/** /**
* 获取这个载具的盘点确认信息 * 获取这个载具的盘点确认信息
* @param vehicleId 载具号 * @param vehicleId 载具号
@ -570,28 +584,45 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
if (stockList == null || stockList.isEmpty()) { if (stockList == null || stockList.isEmpty()) {
return null; return null;
} }
// 将这些库存根据料号Map一下 并汇总库存数量 // 将这些库存根据料号Map一下 并汇总库存数量相同特殊库存属性的才汇总
Map<String, Integer> sumNumByGoodsMap = new HashMap<>(); Map<String, Integer> sumNumByGoodsMap = new HashMap<>();
Map<String, TAppStock> firstStockByGoodsMap = new HashMap<>();
for (TAppStock stock : stockList) { for (TAppStock stock : stockList) {
if (sumNumByGoodsMap.containsKey(stock.getGoodsId())) { // 构建包含特殊库存属性的复合键
sumNumByGoodsMap.replace(stock.getGoodsId(), sumNumByGoodsMap.get(stock.getGoodsId()) + stock.getRealNum()); String compositeKey = buildCompositeKey(stock);
// 为每个goodsId+特殊属性组合只保留一个代表性的库存记录用于获取特殊库存信息
if (!firstStockByGoodsMap.containsKey(compositeKey)) {
firstStockByGoodsMap.put(compositeKey, stock);
}
// 只汇总相同特殊库存属性的库存数量
if (sumNumByGoodsMap.containsKey(compositeKey)) {
sumNumByGoodsMap.replace(compositeKey, sumNumByGoodsMap.get(compositeKey) + stock.getRealNum());
} else { } else {
sumNumByGoodsMap.put(stock.getGoodsId(), stock.getRealNum()); sumNumByGoodsMap.put(compositeKey, stock.getRealNum());
} }
} }
List<TAppPickTask> pickTasks = appPickTaskService.list(new LambdaQueryWrapper<TAppPickTask>() List<TAppPickTask> pickTasks = appPickTaskService.list(new LambdaQueryWrapper<TAppPickTask>()
.eq(TAppPickTask::getVehicleId, vehicleId) .eq(TAppPickTask::getVehicleId, vehicleId)
.eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode()) .eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode())
); );
for (TAppInventory inventory : inventoryList) { for (TAppInventory inventory : inventoryList) {
if (sumNumByGoodsMap.containsKey(inventory.getGoodsId())) { // 使用相同的复合键逻辑来匹配库存
String inventoryCompositeKey = buildCompositeKeyForInventory(inventory);
if (sumNumByGoodsMap.containsKey(inventoryCompositeKey)) {
// 返回盘点确认信息 // 返回盘点确认信息
InventoryConfirmVo inventoryConfirmVo = new InventoryConfirmVo(); InventoryConfirmVo inventoryConfirmVo = new InventoryConfirmVo();
inventoryConfirmVo.setInventoryId(inventory.getInventoryId()); inventoryConfirmVo.setInventoryId(inventory.getInventoryId());
inventoryConfirmVo.setGoodsId(inventory.getGoodsId()); inventoryConfirmVo.setGoodsId(inventory.getGoodsId());
inventoryConfirmVo.setVehicleId(inventory.getVehicleId()); inventoryConfirmVo.setVehicleId(inventory.getVehicleId());
inventoryConfirmVo.setStockNum(sumNumByGoodsMap.get(inventory.getGoodsId())); inventoryConfirmVo.setStockNum(sumNumByGoodsMap.get(inventoryCompositeKey));
inventoryConfirmVo.setConfirmNum(sumNumByGoodsMap.get(inventory.getGoodsId())); inventoryConfirmVo.setConfirmNum(sumNumByGoodsMap.get(inventoryCompositeKey));
inventoryConfirmVo.setChildStandId(pickTasks.getFirst().getPickStand()); inventoryConfirmVo.setChildStandId(pickTasks.getFirst().getPickStand());
inventoryConfirmVo.setSpecialStock(inventory.getSpecialStock()); inventoryConfirmVo.setSpecialStock(inventory.getSpecialStock());
inventoryConfirmVo.setSpecialStockNo(inventory.getSpecialStockNo()); inventoryConfirmVo.setSpecialStockNo(inventory.getSpecialStockNo());
@ -601,6 +632,21 @@ public class ConveyTaskServiceImpl implements IConveyTaskService {
return inventoryConfirmVo; return inventoryConfirmVo;
} }
} }
return null; return null;
} }
/**
* 构建包含特殊库存属性的复合键用于Inventory对象
* @param inventory 盘点对象
* @return 复合键字符串
*/
private String buildCompositeKeyForInventory(TAppInventory inventory) {
return inventory.getGoodsId() + "_" +
(inventory.getSpecialStock() != null ? inventory.getSpecialStock() : "") + "_" +
(inventory.getBatchNo() != null ? inventory.getBatchNo() : "") + "_" +
(inventory.getSpecialStockNo() != null ? inventory.getSpecialStockNo() : "") + "_" +
(inventory.getSpecialStockItemNo() != null ? inventory.getSpecialStockItemNo() : "");
}
} }

View File

@ -591,6 +591,20 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
"" ""
); );
appTaskService.save(outTask); appTaskService.save(outTask);
// 添加到达即删除的拣选任务
TAppPickTask pickTask = new TAppPickTask(
UUIDUtils.getNewUUID(),
"P21", // 与出库任务的目标站台一致
vehicleId,
WmsPickTaskStatusEnum.TEMP.getCode(),
LocalDateTime.now(),
null,
null,
null,
3 // 类型设置为3表示到达即删除
);
appPickTaskService.save(pickTask);
}else { }else {
log.info("调用EWM系统接口成功请求参数: {}", request); log.info("调用EWM系统接口成功请求参数: {}", request);
} }

View File

@ -19,7 +19,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -42,17 +41,78 @@ public class StockDataServiceImpl implements IStockDataService {
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId) { public boolean updateStockInfo(StockConfirmEntity stockConfirm, String standId, String userName, String reason, String inventoryId) {
if (stockConfirm == null || StringUtils.isEmpty(stockConfirm.getVehicleId()) || StringUtils.isEmpty(stockConfirm.getGoodsId()) if (stockConfirm == null || StringUtils.isEmpty(stockConfirm.getVehicleId()) || StringUtils.isEmpty(stockConfirm.getGoodsId())
|| stockConfirm.getRealRemainQty() == null) { || stockConfirm.getRealRemainQty() == null) {
return; return false;
} }
// 查询对应的库存信息 // 查询对应的库存信息
List<TAppStock> stockList = appStockService.list(new LambdaQueryWrapper<TAppStock>() List<TAppStock> stockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId()) .eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId()) .eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
// 特殊库存字段精确匹配 - 根据传入值决定匹配条件
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getSpecialStock())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getSpecialStock)
.or()
.eq(TAppStock::getSpecialStock, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getSpecialStock, stockConfirm.getSpecialStock());
}
})
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getSpecialStockNo())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getSpecialStockNo)
.or()
.eq(TAppStock::getSpecialStockNo, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getSpecialStockNo, stockConfirm.getSpecialStockNo());
}
})
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getSpecialStockItemNo())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getSpecialStockItemNo)
.or()
.eq(TAppStock::getSpecialStockItemNo, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getSpecialStockItemNo, stockConfirm.getSpecialStockItemNo());
}
})
.and(wrapper -> {
if (StringUtils.isEmpty(stockConfirm.getBatchNo())) {
// 如果传入null或空字符串匹配数据库中为null或空字符串的记录
wrapper.isNull(TAppStock::getBatchNo)
.or()
.eq(TAppStock::getBatchNo, "");
} else {
// 如果传入有值精确匹配该值
wrapper.eq(TAppStock::getBatchNo, stockConfirm.getBatchNo());
}
})
.orderByDesc(TAppStock::getFirstInTime) .orderByDesc(TAppStock::getFirstInTime)
); );
// 添加查询相同载具号和料号但remainNum小于realNum的数据
List<TAppStock> additionalStockList = appStockService.list(new LambdaQueryWrapper<TAppStock>()
.eq(TAppStock::getVehicleId, stockConfirm.getVehicleId())
.eq(TAppStock::getGoodsId, stockConfirm.getGoodsId())
.apply("remain_num < real_num")
);
// 合并两个列表
if (additionalStockList != null && !additionalStockList.isEmpty()) {
stockList.addAll(additionalStockList);
}
if (stockList == null || stockList.isEmpty()){
return false;
}
// 更新列表 // 更新列表
List<TAppStock> removeStocks = new ArrayList<>(); List<TAppStock> removeStocks = new ArrayList<>();
List<TAppStock> updateStocks = new ArrayList<>(); List<TAppStock> updateStocks = new ArrayList<>();
@ -138,6 +198,7 @@ public class StockDataServiceImpl implements IStockDataService {
if (!stockUpdateList.isEmpty()) { if (!stockUpdateList.isEmpty()) {
appStockUpdateService.saveBatch(stockUpdateList); appStockUpdateService.saveBatch(stockUpdateList);
} }
return true;
} }
/** /**

View File

@ -1092,8 +1092,63 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
} }
} }
// /**
// * 将EWM返回的数据保存到临时表中
// * @param response EWM接口返回的数据
// * @param vehicleNo 载具号
// */
// private void saveEwmDataToTempTable(EwmApiLocalResponse response, String vehicleNo) {
// if (response == null || response.getContent() == null || response.getContent().toString().isEmpty()) {
// log.warn("EWM返回数据为空或无任务明细载具号: {}", vehicleNo);
// return;
// }
// try {
// boolean deletedCount = tempEwmInboundDataService.remove(new LambdaQueryWrapper<TAppTempEwmInboundData>()
// .eq(TAppTempEwmInboundData::getContainerNo, vehicleNo)
// .eq(TAppTempEwmInboundData::getProcessStatus, 0));
//
// log.info("删除旧的EWM临时数据: {} 条,载具号: {}", deletedCount, vehicleNo);
//
// // 转换并保存数据
// List<TAppTempEwmInboundData> dataList = new ArrayList<>();
// EwmApiLocalResponse.Content content = response.getContent();
//
// for (TaskDetailInfo taskDetail : content.getTaskDetailInfo()) {
// TAppTempEwmInboundData data = new TAppTempEwmInboundData();
// data.setId(UUIDUtils.getNewUUID()); // 不要使用固定值"123"
// data.setBillNo(content.getBillNo());
// data.setBillType(content.getBillType());
// data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
// data.setTaskNo(taskDetail.getTaskNo());
// data.setOrderNo(taskDetail.getOrderNo());
// data.setOrderType(taskDetail.getOrderType());
// data.setMatNo(taskDetail.getMatNo());
// data.setMatDesc(taskDetail.getMatDesc());
// data.setSkuQty(taskDetail.getSkuQty());
// data.setSkuUnit(taskDetail.getSkuUnit());
// data.setRemark(taskDetail.getRemark());
// data.setSpecialStock(taskDetail.getSpecialStock());
// data.setSpecialStockNo(taskDetail.getSpecialStockNo());
// data.setSpecialStockItemNo(taskDetail.getSpecialStockItemNo());
// data.setBatchNo(taskDetail.getBatchNo());
// data.setProcessStatus(0); // 待处理状态
// data.setCreateTime(LocalDateTime.now());
// data.setUpdateTime(LocalDateTime.now());
// dataList.add(data);
// }
//
// if (!dataList.isEmpty()) {
// // 批量插入时指定合理的批次大小
// boolean saveResult = tempEwmInboundDataService.saveBatch(dataList);
// log.info("保存EWM数据结果: {},载具号: {},记录数: {}", saveResult, vehicleNo, dataList.size());
// }
// } catch (Exception e) {
// log.error("保存EWM数据到临时表失败载具号: {}", vehicleNo, e);
// throw e; // 重新抛出异常以便上层处理
// }
// }
/** /**
* 将EWM返回的数据保存到临时表中 * 将EWM返回的数据保存到临时表中并根据goodsIdspecialStockspecialStockNospecialStockItemNobatchNo进行合并
* @param response EWM接口返回的数据 * @param response EWM接口返回的数据
* @param vehicleNo 载具号 * @param vehicleNo 载具号
*/ */
@ -1110,32 +1165,53 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
log.info("删除旧的EWM临时数据: {} 条,载具号: {}", deletedCount, vehicleNo); log.info("删除旧的EWM临时数据: {} 条,载具号: {}", deletedCount, vehicleNo);
// 转换并保存数据 // 转换并保存数据
List<TAppTempEwmInboundData> dataList = new ArrayList<>(); Map<String, TAppTempEwmInboundData> dataMap = new HashMap<>();
EwmApiLocalResponse.Content content = response.getContent(); EwmApiLocalResponse.Content content = response.getContent();
for (TaskDetailInfo taskDetail : content.getTaskDetailInfo()) { for (TaskDetailInfo taskDetail : content.getTaskDetailInfo()) {
TAppTempEwmInboundData data = new TAppTempEwmInboundData(); // 构建唯一键用于识别相同记录
data.setId(UUIDUtils.getNewUUID()); // 不要使用固定值"123" String key = String.join("|",
data.setBillNo(content.getBillNo()); taskDetail.getMatNo() != null ? taskDetail.getMatNo() : "",
data.setBillType(content.getBillType()); taskDetail.getSpecialStock() != null ? taskDetail.getSpecialStock() : "",
data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo); taskDetail.getSpecialStockNo() != null ? taskDetail.getSpecialStockNo() : "",
data.setTaskNo(taskDetail.getTaskNo()); taskDetail.getSpecialStockItemNo() != null ? taskDetail.getSpecialStockItemNo() : "",
data.setOrderNo(taskDetail.getOrderNo()); taskDetail.getBatchNo() != null ? taskDetail.getBatchNo() : "");
data.setOrderType(taskDetail.getOrderType());
data.setMatNo(taskDetail.getMatNo()); if (dataMap.containsKey(key)) {
data.setMatDesc(taskDetail.getMatDesc()); // 合并相同记录的数量
data.setSkuQty(taskDetail.getSkuQty()); TAppTempEwmInboundData existingData = dataMap.get(key);
data.setSkuUnit(taskDetail.getSkuUnit()); existingData.setSkuQty(existingData.getSkuQty().add(taskDetail.getSkuQty()));
data.setRemark(taskDetail.getRemark()); existingData.setUpdateTime(LocalDateTime.now());
data.setSpecialStock(taskDetail.getSpecialStock()); dataMap.put(key, existingData);
data.setSpecialStockNo(taskDetail.getSpecialStockNo()); } else {
data.setSpecialStockItemNo(taskDetail.getSpecialStockItemNo()); // 创建新记录
data.setBatchNo(taskDetail.getBatchNo()); TAppTempEwmInboundData data = new TAppTempEwmInboundData();
data.setProcessStatus(0); // 待处理状态 data.setId(UUIDUtils.getNewUUID());
data.setCreateTime(LocalDateTime.now()); data.setBillNo(content.getBillNo());
data.setUpdateTime(LocalDateTime.now()); data.setBillType(content.getBillType());
dataList.add(data); data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
data.setTaskNo(taskDetail.getTaskNo());
data.setOrderNo(taskDetail.getOrderNo());
data.setOrderType(taskDetail.getOrderType());
data.setMatNo(taskDetail.getMatNo());
data.setMatDesc(taskDetail.getMatDesc());
data.setSkuQty(taskDetail.getSkuQty());
data.setSkuUnit(taskDetail.getSkuUnit());
data.setRemark(taskDetail.getRemark());
data.setSpecialStock(taskDetail.getSpecialStock());
data.setSpecialStockNo(taskDetail.getSpecialStockNo());
data.setSpecialStockItemNo(taskDetail.getSpecialStockItemNo());
data.setBatchNo(taskDetail.getBatchNo());
data.setProcessStatus(0); // 待处理状态
data.setCreateTime(LocalDateTime.now());
data.setUpdateTime(LocalDateTime.now());
dataMap.put(key, data);
}
} }
// 将Map中的值转换为List
List<TAppTempEwmInboundData> dataList = new ArrayList<>(dataMap.values());
if (!dataList.isEmpty()) { if (!dataList.isEmpty()) {
// 批量插入时指定合理的批次大小 // 批量插入时指定合理的批次大小
boolean saveResult = tempEwmInboundDataService.saveBatch(dataList); boolean saveResult = tempEwmInboundDataService.saveBatch(dataList);
@ -1275,6 +1351,9 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
if (!response.isSuccess()) { if (!response.isSuccess()) {
return WcsApiResponse.error(response.getMessage(), null); return WcsApiResponse.error(response.getMessage(), null);
} }
if (response.getContent().getTaskDetailInfo().size() > 1){
return WcsApiResponse.error("该容器绑定了多个料,请检查。", null);
}
// 判断是否为空箱 // 判断是否为空箱
if (response.getContent().isEmptyContainer()) { if (response.getContent().isEmptyContainer()) {
if (!outsCheckList.isEmpty() || !stockList.isEmpty()){ if (!outsCheckList.isEmpty() || !stockList.isEmpty()){
@ -1748,7 +1827,10 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
} }
} }
// 更新库存信息 // 更新库存信息
stockDataService.updateStockInfo(confirmTaskRequest.getStockConfirm(), confirmTaskRequest.getStandId(), confirmTaskRequest.getUserName(), "出库拣选", null); if (!stockDataService.updateStockInfo(confirmTaskRequest.getStockConfirm(), confirmTaskRequest.getStandId(), confirmTaskRequest.getUserName(), "出库拣选", null)){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return BaseWmsApiResponse.error("库存发生变化,更新失败,请联系管理员确认!");
}
if (conveyTaskService.releaseStandVehicle(thisPickTask)) { if (conveyTaskService.releaseStandVehicle(thisPickTask)) {
if (requestForCompleted.getPickingDetail() != null && !requestForCompleted.getPickingDetail().isEmpty()){ if (requestForCompleted.getPickingDetail() != null && !requestForCompleted.getPickingDetail().isEmpty()){
//1. 回告EWM系统出库完成 //1. 回告EWM系统出库完成
@ -1808,13 +1890,12 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
log.info("容器置空调用EWM系统接口成功请求参数: {}", request); log.info("容器置空调用EWM系统接口成功请求参数: {}", request);
} }
} }
// if (appPickTaskService.exists(new LambdaQueryWrapper<TAppPickTask>()
if (appPickTaskService.exists(new LambdaQueryWrapper<TAppPickTask>() // .eq(TAppPickTask::getVehicleId, thisPickTask.getVehicleId())
.eq(TAppPickTask::getVehicleId, thisPickTask.getVehicleId()) // .eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode())
.eq(TAppPickTask::getPickStatus, WmsPickTaskStatusEnum.ARRIVE.getCode()) // )){
)){ // return BaseWmsApiResponse.success("继续拣选");
return BaseWmsApiResponse.success("继续拣选"); // }
}
return BaseWmsApiResponse.success("确认成功。"); return BaseWmsApiResponse.success("确认成功。");
} }
@ -2134,8 +2215,16 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
stockConfirm.setVehicleId(targetInventory.getVehicleId()); stockConfirm.setVehicleId(targetInventory.getVehicleId());
stockConfirm.setGoodsId(targetInventory.getGoodsId()); stockConfirm.setGoodsId(targetInventory.getGoodsId());
stockConfirm.setRealRemainQty(inventoryConfirmRequest.getConfirmNum()); stockConfirm.setRealRemainQty(inventoryConfirmRequest.getConfirmNum());
stockConfirm.setSpecialStock(inventoryConfirmRequest.getSpecialStock());
stockConfirm.setSpecialStockNo(inventoryConfirmRequest.getSpecialStockNo());
stockConfirm.setSpecialStockItemNo(inventoryConfirmRequest.getSpecialStockItemNo());
stockConfirm.setBatchNo(inventoryConfirmRequest.getBatchNo());
// 更新库存信息 // 更新库存信息
stockDataService.updateStockInfo(stockConfirm, inventoryConfirmRequest.getStandId(), inventoryConfirmRequest.getUserName(), "盘点确认", targetInventory.getInventoryId()); boolean updateStockInfo = stockDataService.updateStockInfo(stockConfirm, inventoryConfirmRequest.getStandId(), inventoryConfirmRequest.getUserName(), "盘点确认", targetInventory.getInventoryId());
if (!updateStockInfo) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return BaseWmsApiResponse.error("库存发生变化,更新失败,请联系管理员确认!");
}
} else { } else {
return BaseWmsApiResponse.error("请求的盘点任务号未查到对应的盘点任务。"); return BaseWmsApiResponse.error("请求的盘点任务号未查到对应的盘点任务。");
} }
@ -2330,12 +2419,20 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
requestForCompleted.setWaveNo(thisOut.getFirst().getWaveNo()); requestForCompleted.setWaveNo(thisOut.getFirst().getWaveNo());
requestForCompleted.setPickingType(thisOut.getFirst().getPickingType()); requestForCompleted.setPickingType(thisOut.getFirst().getPickingType());
// 清除拣选计划
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>() int isEmpty = confirmTaskRequest.getTaskConfirm().getIsEmpty();
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId()); LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper;
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) { if (isEmpty == 0){
// 箱号 pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId()); .eq(TAppPickPlan::getPlanId, thisOut.getFirst().getPickPlanId());
}else{
// 清除拣选计划
pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId());
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) {
// 箱号
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId());
}
} }
appPickPlanService.remove(pickPlanQueryWrapper); appPickPlanService.remove(pickPlanQueryWrapper);
return ""; return "";