后端改动
This commit is contained in:
parent
b456252541
commit
4d35a2a337
|
|
@ -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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询库存预警值
|
* 查询库存预警值
|
||||||
|
|
|
||||||
|
|
@ -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() : "");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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返回的数据保存到临时表中,并根据goodsId、specialStock、specialStockNo、specialStockItemNo、batchNo进行合并
|
||||||
* @param response EWM接口返回的数据
|
* @param response EWM接口返回的数据
|
||||||
* @param vehicleNo 载具号
|
* @param vehicleNo 载具号
|
||||||
*/
|
*/
|
||||||
|
|
@ -1110,11 +1165,28 @@ 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()) {
|
||||||
|
// 构建唯一键用于识别相同记录
|
||||||
|
String key = String.join("|",
|
||||||
|
taskDetail.getMatNo() != null ? taskDetail.getMatNo() : "",
|
||||||
|
taskDetail.getSpecialStock() != null ? taskDetail.getSpecialStock() : "",
|
||||||
|
taskDetail.getSpecialStockNo() != null ? taskDetail.getSpecialStockNo() : "",
|
||||||
|
taskDetail.getSpecialStockItemNo() != null ? taskDetail.getSpecialStockItemNo() : "",
|
||||||
|
taskDetail.getBatchNo() != null ? taskDetail.getBatchNo() : "");
|
||||||
|
|
||||||
|
if (dataMap.containsKey(key)) {
|
||||||
|
// 合并相同记录的数量
|
||||||
|
TAppTempEwmInboundData existingData = dataMap.get(key);
|
||||||
|
existingData.setSkuQty(existingData.getSkuQty().add(taskDetail.getSkuQty()));
|
||||||
|
existingData.setUpdateTime(LocalDateTime.now());
|
||||||
|
dataMap.put(key, existingData);
|
||||||
|
} else {
|
||||||
|
// 创建新记录
|
||||||
TAppTempEwmInboundData data = new TAppTempEwmInboundData();
|
TAppTempEwmInboundData data = new TAppTempEwmInboundData();
|
||||||
data.setId(UUIDUtils.getNewUUID()); // 不要使用固定值"123"
|
data.setId(UUIDUtils.getNewUUID());
|
||||||
data.setBillNo(content.getBillNo());
|
data.setBillNo(content.getBillNo());
|
||||||
data.setBillType(content.getBillType());
|
data.setBillType(content.getBillType());
|
||||||
data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
|
data.setContainerNo(content.getContainerNo() != null ? content.getContainerNo() : vehicleNo);
|
||||||
|
|
@ -1133,8 +1205,12 @@ public class TaskControllerServiceImpl implements ITaskControllerService {
|
||||||
data.setProcessStatus(0); // 待处理状态
|
data.setProcessStatus(0); // 待处理状态
|
||||||
data.setCreateTime(LocalDateTime.now());
|
data.setCreateTime(LocalDateTime.now());
|
||||||
data.setUpdateTime(LocalDateTime.now());
|
data.setUpdateTime(LocalDateTime.now());
|
||||||
dataList.add(data);
|
dataMap.put(key, data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将Map中的值转换为List
|
||||||
|
List<TAppTempEwmInboundData> dataList = new ArrayList<>(dataMap.values());
|
||||||
|
|
||||||
if (!dataList.isEmpty()) {
|
if (!dataList.isEmpty()) {
|
||||||
// 批量插入时指定合理的批次大小
|
// 批量插入时指定合理的批次大小
|
||||||
|
|
@ -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,13 +2419,21 @@ 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());
|
||||||
|
|
||||||
|
|
||||||
|
int isEmpty = confirmTaskRequest.getTaskConfirm().getIsEmpty();
|
||||||
|
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper;
|
||||||
|
if (isEmpty == 0){
|
||||||
|
pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
||||||
|
.eq(TAppPickPlan::getPlanId, thisOut.getFirst().getPickPlanId());
|
||||||
|
}else{
|
||||||
// 清除拣选计划
|
// 清除拣选计划
|
||||||
LambdaQueryWrapper<TAppPickPlan> pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
pickPlanQueryWrapper = new LambdaQueryWrapper<TAppPickPlan>()
|
||||||
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId());
|
.eq(TAppPickPlan::getWorkIndex, confirmTaskRequest.getTaskConfirm().getTaskId());
|
||||||
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) {
|
if (confirmTaskRequest.getStockConfirm() != null && StringUtils.isNotEmpty(confirmTaskRequest.getStockConfirm().getVehicleId())) {
|
||||||
// 箱号
|
// 箱号
|
||||||
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId());
|
pickPlanQueryWrapper.eq(TAppPickPlan::getVehicleId, confirmTaskRequest.getStockConfirm().getVehicleId());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
appPickPlanService.remove(pickPlanQueryWrapper);
|
appPickPlanService.remove(pickPlanQueryWrapper);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user