diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java index 1e9b2f20..7a7ec42b 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java @@ -55,4 +55,6 @@ public interface ErrorCodeConstants { ErrorCode ERP_CONTRACT_NOT_EXISTS = new ErrorCode(1_016_000_001, "ERP合同数据不存在"); ErrorCode ERP_PRODUCTIVE_ORDER_NOT_EXISTS = new ErrorCode(1_017_000_001, "ERP生产订单数据不存在"); + + ErrorCode MATERIAL_ERROR = new ErrorCode( 1_017_000_009, "主物料信息错误"); } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java index 087210c5..4f959433 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java @@ -38,7 +38,6 @@ public class ErpMaterialController { @Resource private ErpMaterialService erpMaterialService; - @PostMapping("/create") @Operation(summary = "创建ERP物料数据") @PreAuthorize("@ss.hasPermission('sply:erp-material:create')") @@ -121,8 +120,8 @@ public class ErpMaterialController { @PostMapping("/createErpMaterialCorr") @Operation(summary = "创建ERP物料关系") @PreAuthorize("@ss.hasPermission('sply:erp-material:create')") - public CommonResult> createErpMaterialCorr(@Valid @RequestBody List erpMaterialCorrSaveReqVOS) { - return success(erpMaterialService.createErpMaterialCorr(erpMaterialCorrSaveReqVOS)); + public CommonResult> createErpMaterialCorr(@Valid @RequestBody ErpMaterialCorrSaveReqVO erpMaterialCorrSaveReqVO) { + return success(erpMaterialService.createErpMaterialCorr(erpMaterialCorrSaveReqVO)); } //删除物料关系 @DeleteMapping("/deleteErpMaterialCorr") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpMaterialCorrSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpMaterialCorrSaveReqVO.java index 33708985..f325a67b 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpMaterialCorrSaveReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpMaterialCorrSaveReqVO.java @@ -1,11 +1,12 @@ package com.zt.plat.module.erp.controller.admin.erp.vo; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; +import java.util.List; + @Schema(description = "管理后台 - 物料拓展关系 Request VO") @Data public class ErpMaterialCorrSaveReqVO { @@ -22,19 +23,25 @@ public class ErpMaterialCorrSaveReqVO { @NotNull(message = "拓展关系主物料不能为空") private Long materialParentId; - /** - * 物料ID - */ - @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED) - private Long materialId; /** * 拓展关系主物料编号 */ @Schema(description = "拓展关系主物料编号") - private String materialParentCode; + private String materialParentCode; /** - * 物料编码 + * 拓展关系物料 */ - @Schema(description = "拓展关系物料编号") - private String materialCode; + @Schema(description = "拓展关系物料") + private List materials; + + @Data + @Schema(description = "拓展关系物料") + public static class Materials { + @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long materialId; + @Schema(description = "物料编码") + private String materialCode; + } } + + diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/MaterialAttributeUtils.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/MaterialAttributeUtils.java new file mode 100644 index 00000000..33744a74 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/MaterialAttributeUtils.java @@ -0,0 +1,211 @@ +package com.zt.plat.module.erp.controller.admin.erp.vo; + +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; +import lombok.Getter; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 物料扩展属性安全取值工具类(适配所有属性编码) + */ +public class MaterialAttributeUtils { + + /** + * 物料属性编码枚举(统一管理所有属性code) + * 关联属性编码、名称、数据类型 + */ + @Getter + public enum MaterialAttrCode { + MTRL_BASE_UNIT_CODE("mtrlBaseUnitCode", "基本计量单位编码", DataType.STRING), + MTRL_BASE_UNIT_NAME("mtrlBaseUnitName", "基本计量单位描述", DataType.STRING), + MTRL_SHORT_DESC("mtrlShortDesc", "短描述", DataType.STRING), + MTRL_LONG_DESC("mtrlLongDesc", "长描述", DataType.STRING), + MTRL_CHALCO_CODE("mtrlChalcoCode", "中铝编码", DataType.STRING), + MTRL_ZHONGTONG_CODE("mtrlZhongtongCode", "中铜编码", DataType.STRING), + MTRL_SPECIFICATION("mtrlSpecification", "规格", DataType.STRING), + MTRL_TEXTURE("mtrlTexture", "材质", DataType.STRING), + MTRL_RECORD_TIME("mtrlRecordTime", "记录时间", DataType.DATETIME), + MTRL_DRAWING_NUMBER("mtrlDrawingNumber", "图号", DataType.STRING), + MTRL_ORDER_NUMBER("mtrlOrderNumber", "订货号", DataType.STRING), + MTRL_OTHER_PARAMETERS("mtrlOtherParameters", "其它参数", DataType.STRING), + MTRL_EQUIPMENT_CATEGORY("mtrlEquipmentCategory", "设备类别", DataType.STRING), + MTRL_MANUFACTURER("mtrlManufacturer", "主机生产商", DataType.STRING), + MTRL_SOURCE("mtrlSource", "来源", DataType.STRING), + MTRL_MODEL("mtrlModel", "型号", DataType.STRING), + MTRL_ELEMENT("mtrlElement", "金属元素", DataType.TEXT), + MTRL_DECIMAL("mtrlDecimal", "小数位数", DataType.NUMBER); + + private final String code; + private final String name; + private final DataType dataType; + + MaterialAttrCode(String code, String name, DataType dataType) { + this.code = code; + this.name = name; + this.dataType = dataType; + } + + // 根据code获取枚举(容错) + public static MaterialAttrCode getByCode(String code) { + if (code == null || code.isEmpty()) { + return null; + } + for (MaterialAttrCode attrCode : values()) { + if (attrCode.code.equals(code)) { + return attrCode; + } + } + return null; + } + + // 获取所有属性编码列表 + public static List getAllCodes() { + return Arrays.stream(values()) + .map(MaterialAttrCode::getCode) + .collect(Collectors.toList()); + } + } + + /** + * 数据类型枚举 + */ + public enum DataType { + STRING, NUMBER, TEXT, DATETIME + } + + /** + * 物料属性封装Record(Java 16+) + * 包含所有属性的安全取值 + */ + public record MaterialAttribute( + // 基础属性 + String mtrlBaseUnitCode, + String mtrlBaseUnitName, + String mtrlShortDesc, + String mtrlLongDesc, + String mtrlChalcoCode, + String mtrlZhongtongCode, + String mtrlSpecification, + String mtrlTexture, + LocalDateTime mtrlRecordTime, + // 扩展属性 + String mtrlDrawingNumber, + String mtrlOrderNumber, + String mtrlOtherParameters, + String mtrlEquipmentCategory, + String mtrlManufacturer, + String mtrlSource, + String mtrlModel, + String mtrlElement, + Integer mtrlDecimal // 小数位数(数字类型) + ) { + // 空值默认构造器(避免NPE) + public static MaterialAttribute empty() { + return new MaterialAttribute( + null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null + ); + } + } + + /** + * 从DTO中安全提取所有物料属性 + * @param dto 物料信息DTO + * @return 封装后的物料属性Record + */ + public static MaterialAttribute safeExtractAllAttributes(MaterialInfomationRespDTO dto) { + // 1. 空值校验 + if (dto == null || dto.getFlatAttributes() == null) { + return MaterialAttribute.empty(); + } + + Map attrs = dto.getFlatAttributes(); + + // 2. 按数据类型安全取值 + return new MaterialAttribute( + getTypedValue(attrs, MaterialAttrCode.MTRL_BASE_UNIT_CODE), + getTypedValue(attrs, MaterialAttrCode.MTRL_BASE_UNIT_NAME), + getTypedValue(attrs, MaterialAttrCode.MTRL_SHORT_DESC), + getTypedValue(attrs, MaterialAttrCode.MTRL_LONG_DESC), + getTypedValue(attrs, MaterialAttrCode.MTRL_CHALCO_CODE), + getTypedValue(attrs, MaterialAttrCode.MTRL_ZHONGTONG_CODE), + getTypedValue(attrs, MaterialAttrCode.MTRL_SPECIFICATION), + getTypedValue(attrs, MaterialAttrCode.MTRL_TEXTURE), + getTypedValue(attrs, MaterialAttrCode.MTRL_RECORD_TIME), + getTypedValue(attrs, MaterialAttrCode.MTRL_DRAWING_NUMBER), + getTypedValue(attrs, MaterialAttrCode.MTRL_ORDER_NUMBER), + getTypedValue(attrs, MaterialAttrCode.MTRL_OTHER_PARAMETERS), + getTypedValue(attrs, MaterialAttrCode.MTRL_EQUIPMENT_CATEGORY), + getTypedValue(attrs, MaterialAttrCode.MTRL_MANUFACTURER), + getTypedValue(attrs, MaterialAttrCode.MTRL_SOURCE), + getTypedValue(attrs, MaterialAttrCode.MTRL_MODEL), + getTypedValue(attrs, MaterialAttrCode.MTRL_ELEMENT), + getTypedValue(attrs, MaterialAttrCode.MTRL_DECIMAL) + ); + } + + /** + * 通用类型安全取值方法 + * @param attrs 属性Map + * @param attrCode 属性编码枚举 + * @return 对应类型的值(空/类型不匹配返回null) + */ + @SuppressWarnings("unchecked") + private static T getTypedValue(Map attrs, MaterialAttrCode attrCode) { + if (attrCode == null) { + return null; + } + + Object value = attrs.get(attrCode.getCode()); + if (value == null || value.toString().trim().isEmpty()) { + return null; + } + + String strValue = value.toString().trim(); + try { + // 根据数据类型转换 + return switch (attrCode.getDataType()) { + case STRING, TEXT -> (T) strValue; + case NUMBER -> (T) Integer.valueOf(strValue); + case DATETIME -> (T) LocalDateTime.parse(strValue); + }; + } catch (NumberFormatException | DateTimeParseException | ClassCastException e) { + // 类型转换失败返回null,可添加日志 + return null; + } + } + + /** + * 单独获取某个属性值(按需取值) + * @param dto 物料DTO + * @param attrCode 属性编码枚举 + * @return 对应类型的值 + */ + public static T getSingleAttribute(MaterialInfomationRespDTO dto, MaterialAttrCode attrCode) { + if (dto == null || dto.getFlatAttributes() == null || attrCode == null) { + return null; + } + return getTypedValue(dto.getFlatAttributes(), attrCode); + } + + /** + * 获取flatAttributes中存在的所有属性编码(过滤空值) + * @param dto 物料DTO + * @return 非空属性编码列表 + */ + public static List getExistAttributeCodes(MaterialInfomationRespDTO dto) { + if (dto == null || dto.getFlatAttributes() == null) { + return Collections.emptyList(); + } + + return dto.getFlatAttributes().entrySet().stream() + .filter(entry -> entry.getValue() != null && !entry.getValue().toString().trim().isEmpty()) + .map(Map.Entry::getKey) + .filter(key -> MaterialAttrCode.getByCode(key) != null) // 只保留枚举中定义的编码 + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/framework/rpc/config/RpcConfiguration.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 00000000..c1ce4caa --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,16 @@ +package com.zt.plat.module.erp.framework.rpc.config; + +import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi; +import com.zt.plat.module.infra.api.businessfile.BusinessFileApi; +import com.zt.plat.module.infra.api.file.FileApi; + +import com.zt.plat.module.system.api.dept.DeptApi; +import com.zt.plat.module.system.api.sequence.SequenceApi; +import com.zt.plat.module.system.api.user.AdminUserApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(value = "erpRpcConfiguration", proxyBeanMethods = false) +@EnableFeignClients(clients = {DeptApi.class, SequenceApi.class, AdminUserApi.class, BusinessFileApi.class, FileApi.class, MaterialInfomationApi.class}) +public class RpcConfiguration { +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrService.java index 08883e83..1abae0f7 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrService.java @@ -13,6 +13,6 @@ import java.util.List; * @author 后台管理 */ public interface ErpErpMaterialCorrService { - List create(@Valid List reqVO); + List create(@Valid ErpMaterialCorrSaveReqVO reqVO); void deleteBatch(BatchDeleteReqVO reqVO); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrServiceImpl.java index 328c6a9b..3338e5cf 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpErpMaterialCorrServiceImpl.java @@ -10,6 +10,7 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; import java.util.List; @Service @@ -19,10 +20,18 @@ public class ErpErpMaterialCorrServiceImpl implements ErpErpMaterialCorrService{ private ErpErpMaterialCorrMapper erpErpMaterialCorrMapper; @Override - public List create(List reqVO) { - List bean = BeanUtils.toBean(reqVO, ErpMaterialCorrDO.class); - erpErpMaterialCorrMapper.insertBatch(bean); - return BeanUtils.toBean(bean, ErpMaterialCorrRspVO.class); + public List create(ErpMaterialCorrSaveReqVO reqVO) { + List erpMaterialCorrDOS=new ArrayList<>(); + reqVO.getMaterials().forEach(materials -> { + erpMaterialCorrDOS.add(ErpMaterialCorrDO.builder() + .materialParentId(reqVO.getMaterialParentId()) + .materialParentCode(reqVO.getMaterialParentCode()) + .materialId(materials.getMaterialId()) + .materialCode(materials.getMaterialCode()) + .build()); + }); + erpErpMaterialCorrMapper.insertBatch(erpMaterialCorrDOS); + return BeanUtils.toBean(erpMaterialCorrDOS, ErpMaterialCorrRspVO.class); } @Override diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java index 116fcdf8..c24f8e8f 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java @@ -269,6 +269,11 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { private void saveData(ProcessingResult result) { // 批量新增和更新 if (!result.toInsert.isEmpty()) { + //自动绑定工厂 + result.toInsert.forEach(r->{ + r.setRelName(r.getName()); + r.setRelnumber(r.getNumber()); + }); erpFactoryMapper.insertBatch(result.toInsert); // 批量查询刚插入数据的id,提升效率 List insertedNumbers = result.toInsert.stream() diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialService.java index 535b59bb..8acfb62a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialService.java @@ -70,7 +70,7 @@ public interface ErpMaterialService { String getMaterialUnit(String materialNumber); - List createErpMaterialCorr(List erpMaterialCorrSaveReqVOS); + List createErpMaterialCorr(ErpMaterialCorrSaveReqVO erpMaterialCorrSaveReqVO); void deleteErpMaterialCorr(BatchDeleteReqVO reqVO); } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java index bff8b253..f0891592 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java @@ -4,12 +4,15 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.handler.annotation.XxlJob; +import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.api.BaseApi; import com.zt.plat.module.api.dto.MaterialOtherDTO; +import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; import com.zt.plat.module.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.*; import com.zt.plat.module.erp.dal.dataobject.erp.ErpWarehouseDO; @@ -19,16 +22,14 @@ import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.dal.dataobject.erp.ErpMaterialDO; import com.zt.plat.module.erp.dal.mysql.erp.ErpMaterialMapper; import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -54,6 +55,8 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { private ErpConfig erpConfig; @Resource private ErpErpMaterialCorrService erpMaterialCorrService; + @Resource + private MaterialInfomationApi materialInfomationApi; @Override public ErpMaterialRespVO createErpMaterial(ErpMaterialSaveReqVO createReqVO) { @@ -184,16 +187,66 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { } @Override - public List createErpMaterialCorr(List erpMaterialCorrSaveReqVOS) { - List erpMaterialCorrRspVOS = erpMaterialCorrService.create(erpMaterialCorrSaveReqVOS); - return erpMaterialCorrRspVOS.stream().map(erpMaterialCorrRspVO -> { - //TODO 通过物料id返回物料信息 - ErpMaterialRespVO erpMaterialRespVO = new ErpMaterialRespVO(); - BeanUtils.copyProperties(erpMaterialCorrRspVO, erpMaterialRespVO); - return erpMaterialRespVO; - }).collect(Collectors.toList()); + public List createErpMaterialCorr(ErpMaterialCorrSaveReqVO erpMaterialCorrSaveReqVO) { + List erpMaterialCorrRspVOS = erpMaterialCorrService.create(erpMaterialCorrSaveReqVO); + List erpMaterialRespVOS = new ArrayList<>(); + Set parentIds = erpMaterialCorrRspVOS.stream().map(ErpMaterialCorrRspVO::getMaterialParentId).filter(Objects::nonNull).collect(Collectors.toSet()); + Set materialIds = erpMaterialCorrRspVOS.stream().map(ErpMaterialCorrRspVO::getMaterialId).filter(Objects::nonNull).collect(Collectors.toSet()); + if (parentIds.size() != 1) { + throw exception(MATERIAL_ERROR); + } + ErpMaterialRespVO erpMaterialParent = buildErpMaterialRespDataById(parentIds.iterator().next()); + erpMaterialRespVOS.add(erpMaterialParent); + if (!materialIds.isEmpty()) { + for (Long materialId : materialIds) { + ErpMaterialRespVO erpMaterialRespVO = buildErpMaterialRespDataById(materialId); + erpMaterialRespVOS.add(erpMaterialRespVO); + } + } + return erpMaterialRespVOS; } + private ErpMaterialRespVO buildErpMaterialRespDataById(Long id) { + CommonResult materialInfomation = materialInfomationApi.getMaterialInfomation(id); + return BeanUtils.toBean(buildErpMaterialDOData(materialInfomation), ErpMaterialRespVO.class); + } + + public ErpMaterialDO buildErpMaterialDOData(CommonResult materialInfomation) { + if (materialInfomation.getData() == null) { + return new ErpMaterialDO(); + } + ErpMaterialDO erpMaterialDO = new ErpMaterialDO(); + MaterialInfomationRespDTO data = materialInfomation.getData(); + MaterialAttributeUtils.MaterialAttribute materialAttribute = MaterialAttributeUtils.safeExtractAllAttributes(data); + // 有对应关系的字段赋值 + erpMaterialDO.setId(data.getId()); // 主键 + erpMaterialDO.setMaterialName(data.getName()); // 物料名称 + erpMaterialDO.setDownCenterNumber(materialAttribute.mtrlZhongtongCode()); // 中铜物料编码 + erpMaterialDO.setCenterNumber(materialAttribute.mtrlChalcoCode()); // 中铝物料编码 + erpMaterialDO.setUnit(materialAttribute.mtrlBaseUnitCode()); // 计量单位编码 + erpMaterialDO.setUnitDescription(materialAttribute.mtrlBaseUnitName()); // 计量单位描述 + erpMaterialDO.setMaterialLengthDescription(materialAttribute.mtrlLongDesc()); // 物料长描述 + if (materialAttribute.mtrlDecimal() != null) { + erpMaterialDO.setDecimalValue(materialAttribute.mtrlDecimal().longValue()); // 小数位数 + } + erpMaterialDO.setAbbreviation(materialAttribute.mtrlElement()); // 金属元素缩写 + erpMaterialDO.setCreateDate(materialAttribute.mtrlRecordTime()); // 创建日期(物料记录时间) + + // 无对应关系的字段(暂未赋值,需根据业务补充映射规则) + // erpMaterialDO.setMaterialType(null); // 物料类型 + // erpMaterialDO.setMaterialGroupDate(null); // 物料大类组 + // erpMaterialDO.setExternalMaterialGroupDate(null); // 外部物料小类组 + // erpMaterialDO.setMaterialTypeDescription(null); // 物料类型描述 + // erpMaterialDO.setMaterialGroupDescription(null); // 物料组描述 + // erpMaterialDO.setExternalMaterialGroupDescription(null); // 外部物料小类组描述 + // erpMaterialDO.setType(null); // 类型(TP) + // erpMaterialDO.setName(null); // 金属元素名称(NAME字段,需区分物料名称) + // erpMaterialDO.setCoding(null); // 金属元素编码 + // erpMaterialDO.setGradeUnit(null); // 品位单位 + return erpMaterialDO; + } + + @Override public void deleteErpMaterialCorr(BatchDeleteReqVO reqVO) { erpMaterialCorrService.deleteBatch(reqVO); @@ -321,4 +374,17 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { .collect(Collectors.toList()); myRedisConfig.updateRedisCache(key, existingNumbers); } + + public record MaterialAttribute( + String baseUnitCode, // 基础单位编码 + String baseUnitName, // 基础单位名称 + String shortDesc, // 物料短描述 + String longDesc, // 物料长描述 + String chalcoCode, // 中铝编码 + String zhongtongCode, // 中铜编码 + String specification, // 规格 + String texture, // 材质 + String recordTime// 记录时间 + ) { + } } \ No newline at end of file