Merge remote-tracking branch 'origin/dev_WMS20260401' into dev_WMS20260401

This commit is contained in:
zhou-hongcheng
2026-04-21 17:49:10 +08:00
17 changed files with 181 additions and 74 deletions
@@ -15,8 +15,8 @@ public class CopyCodeReferencePO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("id")
private Integer id;
@ApiModelProperty("抄码对照主键 idPDA 提交 pickedCopyCodeReferenceIds 用)")
private Long id;
@ApiModelProperty("序号")
private Integer serialNumber;
@@ -1,11 +1,13 @@
package com.mhd.wms.domain.pickingMaterialDetail.repository.persistence;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.service.CopyCodeReferenceDomainService;
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;
@@ -339,6 +341,36 @@ public class PickingMaterialDetailImpl extends ServiceImpl<PickingMaterialDetail
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addQuantity(PickingMaterialDetailDOByUpdate pickingMaterialDetailDOByUpdate){
// 与库中已有 picked_copy_code_reference_ids 再合并一次,避免多次拣货提交时仅带本批 id 覆盖历史已拣 id
List<PickingMaterialDetailDO> pmdList = pickingMaterialDetailDOByUpdate.getPickingMaterialDetailList();
if (!CollectionUtils.isEmpty(pmdList)) {
List<Long> uniqueIds = pmdList.stream()
.map(PickingMaterialDetailDO::getUniqueId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (!uniqueIds.isEmpty()) {
List<PickingMaterialDetail> rows = list(new LambdaQueryWrapper<PickingMaterialDetail>()
.in(PickingMaterialDetail::getUniqueId, uniqueIds)
.eq(PickingMaterialDetail::getDelFlag, 1));
// HashMap.merge 不允许 value 为 nullpicked_copy_code_reference_ids 未拣过时可能为 null
Map<Long, String> pickedInDb = rows.stream()
.filter(r -> r.getUniqueId() != null)
.collect(Collectors.toMap(
PickingMaterialDetail::getUniqueId,
r -> Objects.toString(r.getPickedCopyCodeReferenceIds(), ""),
(a, b) -> a));
for (PickingMaterialDetailDO item : pmdList) {
if (item.getUniqueId() == null) {
continue;
}
String dbCsv = pickedInDb.get(item.getUniqueId());
String merged = CopyCodeReferenceDomainService.mergeCommaSeparatedUniqueIds(
dbCsv, item.getPickedCopyCodeReferenceIds());
item.setPickedCopyCodeReferenceIds(merged);
}
}
}
int count = pickingMaterialDetailMapper.addQuantity(pickingMaterialDetailDOByUpdate);
if (count == 0){
throw new ServiceException("更新拣货单拣货数量失败");