PDA移位修改

This commit is contained in:
秦鸿展
2026-03-14 15:37:56 +08:00
parent 7dac63da34
commit 360ffdc0d3
3 changed files with 91 additions and 21 deletions
@@ -1,9 +1,17 @@
package com.mhd.wms.interfaces.assember.shiftManage;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.wms.domain.shiftManage.repository.todo.ShiftManageDO;
import com.mhd.wms.domain.shiftMaterialDetail.repository.todo.ShiftMaterialDetailDO;
import com.mhd.wms.interfaces.dto.shiftManage.ShiftManageDTO;
import com.mhd.wms.interfaces.dto.shiftMaterialDetail.ShiftMaterialDetailDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 移位管理Assembler
@@ -14,11 +22,41 @@ import org.springframework.stereotype.Component;
@Component
public class ShiftManageAssembler {
@Autowired
private ObjectMapper objectMapper;
/**
* 转换实体
* ObjectMapper.convertValue 对嵌套 List 的泛型转换可能失败(空或 LinkedHashMap 等错误类型),
* 因此当 DTO 有物料明细时,始终使用 BeanUtils 手动递归转换,确保类型正确
*/
public ShiftManageDO toDO(ShiftManageDTO shiftManageDTO) {
return JSONUtil.toBean(JSONUtil.toJsonStr(shiftManageDTO), ShiftManageDO.class);
ShiftManageDO shiftManageDO = objectMapper.convertValue(shiftManageDTO, ShiftManageDO.class);
// 修复:始终手动转换 shiftMaterialDetailList,避免 ObjectMapper 泛型擦除导致空列表或错误类型
if (!CollectionUtils.isEmpty(shiftManageDTO.getShiftMaterialDetailList())) {
List<ShiftMaterialDetailDO> doList = new ArrayList<>();
for (ShiftMaterialDetailDTO dto : shiftManageDTO.getShiftMaterialDetailList()) {
doList.add(convertShiftMaterialDetailToDO(dto));
}
shiftManageDO.setShiftMaterialDetailList(doList);
}
return shiftManageDO;
}
/**
* 递归转换 ShiftMaterialDetailDTO 为 ShiftMaterialDetailDO(含 children
*/
private ShiftMaterialDetailDO convertShiftMaterialDetailToDO(ShiftMaterialDetailDTO dto) {
ShiftMaterialDetailDO doObj = new ShiftMaterialDetailDO();
BeanUtils.copyProperties(dto, doObj);
if (!CollectionUtils.isEmpty(dto.getChildren())) {
List<ShiftMaterialDetailDO> childDoList = new ArrayList<>();
for (ShiftMaterialDetailDTO childDto : dto.getChildren()) {
childDoList.add(convertShiftMaterialDetailToDO(childDto));
}
doObj.setChildren(childDoList);
}
return doObj;
}
}