PDA移位修改
This commit is contained in:
+40
-2
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user