抄码复合优化拣货

This commit is contained in:
zhou-hongcheng
2026-04-17 11:05:06 +08:00
parent 5b54f99b72
commit b86374786f
3 changed files with 35 additions and 4 deletions
@@ -1145,6 +1145,20 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
}
//设置复核数量
OutMaterialDetail outMaterialDetail = new OutMaterialDetail();
//抄码取消
if (!CollectionUtils.isEmpty(outMaterialDetailDO.getCopyCodeReferenceIdsCancel())){
List<Integer> copyCodeReferenceIdsCancel = outMaterialDetailDO.getCopyCodeReferenceIdsCancel();
String copyCodeReferenceIds = outMaterialDetailDb.getCopyCodeReferenceIds();
List<Integer> copyCodeReferenceIdsList = Arrays.stream(copyCodeReferenceIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
List<Integer> collect = copyCodeReferenceIdsList.stream().filter(id -> !copyCodeReferenceIdsCancel.contains(id)).collect(Collectors.toList());
String collect1 = collect.stream().map(String::valueOf).collect(Collectors.joining(","));
outMaterialDetail.setCopyCodeReferenceIds(collect1);
//抄码商品重置为可用
copyCodeReferenceService.lambdaUpdate()
.set(CopyCodeReference::getMaterialStatusCode, 1)
.set(CopyCodeReference::getMaterialStatusName, "可用")
.in(CopyCodeReference::getId, copyCodeReferenceIdsCancel);
}
outMaterialDetail.setMaterialDetailId(outMaterialDetailDO.getMaterialDetailId());
if (1 == type){
//复核
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.system.api.model.LoginUser;
import com.mhd.wms.domain.copyCodeReference.entity.CopyCodeReference;
import com.mhd.wms.domain.copyCodeReference.repository.facade.ICopyCodeReferenceService;
import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper;
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
import com.mhd.wms.domain.outMaterialDetailSerialNumber.entity.OutMaterialDetailSerialNumber;
@@ -28,10 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -125,6 +124,9 @@ public class PickingMaterialDetailImpl extends ServiceImpl<PickingMaterialDetail
return pickingMaterialDetailPO;
}
@Autowired
private ICopyCodeReferenceService copyCodeReferenceService;
/**
* @description 拣货批量修改物流明细
* @author ZhouGY
@@ -157,6 +159,17 @@ public class PickingMaterialDetailImpl extends ServiceImpl<PickingMaterialDetail
PickingMaterialDetail pickingMaterialDetail = new PickingMaterialDetail();
if (!pickingMaterialDetailDO.getCopyCodeReferenceIds().equals(pickingMaterialDetailDb.getCopyCodeReferenceIds())){
pickingMaterialDetail.setCopyCodeReferenceIds(pickingMaterialDetailDO.getCopyCodeReferenceIds());
//数据库中的
List<Integer> copDO = Arrays.stream(pickingMaterialDetailDb.getCopyCodeReferenceIds().split(","))
.map(Integer::parseInt).collect(Collectors.toList());
//用户取消后的
List<Integer> cop = Arrays.stream(pickingMaterialDetailDO.getCopyCodeReferenceIds().split(","))
.map(Integer::parseInt).collect(Collectors.toList());
List<Integer> collect = copDO.stream().filter(id -> !cop.contains(id)).collect(Collectors.toList());
copyCodeReferenceService.lambdaUpdate()
.set(CopyCodeReference::getMaterialStatusCode, 1)
.set(CopyCodeReference::getMaterialStatusName, "可用")
.in(CopyCodeReference::getId, collect);
}
pickingMaterialDetail.setMaterialDetailId(pickingMaterialDetailDO.getMaterialDetailId());
pickingMaterialDetail.setUpdateBy(loginUser.getUserid());
@@ -910,6 +910,10 @@ public class StockOutOrderDomainService {
stockOutOrderPO.setOutMaterialCheckPO(outMaterialCheckPO);
List<OutMaterialDetailPO> materialDetailList = stockOutOrderPO.getMaterialDetailList();
for (OutMaterialDetailPO outMaterialDetailPO : materialDetailList) {
MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(outMaterialDetailPO.getMaterialBaseInfoId());
outMaterialDetailPO.setCopyCode(materialBaseInfo.getCopyCode());
}
// 性能优化:批量获取批次属性,避免N+1查询问题
// 1. 收集所有唯一的materialBaseInfoId
Set<Long> materialBaseInfoIdSet = materialDetailList.stream()