From 57022e04c087933af2ead41216e60fab89082147 Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Mon, 3 Nov 2025 14:39:56 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E-erp=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plat/module/erp/api/ErpExternalApi.java | 5 + .../module/erp/api/dto/ErpMaterialDTO.java | 75 +++++++++ .../module/erp/api/ErpExternalApiImpl.java | 12 ++ .../erp/vo/ErpProductiveOrderPageReqVO.java | 5 + .../erp/dal/mysql/erp/ErpMaterialMapper.java | 9 +- .../com/zt/plat/module/erp/job/ErpJob.java | 3 + .../erp/service/erp/ErpMaterialService.java | 9 + .../service/erp/ErpMaterialServiceImpl.java | 9 +- .../erp/ErpProductiveOrderServiceImpl.java | 158 +++++++++--------- .../service/erp/ErpWarehouseServiceImpl.java | 1 + .../zt/plat/module/erp/utils/ErpConfig.java | 5 +- .../resources/mapper/ErpMaterialMapper.xml | 3 +- 12 files changed, 215 insertions(+), 79 deletions(-) create mode 100644 zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpMaterialDTO.java diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java index 6ba05f2..0cf4c96 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java @@ -1,6 +1,7 @@ package com.zt.plat.module.erp.api; import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.module.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.api.dto.ErpProductiveVersionReqDTO; import com.zt.plat.module.erp.api.dto.ErpQueryReqDTO; import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; @@ -33,4 +34,8 @@ public interface ErpExternalApi { @GetMapping(PREFIX + "/queryProductiveVersion") @Operation(summary = "生产版本数据查询") CommonResult getErpProductiveVersionByFM(@Valid @RequestBody ErpProductiveVersionReqDTO reqDTO); + + @GetMapping(PREFIX + "/queryMaterial") + @Operation(summary = "物料数据查询") + CommonResult getErpMaterial(@Valid @RequestBody ErpMaterialDTO reqDTO); } diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpMaterialDTO.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpMaterialDTO.java new file mode 100644 index 0000000..ba7968b --- /dev/null +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/dto/ErpMaterialDTO.java @@ -0,0 +1,75 @@ +package com.zt.plat.module.erp.api.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - ERP物料数据 Response VO") +@Data +public class ErpMaterialDTO { + + @Schema(description = "主键") + private Long id; + + @Schema(description = "中铜物料编码;系统使用时使用该编码") + private String downCenterNumber; + + @Schema(description = "物料编码") + private String materialNumber; + + @Schema(description = "中铝物料编码") + private String centerNumber; + + @Schema(description = "创建日期") + private LocalDateTime createDate; + + @Schema(description = "物料类型", example = "2") + private String materialType; + + @Schema(description = "物料大类组") + private String materialGroupDate; + + @Schema(description = "外部物料小类组") + private String externalMaterialGroupDate; + + @Schema(description = "计量单位编码") + private String unit; + + @Schema(description = "计量单位描述") + private String unitDescription; + + @Schema(description = "物料类型描述") + private String materialTypeDescription; + + @Schema(description = "物料组描述") + private String materialGroupDescription; + + @Schema(description = "外部物料小类组描述") + private String externalMaterialGroupDescription; + + @Schema(description = "物料名称", example = "李四") + private String materialName; + + @Schema(description = "物料长描述") + private String materialLengthDescription; + + @Schema(description = "类型") + private String type; + + @Schema(description = "金属元素缩写") + private String abbreviation; + + @Schema(description = "金属元素名称", example = "赵六") + private String name; + + @Schema(description = "金属元素编码") + private String coding; + + @Schema(description = "品位单位") + private String gradeUnit; + + @Schema(description = "小数位数") + private Long decimalValue; + +} \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java index a1e517d..060aed2 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java @@ -2,9 +2,12 @@ package com.zt.plat.module.erp.api; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.api.dto.ErpProductiveVersionReqDTO; import com.zt.plat.module.erp.api.dto.ErpQueryReqDTO; import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialRespVO; +import com.zt.plat.module.erp.service.erp.ErpMaterialService; import com.zt.plat.module.erp.service.erp.ErpProductiveVersionService; import com.zt.plat.module.erp.utils.ErpConfig; import jakarta.annotation.Resource; @@ -34,6 +37,9 @@ public class ErpExternalApiImpl implements ErpExternalApi { private ErpConfig erpConfig; @Resource private ErpProductiveVersionService erpProductiveVersionService; + @Resource + private ErpMaterialService erpMaterialService; + @Override public HashMap submitDataToErp(ErpSubmitReqDTO reqDTO) { @@ -52,4 +58,10 @@ public class ErpExternalApiImpl implements ErpExternalApi { String productiveVersionNumber = erpProductiveVersionService.getErpProductiveVersionByFM(reqDTO); return success(productiveVersionNumber); } + + @Override + public CommonResult getErpMaterial(ErpMaterialDTO reqDTO) { + ErpMaterialDTO dto = erpMaterialService.getErpMaterial(reqDTO); + return success(dto); + } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java index 71b5808..fa17335 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java @@ -2,6 +2,7 @@ package com.zt.plat.module.erp.controller.admin.erp.vo; import com.zt.plat.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -14,9 +15,11 @@ import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH public class ErpProductiveOrderPageReqVO extends PageParam { @Schema(description = "公司编号") + @NotEmpty(message = "公司编号不能为空") private String companyNumber; @Schema(description = "工厂编码") + @NotEmpty(message = "公司编号不能为空") private String factoryNumber; @Schema(description = "工厂名称", example = "赵六") @@ -27,10 +30,12 @@ public class ErpProductiveOrderPageReqVO extends PageParam { @Schema(description = "基本开始日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @NotEmpty(message = "公司编号不能为空") private LocalDateTime[] startDate; @Schema(description = "基本完成日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @NotEmpty(message = "公司编号不能为空") private LocalDateTime[] endDate; @Schema(description = "主产品物料编号") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java index ad76d14..91d97c2 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java @@ -3,6 +3,7 @@ package com.zt.plat.module.erp.dal.mysql.erp; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.module.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialPageReqVO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpMaterialDO; import org.apache.ibatis.annotations.Mapper; @@ -40,5 +41,11 @@ public interface ErpMaterialMapper extends BaseMapperX { String selectMaxCode(); - Integer selectByErpMNumbers(List erpMNumber); + Integer countByErpMNumbers(List erpMNumber); + + default ErpMaterialDO selectOne(ErpMaterialDTO dto) { + return selectOne(new LambdaQueryWrapperX() + .eq(ErpMaterialDO::getDownCenterNumber, dto.getDownCenterNumber()) + .last("limit 1")); + } } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/job/ErpJob.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/job/ErpJob.java index 188602f..4a2532d 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/job/ErpJob.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/job/ErpJob.java @@ -30,6 +30,8 @@ public class ErpJob { @Resource private ErpProcessService erpProcessService; @Resource + private ErpProductiveOrderService erpProductiveOrderService; + @Resource private ErpProductiveVersionService erpProductiveVersionService; @Resource private ErpPurchaseOrganizationService erpPurchaseOrganizationService; @@ -50,6 +52,7 @@ public class ErpJob { erpInternalOrderService.callErpRfcInterface(); erpMaterialService.callErpRfcInterface(); erpProcessService.callErpRfcInterface(); + erpProductiveOrderService.callErpRfcInterface(); erpProductiveVersionService.callErpRfcInterface(); erpPurchaseOrganizationService.callErpRfcInterface(); erpSalesOrganizationService.callErpRfcInterface(); 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 fffbad3..c54f5ff 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 @@ -1,6 +1,7 @@ package com.zt.plat.module.erp.service.erp; import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.module.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialSaveReqVO; @@ -64,4 +65,12 @@ public interface ErpMaterialService { void callErpRfcInterface(); PageResult getErpMaterialPageAndOther(ErpMaterialPageReqVO pageReqVO); + + /** + * 获得ERP物料数据 + * + * @param DTO + * @return ERP物料数据 + */ + ErpMaterialDTO getErpMaterial(ErpMaterialDTO DTO); } \ 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 22ea133..dc22166 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 @@ -9,6 +9,7 @@ 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.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpWarehouseDO; import com.zt.plat.module.erp.utils.ErpConfig; import com.zt.plat.module.erp.utils.MyRedisConfig; @@ -124,7 +125,7 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { .collect(Collectors.toList()); // 使用IN语句批量查询所有物料编码的数量 - Integer countMap = erpMaterialMapper.selectByErpMNumbers(downCenterNumbers); + Integer countMap = erpMaterialMapper.countByErpMNumbers(downCenterNumbers); if (countMap > 1) { throw exception(ERP_MATERIAL_OTHER_NOT_ALLOW_DELETE); } @@ -175,6 +176,12 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { } } + @Override + public ErpMaterialDTO getErpMaterial(ErpMaterialDTO DTO) { + ErpMaterialDO erpMaterialDO = erpMaterialMapper.selectOne(DTO); + return BeanUtils.toBean(erpMaterialDO, ErpMaterialDTO.class); + } + @Override @Transactional @XxlJob("getErpMaterialTask") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java index 8a7da2b..01de59e 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java @@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.handler.annotation.XxlJob; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveVersionPageReqVO; +import com.zt.plat.module.erp.dal.dataobject.erp.ErpProductiveVersionDO; import com.zt.plat.module.erp.utils.ErpConfig; import com.zt.plat.module.erp.utils.MyRedisConfig; import com.zt.plat.module.erp.enums.OftenEnum; @@ -102,83 +104,89 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService @Override public PageResult getErpProductiveOrderPage(ErpProductiveOrderPageReqVO pageReqVO) { - OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单; - String funcnr = funcnrEnum.getFuncnr(); - Map req = new HashMap<>(); - - // 构建查询参数 - req.put("BUKRS", pageReqVO.getCompanyNumber()); - req.put("WERKS", pageReqVO.getFactoryNumber()); - - // 处理日期参数 - if (pageReqVO.getStartDate() != null) { - req.put("BEGDA", pageReqVO.getStartDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); - } - if (pageReqVO.getEndDate() != null) { - req.put("ENDDA", pageReqVO.getEndDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); - } - - // 调用ERP接口获取数据 - HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); - JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); - if (dataArray == null || dataArray.isEmpty()) { - // 返回空结果而不是抛出异常 - return new PageResult<>(new ArrayList<>(), 0L); - } - - List list = new ArrayList<>(); - for (int i = 0; i < dataArray.size(); i++) { - JSONObject dataJson = dataArray.getJSONObject(i); - if (dataJson != null) { - ErpProductiveOrderDO orderDO = new ErpProductiveOrderDO(); - - // 基本信息 - orderDO.setCompanyNumber(dataJson.getString("BUKRS")); - orderDO.setFactoryNumber(dataJson.getString("WERKS").trim()); - orderDO.setFactoryName(dataJson.getString("NAME1")); - orderDO.setOrderNumber(dataJson.getString("AUFNR")); - - // 日期处理 - String plannedStartDate = dataJson.getString("GLTRP"); - String actualStartDate = dataJson.getString("GSTRP"); - - if (plannedStartDate != null && !plannedStartDate.equals("0000-00-00")) { - try { - orderDO.setStartDate(LocalDateTime.parse(plannedStartDate)); - } catch (Exception e) { - // 忽略日期解析错误 - } - } - - if (actualStartDate != null && !actualStartDate.equals("0000-00-00")) { - try { - orderDO.setEndDate(LocalDateTime.parse(actualStartDate)); - } catch (Exception e) { - // 忽略日期解析错误 - } - } - - // 物料和工艺信息 - orderDO.setMainMaterialNumber(dataJson.getString("STLBEZ")); - orderDO.setUnit(dataJson.getString("GMEIN")); - orderDO.setMaterialDescription(dataJson.getString("MAKTX")); - orderDO.setProcessingList(dataJson.getString("L_AFVC")); - orderDO.setProcessingNumber(dataJson.getString("VORNR")); - orderDO.setProcessingDescription(dataJson.getString("LTXA1")); - orderDO.setObjectNumber(dataJson.getString("OBJID")); - orderDO.setWorkCenterNumber(dataJson.getString("ARBPL")); - orderDO.setWorkCenterDescription(dataJson.getString("KTEXT")); - orderDO.setCostcenterNumber(dataJson.getString("KOSTL")); - orderDO.setCostcenterName(dataJson.getString("TEXT_C")); - - list.add(orderDO); - } - } - - // 返回分页结果 - return new PageResult<>(list, (long) list.size()); + return erpProductiveOrderMapper.selectPage(pageReqVO); } + //直接从erp查询生产订单 +// @Override +// public PageResult getErpProductiveOrderPage(ErpProductiveOrderPageReqVO pageReqVO) { +// OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单; +// String funcnr = funcnrEnum.getFuncnr(); +// Map req = new HashMap<>(); +// +// // 构建查询参数 +// req.put("BUKRS", pageReqVO.getCompanyNumber()); +// req.put("WERKS", pageReqVO.getFactoryNumber()); +// +// // 处理日期参数 +// if (pageReqVO.getStartDate() != null) { +// req.put("BEGDA", pageReqVO.getStartDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); +// } +// if (pageReqVO.getEndDate() != null) { +// req.put("ENDDA", pageReqVO.getEndDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); +// } +// +// // 调用ERP接口获取数据 +// HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); +// JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); +// if (dataArray == null || dataArray.isEmpty()) { +// // 返回空结果而不是抛出异常 +// return new PageResult<>(new ArrayList<>(), 0L); +// } +// +// List list = new ArrayList<>(); +// for (int i = 0; i < dataArray.size(); i++) { +// JSONObject dataJson = dataArray.getJSONObject(i); +// if (dataJson != null) { +// ErpProductiveOrderDO orderDO = new ErpProductiveOrderDO(); +// +// // 基本信息 +// orderDO.setCompanyNumber(dataJson.getString("BUKRS")); +// orderDO.setFactoryNumber(dataJson.getString("WERKS").trim()); +// orderDO.setFactoryName(dataJson.getString("NAME1")); +// orderDO.setOrderNumber(dataJson.getString("AUFNR")); +// +// // 日期处理 +// String plannedStartDate = dataJson.getString("GLTRP"); +// String actualStartDate = dataJson.getString("GSTRP"); +// +// if (plannedStartDate != null && !plannedStartDate.equals("0000-00-00")) { +// try { +// orderDO.setStartDate(LocalDateTime.parse(plannedStartDate)); +// } catch (Exception e) { +// // 忽略日期解析错误 +// } +// } +// +// if (actualStartDate != null && !actualStartDate.equals("0000-00-00")) { +// try { +// orderDO.setEndDate(LocalDateTime.parse(actualStartDate)); +// } catch (Exception e) { +// // 忽略日期解析错误 +// } +// } +// +// // 物料和工艺信息 +// orderDO.setMainMaterialNumber(dataJson.getString("STLBEZ")); +// orderDO.setUnit(dataJson.getString("GMEIN")); +// orderDO.setMaterialDescription(dataJson.getString("MAKTX")); +// orderDO.setProcessingList(dataJson.getString("L_AFVC")); +// orderDO.setProcessingNumber(dataJson.getString("VORNR")); +// orderDO.setProcessingDescription(dataJson.getString("LTXA1")); +// orderDO.setObjectNumber(dataJson.getString("OBJID")); +// orderDO.setWorkCenterNumber(dataJson.getString("ARBPL")); +// orderDO.setWorkCenterDescription(dataJson.getString("KTEXT")); +// orderDO.setCostcenterNumber(dataJson.getString("KOSTL")); +// orderDO.setCostcenterName(dataJson.getString("TEXT_C")); +// +// list.add(orderDO); +// } +// } +// +// // 返回分页结果 +// return new PageResult<>(list, (long) list.size()); +// } + @Override @Transactional @XxlJob("getErpProductiveOrderTask") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java index 003812e..129e3a9 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java @@ -230,6 +230,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { DO.setName(dataJson.getString("LGOBE")); DO.setNumber(dataJson.getString("LGORT").trim()); DO.setFactoryNumber(dataJson.getString("WERKS")); + DO.setType("ERP"); String number = dataJson.getString("WERKS").trim() + "-" + dataJson.getString("LGORT").trim(); if (numbers.get(number) != null) { // 更新 diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java index 82d5b65..3f1ce85 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java @@ -100,13 +100,16 @@ public class ErpConfig { String url = "http://" + erpAddress + "/api/rfc/post"; // 构建请求参数 JSONObject requestBody = new JSONObject(); - requestBody.put("uuid", UUID.randomUUID().toString()); + String uuid = UUID.randomUUID().toString(); + requestBody.put("uuid", uuid); requestBody.put("sapsys", sapsys); requestBody.put("srcsys", "DSC"); requestBody.put("funcnr", reqDTO.getFuncnr()); requestBody.put("bskey", reqDTO.getBskey()); requestBody.put("usrid", reqDTO.getUsrid()); requestBody.put("usrnm", reqDTO.getUsrnm()); + //todo 密码另行约定 +// requestBody.put("sign", StrUtil.(uuid + sapsys + "密码另行约定")); if (reqDTO.getReq() != null) { requestBody.put("req", reqDTO.getReq()); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml b/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml index 44c148f..1389ec8 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml +++ b/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml @@ -33,6 +33,7 @@ WHERE DOWN_CTR_NUM = #{item.downCenterNumber} + @@ -41,7 +42,7 @@ SELECT * FROM SPLY_ERP_MTRL WHERE MTRL_ID = #{erpMId} - SELECT COUNT(*) FROM sply_mtrl_oth WHERE ERP_MTRL_NUM IN From 25053c316e638b5fa0787d6d508f0750a5588564 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Mon, 3 Nov 2025 15:45:23 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=9B=BD=E8=B4=B82.0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=EF=BC=9A?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contractorder/api/ContractApiImpl.java | 118 +++++++----------- 1 file changed, 42 insertions(+), 76 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java index 462409a..3b68e79 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java @@ -44,10 +44,9 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.pojo.CommonResult.success; @@ -393,55 +392,49 @@ public class ContractApiImpl implements ContractApi { // 合同ID Long mainDOId = contractMainDO.getId(); - // 合同主信息 - List mainFields = contractOtherFieldMapper.selectList( - new LambdaQueryWrapperX() - .eq(ContractOtherFieldDO::getContractMainId, mainDOId) - .isNull(ContractOtherFieldDO::getRelativityId) - ); - JSONObject resultJson = new JSONObject(); - mainFields.forEach(field - -> resultJson.putOnce(field.getFieldNumber(), field.getFieldValue())); - - // 附件清单列表 - List attachForms = contractOtherFormMapper.selectList( + // 合同动态条款查询 + List otherFormDOs = contractOtherFormMapper.selectList( new LambdaQueryWrapperX() .eq(ContractOtherFormDO::getContractMainId, mainDOId) - .eq(ContractOtherFormDO::getFormNumber, "attachList") ); - if (attachForms != null && !attachForms.isEmpty()) { - JSONArray jsonArray = new JSONArray(); - attachForms.forEach(form -> { - ContractOtherFieldDO fieldDO = contractOtherFieldMapper.selectOne( - new LambdaQueryWrapperX() - .eq(ContractOtherFieldDO::getContractMainId, mainDOId) - .eq(ContractOtherFieldDO::getRelativityId, form.getId()) - ); - if (fieldDO != null) { - jsonArray.add(fieldDO.getFieldValue()); - } - }); - if (!jsonArray.isEmpty()) { - resultJson.putOnce("attachList", jsonArray); - } - } + // 合同动态条款明细查询 + List otherFieldDOs = contractOtherFieldMapper.selectList( + new LambdaQueryWrapperX() + .eq(ContractOtherFieldDO::getContractMainId, mainDOId) + ); - // 客商信息 - resultJson.putOnce("partnerList", getQueryFieldJsonArray(mainDOId, "partnerList")); - // 收发港/站点 - resultJson.putOnce("goodsSiteList", getQueryFieldJsonArray(mainDOId, "goodsSiteList")); - // 货物装卸要求 - resultJson.putOnce("loadingRequirementsList", getQueryFieldJsonArray(mainDOId, "loadingRequirementsList")); - // 收付款账号 - resultJson.putOnce("accountList", getQueryFieldJsonArray(mainDOId, "accountList")); - // 费用明细 - resultJson.putOnce("freightList", getQueryFieldJsonArray(mainDOId, "freightList")); - // 服务费用项目 - resultJson.putOnce("serviceFeeList", getQueryFieldJsonArray(mainDOId, "serviceFeeList")); - // 仓库明细 - resultJson.putOnce("storgeList", getQueryFieldJsonArray(mainDOId, "storgeList")); - // 接货地址 - resultJson.putOnce("receivingAddrList", getQueryFieldJsonArray(mainDOId, "receivingAddrList")); + JSONObject resultJson = new JSONObject(); + + // 设置主信息 + otherFieldDOs.stream() + .filter(otherFieldDO -> otherFieldDO.getRelativityId() == null) + .forEach(otherFieldDO + -> resultJson.putOnce(otherFieldDO.getFieldNumber(), otherFieldDO.getFieldValue())); + + // 设置明细信息 + otherFormDOs.stream() + .collect(Collectors.groupingBy(ContractOtherFormDO::getFormNumber)) + .forEach((key, value) -> { + JSONArray detailsJson = new JSONArray(); + value.forEach(detail -> { + // 根据条款id筛选条款明细 + Stream stream = otherFieldDOs.stream() + .filter(otherFieldDO + -> Objects.equals(otherFieldDO.getRelativityId(), detail.getId())); + if ("attachList".equals(key)) { + // 基础数据类型 + stream.forEach(otherFieldDO + -> detailsJson.add(otherFieldDO.getFieldValue())); + } else { + // 对象数据类型 + JSONObject detailJson = new JSONObject(); + stream.forEach(otherFieldDO + -> detailJson.putOnce(otherFieldDO.getFieldNumber(), otherFieldDO.getFieldValue())); + detailsJson.add(detailJson); + } + }); + resultJson.putOnce(key, detailsJson); + }); // 添加到结果集 resultList.add(resultJson.toBean(IntContract.class)); @@ -451,33 +444,6 @@ public class ContractApiImpl implements ContractApi { return success(result); } - private JSONArray getQueryFieldJsonArray(Long mainDOId, String fieldName) { - - JSONArray jsonArray = new JSONArray(); - List forms = contractOtherFormMapper.selectList( - new LambdaQueryWrapperX() - .eq(ContractOtherFormDO::getContractMainId, mainDOId) - .eq(ContractOtherFormDO::getFormNumber, fieldName) - ); - if (forms != null && !forms.isEmpty()) { - forms.forEach(form -> { - List fieldDOs = contractOtherFieldMapper.selectList( - new LambdaQueryWrapperX() - .eq(ContractOtherFieldDO::getContractMainId, mainDOId) - .eq(ContractOtherFieldDO::getRelativityId, form.getId()) - ); - if (fieldDOs != null && !fieldDOs.isEmpty()) { - JSONObject jsonObject = new JSONObject(); - fieldDOs.forEach(field - -> jsonObject.putOnce(field.getFieldNumber(), field.getFieldValue())); - jsonArray.add(jsonObject); - } - }); - } - - return jsonArray.isEmpty() ? null : jsonArray; - } - @Override public CommonResult> getOrderByOrderIds(List ids) { if (ids == null || ids.isEmpty()) { From 189d2d6fb64f2cedecca6e079c65e63930814a05 Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Mon, 3 Nov 2025 16:03:47 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E-erp=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3api=EF=BC=8Cget=E6=94=B9pos?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/zt/plat/module/erp/api/ErpExternalApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java index 0cf4c96..cd2b0f2 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java @@ -31,11 +31,11 @@ public interface ErpExternalApi { @Operation(summary = "erp数据查询") HashMap queryDataToErp(@Valid @RequestBody ErpQueryReqDTO reqDTO); - @GetMapping(PREFIX + "/queryProductiveVersion") + @PostMapping(PREFIX + "/queryProductiveVersion") @Operation(summary = "生产版本数据查询") CommonResult getErpProductiveVersionByFM(@Valid @RequestBody ErpProductiveVersionReqDTO reqDTO); - @GetMapping(PREFIX + "/queryMaterial") + @PostMapping(PREFIX + "/queryMaterial") @Operation(summary = "物料数据查询") CommonResult getErpMaterial(@Valid @RequestBody ErpMaterialDTO reqDTO); } From 79fa52f39cb9ca1b3b64c9d3973994b87cecf3ea Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Mon, 3 Nov 2025 16:30:49 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E-erp=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3api=EF=BC=8Cpost=E6=94=B9ge?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zt/plat/module/erp/api/ErpExternalApi.java | 7 ++++--- .../com/zt/plat/module/erp/api/ErpExternalApiImpl.java | 6 +++--- .../plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java | 7 +++---- .../plat/module/erp/service/erp/ErpMaterialService.java | 8 +------- .../module/erp/service/erp/ErpMaterialServiceImpl.java | 5 ++--- 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java index cd2b0f2..304b6d9 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java @@ -13,6 +13,7 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.HashMap; import java.util.Map; @@ -35,7 +36,7 @@ public interface ErpExternalApi { @Operation(summary = "生产版本数据查询") CommonResult getErpProductiveVersionByFM(@Valid @RequestBody ErpProductiveVersionReqDTO reqDTO); - @PostMapping(PREFIX + "/queryMaterial") - @Operation(summary = "物料数据查询") - CommonResult getErpMaterial(@Valid @RequestBody ErpMaterialDTO reqDTO); + @GetMapping(PREFIX + "/getMaterialUnit") + @Operation(summary = "根据物料编码查询对应计量单位") + CommonResult getMaterialUnit(@RequestParam("downCenterNumber") String downCenterNumber); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java index 060aed2..fcf9617 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java @@ -60,8 +60,8 @@ public class ErpExternalApiImpl implements ErpExternalApi { } @Override - public CommonResult getErpMaterial(ErpMaterialDTO reqDTO) { - ErpMaterialDTO dto = erpMaterialService.getErpMaterial(reqDTO); - return success(dto); + public CommonResult getMaterialUnit(String materialNumber) { + String materialUnit = erpMaterialService.getMaterialUnit(materialNumber); + return success(materialUnit); } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java index 91d97c2..44d1a86 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpMaterialMapper.java @@ -3,7 +3,6 @@ package com.zt.plat.module.erp.dal.mysql.erp; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.api.dto.ErpMaterialDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialPageReqVO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpMaterialDO; import org.apache.ibatis.annotations.Mapper; @@ -43,9 +42,9 @@ public interface ErpMaterialMapper extends BaseMapperX { Integer countByErpMNumbers(List erpMNumber); - default ErpMaterialDO selectOne(ErpMaterialDTO dto) { + default String getMaterialUnit(String downCenterNumber) { return selectOne(new LambdaQueryWrapperX() - .eq(ErpMaterialDO::getDownCenterNumber, dto.getDownCenterNumber()) - .last("limit 1")); + .eq(ErpMaterialDO::getDownCenterNumber, downCenterNumber) + .last("limit 1")).getUnit(); } } \ 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/ErpMaterialService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialService.java index c54f5ff..7eaff0b 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 @@ -66,11 +66,5 @@ public interface ErpMaterialService { PageResult getErpMaterialPageAndOther(ErpMaterialPageReqVO pageReqVO); - /** - * 获得ERP物料数据 - * - * @param DTO - * @return ERP物料数据 - */ - ErpMaterialDTO getErpMaterial(ErpMaterialDTO DTO); + String getMaterialUnit(String materialNumber); } \ 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 dc22166..94d9c20 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 @@ -177,9 +177,8 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { } @Override - public ErpMaterialDTO getErpMaterial(ErpMaterialDTO DTO) { - ErpMaterialDO erpMaterialDO = erpMaterialMapper.selectOne(DTO); - return BeanUtils.toBean(erpMaterialDO, ErpMaterialDTO.class); + public String getMaterialUnit(String materialNumber) { + return erpMaterialMapper.getMaterialUnit(materialNumber); } @Override From 94313a6f57c218b52f33c9f91f03fe9146ea885c Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Mon, 3 Nov 2025 17:12:17 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E-erp=E5=BA=93=E4=BD=8D?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E7=BC=96=E7=A0=81=E4=BC=98=E5=8C=96=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=8A=9B=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/base/enums/ErrorCodeConstants.java | 21 +++++------ .../base/dal/mysql/base/WarehouseMapper.java | 6 ++++ .../service/base/WarehouseServiceImpl.java | 35 ++++++++++++------- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java index a15b0ee..94fdeab 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java @@ -10,16 +10,17 @@ import com.zt.plat.framework.common.exception.ErrorCode; public interface ErrorCodeConstants { // ========== 示例模块 1-001-000-000 ========== - ErrorCode MATERIAL_OTHER_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode ELEMENT_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode ACCOUNT_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode MATERIAL_DESTROY_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode MATERIAL_INFOMATION_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode COMPANY_RELATIVITY_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode FACTORY_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); - ErrorCode TAX_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); + ErrorCode MATERIAL_OTHER_NOT_EXISTS = new ErrorCode(1_001_000_001, "物料不存在"); + ErrorCode ELEMENT_NOT_EXISTS = new ErrorCode(1_001_000_001, "金属元素不存在"); + ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_001_000_001, "联系人不存在"); + ErrorCode ACCOUNT_NOT_EXISTS = new ErrorCode(1_001_000_001, "账户条款不存在"); + ErrorCode MATERIAL_DESTROY_NOT_EXISTS = new ErrorCode(1_001_000_001, "物料回收率不存在"); + ErrorCode MATERIAL_INFOMATION_NOT_EXISTS = new ErrorCode(1_001_000_001, "物料信息不存在"); + ErrorCode COMPANY_RELATIVITY_NOT_EXISTS = new ErrorCode(1_001_000_001, "公司关系不存在"); + ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1_001_000_001, "库位不存在"); + ErrorCode WAREHOUSE_CODE_EXISTS = new ErrorCode(1_001_000_002, "库位编码已存在"); + ErrorCode FACTORY_NOT_EXISTS = new ErrorCode(1_001_000_001, "工厂不存在"); + ErrorCode TAX_NOT_EXISTS = new ErrorCode(1_001_000_001, "公司关系不存在"); ErrorCode BUSINESS_RULE_NOT_EXISTS = new ErrorCode(1_027_100_001, "规则模型不存在"); diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/WarehouseMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/WarehouseMapper.java index e6ae753..c449a9c 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/WarehouseMapper.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/WarehouseMapper.java @@ -33,4 +33,10 @@ public interface WarehouseMapper extends BaseMapperX { } String selectMaxCode(); + + default WarehouseDO selectByCode(String code){ + return selectOne(new LambdaQueryWrapperX() + .eq(WarehouseDO::getCoding, code) + .last("LIMIT 1")); + }; } \ No newline at end of file diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/WarehouseServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/WarehouseServiceImpl.java index ca7f5e6..a4cd1f5 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/WarehouseServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/WarehouseServiceImpl.java @@ -16,6 +16,7 @@ import org.springframework.validation.annotation.Validated; import java.util.List; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.base.enums.ErrorCodeConstants.WAREHOUSE_CODE_EXISTS; import static com.zt.plat.module.base.enums.ErrorCodeConstants.WAREHOUSE_NOT_EXISTS; /** @@ -35,16 +36,17 @@ public class WarehouseServiceImpl implements WarehouseService { // 插入 WarehouseDO warehouse = BeanUtils.toBean(createReqVO, WarehouseDO.class); // 库位编码自动生成,格式 KW-0001,依次新增 - String maxCode = warehouseMapper.selectMaxCode(); - if (maxCode == null) { - warehouse.setCoding("KW-0001"); - } else { - String prefix = "KW-"; - String numberPart = maxCode.substring(prefix.length()); - int nextNumber = Integer.parseInt(numberPart) + 1; - String nextCode = prefix + String.format("%04d", nextNumber); - warehouse.setCoding(nextCode); - } +// String maxCode = warehouseMapper.selectMaxCode(); +// if (maxCode == null) { +// warehouse.setCoding("KW-0001"); +// } else { +// String prefix = "KW-"; +// String numberPart = maxCode.substring(prefix.length()); +// int nextNumber = Integer.parseInt(numberPart) + 1; +// String nextCode = prefix + String.format("%04d", nextNumber); +// warehouse.setCoding(nextCode); +// } + validateWarehouseCodeExists(warehouse.getCoding()); warehouseMapper.insert(warehouse); // 返回 return BeanUtils.toBean(warehouse, WarehouseRespVO.class); @@ -68,12 +70,12 @@ public class WarehouseServiceImpl implements WarehouseService { } @Override - public void deleteWarehouseListByIds(List ids) { + public void deleteWarehouseListByIds(List ids) { // 校验存在 validateWarehouseExists(ids); // 删除 warehouseMapper.deleteByIds(ids); - } + } private void validateWarehouseExists(List ids) { List list = warehouseMapper.selectByIds(ids); @@ -88,6 +90,13 @@ public class WarehouseServiceImpl implements WarehouseService { } } + private void validateWarehouseCodeExists(String code) { + WarehouseDO warehouse = warehouseMapper.selectByCode(code); + if (warehouse != null) { + throw exception(WAREHOUSE_CODE_EXISTS); + } + } + @Override public WarehouseDO getWarehouse(Long id) { return warehouseMapper.selectById(id); @@ -101,7 +110,7 @@ public class WarehouseServiceImpl implements WarehouseService { @Override public void enableWarehouseList(List saveReqVOS) { List updateObj = BeanUtils.toBean(saveReqVOS, WarehouseDO.class); - List count = warehouseMapper.updateById(updateObj); + List count = warehouseMapper.updateById(updateObj); if (CollUtil.isEmpty(count)) { throw exception(WAREHOUSE_NOT_EXISTS); } From c6a19b93b943cbe5dac0e611d32e35b7fbd25bc2 Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Mon, 3 Nov 2025 17:51:13 +0800 Subject: [PATCH 6/7] =?UTF-8?q?BUG-erp=E5=BA=93=E4=BD=8D=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E4=BC=98=E5=8C=96=E5=BC=82=E5=B8=B8=E6=8A=9B?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/erp/ErpWarehouseServiceImpl.java | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java index 129e3a9..7b41adf 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java @@ -22,10 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -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; @@ -56,18 +53,18 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { // 插入 ErpWarehouseDO warehouse = BeanUtils.toBean(createReqVO, ErpWarehouseDO.class); // 库位编码自动生成,格式 KW-0001,依次新增 - if (warehouse.getNumber() == null) { - String maxCode = erpWarehouseMapper.selectMaxCode(); - if (maxCode == null) { - warehouse.setNumber("KW-0001"); - } else { - String prefix = "KW-"; - String numberPart = maxCode.substring(prefix.length()); - int nextNumber = Integer.parseInt(numberPart) + 1; - String nextCode = prefix + String.format("%04d", nextNumber); - warehouse.setNumber(nextCode); - } - } +// if (warehouse.getNumber() == null) { +// String maxCode = erpWarehouseMapper.selectMaxCode(); +// if (maxCode == null) { +// warehouse.setNumber("KW-0001"); +// } else { +// String prefix = "KW-"; +// String numberPart = maxCode.substring(prefix.length()); +// int nextNumber = Integer.parseInt(numberPart) + 1; +// String nextCode = prefix + String.format("%04d", nextNumber); +// warehouse.setNumber(nextCode); +// } +// } warehouse.setType("SPLY"); warehouse.setIsEnable("1"); erpWarehouseMapper.insert(warehouse); @@ -120,7 +117,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { private void validateErpFactoryExistsNumber(String number, String factoryNumber) { List list = erpWarehouseMapper.selectList(new LambdaQueryWrapperX()).stream() .filter(erpWarehouseDO -> erpWarehouseDO.getNumber().equals(number)) - .filter(erpWarehouseDO -> erpWarehouseDO.getFactoryNumber().equals(factoryNumber)) + .filter(erpWarehouseDO -> Objects.equals(erpWarehouseDO.getFactoryNumber(), factoryNumber)) .toList(); if (!list.isEmpty()) { throw exception(ERP_WAREHOUSE_EXISTS); From bb96b9b6dd674793e03ec476e4e4bb7cd0c7d8dc Mon Sep 17 00:00:00 2001 From: guojunyun Date: Tue, 4 Nov 2025 15:30:04 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=9B=BD=E8=B4=B82.0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=EF=BC=9A?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=EF=BC=9A?= =?UTF-8?q?=E5=90=88=E5=90=8C=E6=9C=89=E6=95=88=E6=9C=9F=E8=B5=B7=E3=80=81?= =?UTF-8?q?=E5=90=88=E5=90=8C=E6=9C=89=E6=95=88=E6=9C=9F=E6=AD=A2=E3=80=81?= =?UTF-8?q?=E7=AD=BE=E7=BA=A6=E5=9C=B0=E3=80=81=E7=AD=BE=E7=BA=A6=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=EF=BC=9B=E5=8E=BB=E9=99=A4=E6=9F=A5=E8=AF=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=9A=E5=90=88=E5=90=8C=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../international/IntContractPageReq.java | 20 ++- .../contractorder/api/ContractApiImpl.java | 145 +++++++++++------- 2 files changed, 108 insertions(+), 57 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java index abddeca..477b801 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java @@ -6,8 +6,24 @@ import lombok.Data; @Data public class IntContractPageReq extends PageParam { - @Schema(description = "合同编号") - private String contractCode; + + // 合同名称:模糊搜索 @Schema(description = "合同名称") private String contractName; + // 合同有效期起:日期选择 + @Schema(description = "合同有效期起") + private String contractStartDate; + // 合同有效期止:日期选择 + @Schema(description = "合同有效期止") + private String contractEndDate; + // 合同版本号:精确搜索 TODO 不确定 + // 签约地:模糊搜索 + @Schema(description = "签约地") + private String signSite; + // 经办人姓名:模糊搜索 + @Schema(description = "经办人姓名") + private String createdUserName; + // 签约日期: 模糊搜索 + @Schema(description = "签约日期") + private String signDate; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java index 3b68e79..fde683f 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java @@ -42,7 +42,9 @@ import org.springframework.web.bind.annotation.RestController; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -250,6 +252,12 @@ public class ContractApiImpl implements ContractApi { return success(true); } + /** + * 国贸合同信息未映射合同主信息字段保存到动态条款 + * + * @param reqVO 国贸合同信息 + * @param contractId 合同主信息ID + */ private void saveIntContractFields(IntContract reqVO, Long contractId) { try { @@ -370,10 +378,28 @@ public class ContractApiImpl implements ContractApi { DictEnum.SPLY_BSN_TP_03BX.getCode() ) ); - // 合同编号 - queryWrapperX.likeIfPresent(ContractMainDO::getContractPaperNumber, pageReq.getContractCode()); - // 合同名称 + // 合同名称:模糊搜索 queryWrapperX.likeIfPresent(ContractMainDO::getContractName, pageReq.getContractName()); + // 合同有效期起:日期选择 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + queryWrapperX.geIfPresent(ContractMainDO::getStartDate, + pageReq.getContractStartDate() != null + ? LocalDateTime.of(LocalDate.parse(pageReq.getContractStartDate(), formatter), LocalTime.MIN) + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + : null); + // 合同有效期止:日期选择 + queryWrapperX.leIfPresent(ContractMainDO::getEndDate, + pageReq.getContractEndDate() != null + ? LocalDateTime.of(LocalDate.parse(pageReq.getContractEndDate(), formatter), LocalTime.MAX) + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + : null); + // 签约地:模糊搜索 + queryWrapperX.likeIfPresent(ContractMainDO::getSignPlace, pageReq.getSignSite()); + // 经办人姓名:模糊搜索 + // 签约日期: 模糊搜索 + if (pageReq.getSignDate() != null) { + queryWrapperX.apply("to_char(SGN_DT, 'yyyymmdd') like concat('%',{0},'%')", pageReq.getSignDate()); + } // 查询 PageResult pageResult = contractMainMapper.selectPage(pageReq, queryWrapperX); @@ -387,63 +413,66 @@ public class ContractApiImpl implements ContractApi { // 遍历查询结果,设置返回数据列表 if (pageResult.getTotal() > 0) { - pageResult.getList().forEach(contractMainDO -> { - - // 合同ID - Long mainDOId = contractMainDO.getId(); - - // 合同动态条款查询 - List otherFormDOs = contractOtherFormMapper.selectList( - new LambdaQueryWrapperX() - .eq(ContractOtherFormDO::getContractMainId, mainDOId) - ); - // 合同动态条款明细查询 - List otherFieldDOs = contractOtherFieldMapper.selectList( - new LambdaQueryWrapperX() - .eq(ContractOtherFieldDO::getContractMainId, mainDOId) - ); - - JSONObject resultJson = new JSONObject(); - - // 设置主信息 - otherFieldDOs.stream() - .filter(otherFieldDO -> otherFieldDO.getRelativityId() == null) - .forEach(otherFieldDO - -> resultJson.putOnce(otherFieldDO.getFieldNumber(), otherFieldDO.getFieldValue())); - - // 设置明细信息 - otherFormDOs.stream() - .collect(Collectors.groupingBy(ContractOtherFormDO::getFormNumber)) - .forEach((key, value) -> { - JSONArray detailsJson = new JSONArray(); - value.forEach(detail -> { - // 根据条款id筛选条款明细 - Stream stream = otherFieldDOs.stream() - .filter(otherFieldDO - -> Objects.equals(otherFieldDO.getRelativityId(), detail.getId())); - if ("attachList".equals(key)) { - // 基础数据类型 - stream.forEach(otherFieldDO - -> detailsJson.add(otherFieldDO.getFieldValue())); - } else { - // 对象数据类型 - JSONObject detailJson = new JSONObject(); - stream.forEach(otherFieldDO - -> detailJson.putOnce(otherFieldDO.getFieldNumber(), otherFieldDO.getFieldValue())); - detailsJson.add(detailJson); - } - }); - resultJson.putOnce(key, detailsJson); - }); - - // 添加到结果集 - resultList.add(resultJson.toBean(IntContract.class)); - }); + pageResult.getList().forEach(contractMainDO + -> resultList.add(getIntContractByMainId(contractMainDO.getId()))); } return success(result); } + /** + * 获取国贸合同信息通过合同主信息ID + * + * @param mainId 同主信息ID + * @return 国贸合同信息 + */ + private IntContract getIntContractByMainId(Long mainId) { + // 合同动态条款查询 + List otherFormDOs = contractOtherFormMapper.selectList( + new LambdaQueryWrapperX() + .eq(ContractOtherFormDO::getContractMainId, mainId) + ); + // 合同动态条款明细查询 + List otherFieldDOs = contractOtherFieldMapper.selectList( + new LambdaQueryWrapperX() + .eq(ContractOtherFieldDO::getContractMainId, mainId) + ); + + JSONObject resultJson = new JSONObject(); + + // 设置主信息 + otherFieldDOs.stream() + .filter(otherFieldDO -> otherFieldDO.getRelativityId() == null) + .forEach(otherFieldDO + -> resultJson.putOnce(otherFieldDO.getFieldNumber(), otherFieldDO.getFieldValue())); + + // 设置明细信息 + otherFormDOs.stream() + .collect(Collectors.groupingBy(ContractOtherFormDO::getFormNumber)) + .forEach((key, value) -> { + JSONArray detailsJson = new JSONArray(); + value.forEach(detail -> { + // 根据条款id筛选条款明细 + Stream stream = otherFieldDOs.stream() + .filter(otherFieldDO + -> Objects.equals(otherFieldDO.getRelativityId(), detail.getId())); + if ("attachList".equals(key)) { + // 基础数据类型 + stream.forEach(otherFieldDO + -> detailsJson.add(otherFieldDO.getFieldValue())); + } else { + // 对象数据类型 + JSONObject detailJson = new JSONObject(); + stream.forEach(otherFieldDO + -> detailJson.putOnce(otherFieldDO.getFieldNumber(), otherFieldDO.getFieldValue())); + detailsJson.add(detailJson); + } + }); + resultJson.putOnce(key, detailsJson); + }); + return resultJson.toBean(IntContract.class); + } + @Override public CommonResult> getOrderByOrderIds(List ids) { if (ids == null || ids.isEmpty()) { @@ -475,6 +504,12 @@ public class ContractApiImpl implements ContractApi { return CommonResult.success(purchaseOrderDetails); } + /** + * 国贸合同信息映射到合同主信息 + * + * @param reqVO 国贸合同信息 + * @return 合同主信息 + */ private ContractMainDO internationalToMainDO(IntContract reqVO) { // 合同主信息表映射