From 5937f38e831d9dfd5a0bf556f97d082bd225a63c Mon Sep 17 00:00:00 2001 From: guojunyun Date: Wed, 24 Sep 2025 14:21:29 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E5=90=88=E5=90=8C=E7=BC=96=E5=88=B6?= =?UTF-8?q?=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zt-module-contract-order-server/pom.xml | 6 + .../ContractCoefficientSaveReqVO.java | 53 ++++++++ .../preparaton/ContractDeductSaveReqVO.java | 54 ++++++++ .../preparaton/ContractDetailSaveReqVO.java | 20 +-- .../preparaton/ContractFormulaSaveReqVO.java | 57 ++++++++ .../vo/preparaton/ContractGradeSaveReqVO.java | 63 +++++++++ .../vo/preparaton/ContractNotSaveReqVO.java | 48 +++++++ .../vo/preparaton/ContractPlanSaveReqVO.java | 20 ++- .../vo/preparaton/ContractPriceSaveReqVO.java | 53 ++++++++ .../vo/preparaton/ContractRespVO.java | 4 +- .../vo/preparaton/ContractSaveReqVO.java | 93 ++++++------- .../contract/ContractCoefficientDO.java | 92 +++++++++++++ .../dataobject/contract/ContractDeductDO.java | 92 +++++++++++++ .../contract/ContractFormulaDO.java | 80 +++++++++++ .../dataobject/contract/ContractGradeDO.java | 112 ++++++++++++++++ .../dataobject/contract/ContractMainDO.java | 21 ++- .../dataobject/contract/ContractNotDO.java | 82 ++++++++++++ .../dataobject/contract/ContractPriceDO.java | 98 ++++++++++++++ .../contract/ContractCoefficientMapper.java | 15 +++ .../mysql/contract/ContractDeductMapper.java | 15 +++ .../mysql/contract/ContractFormulaMapper.java | 15 +++ .../mysql/contract/ContractGradeMapper.java | 14 ++ .../dal/mysql/contract/ContractNotMapper.java | 14 ++ .../mysql/contract/ContractPlanMapper.java | 14 ++ .../mysql/contract/ContractPriceMapper.java | 14 ++ .../service/contract/ContractServiceImpl.java | 124 +++++++++++++++++- 26 files changed, 1187 insertions(+), 86 deletions(-) create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractCoefficientSaveReqVO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDeductSaveReqVO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractFormulaSaveReqVO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractGradeSaveReqVO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractNotSaveReqVO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPriceSaveReqVO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractCoefficientDO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractDeductDO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractGradeDO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractNotDO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractCoefficientMapper.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractDeductMapper.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractFormulaMapper.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractGradeMapper.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractNotMapper.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPlanMapper.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPriceMapper.java diff --git a/zt-module-contract-order/zt-module-contract-order-server/pom.xml b/zt-module-contract-order/zt-module-contract-order-server/pom.xml index 90fd571..198b8be 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/pom.xml +++ b/zt-module-contract-order/zt-module-contract-order-server/pom.xml @@ -126,6 +126,12 @@ zt-spring-boot-starter-biz-business ${revision} + + com.zt.plat + zt-module-base-server + 3.0.35 + compile + diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractCoefficientSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractCoefficientSaveReqVO.java new file mode 100644 index 0000000..994701e --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractCoefficientSaveReqVO.java @@ -0,0 +1,53 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 基础系数配置新增/修改 Request VO") +@Data +public class ContractCoefficientSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "31657") + private Long id; + + @Schema(description = "配置主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "6534") + @NotNull(message = "配置主键不能为空") + private Long parameterId; + + @Schema(description = "条款主键", example = "29652") + private Long formulaId; + + @Schema(description = "金属元素编码") + private String elementNumber; + + @Schema(description = "金属元素缩写") + private String elementAbbreviation; + + @Schema(description = "金属元素名称", example = "芋艿") + private String elementName; + + @Schema(description = "系数值") + private String settlementCoefficient; + + @Schema(description = "系数上限") + private BigDecimal coefficientUp; + + @Schema(description = "系数下限") + private BigDecimal coefficientDown; + + @Schema(description = "是否包含上限") + private String isInUp; + + @Schema(description = "是否包含下限") + private String isInDown; + + @Schema(description = "是否省内", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否省内不能为空") + private String inState; + + @Schema(description = "类型", example = "1") + private String type; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDeductSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDeductSaveReqVO.java new file mode 100644 index 0000000..3f957e4 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDeductSaveReqVO.java @@ -0,0 +1,54 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 调整价配置新增/修改 Request VO") +@Data +public class ContractDeductSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25312") + private Long id; + + @Schema(description = "配置主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "21114") + @NotNull(message = "配置主键不能为空") + private Long parameterId; + + @Schema(description = "条款主键", example = "29909") + private Long formulaId; + + @Schema(description = "物料编码;推送ERP") + private String materialNumber; + + @Schema(description = "物料名称", example = "张三") + private String materialName; + + @Schema(description = "上限", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "上限不能为空") + private BigDecimal gradeUp; + + @Schema(description = "下限") + private BigDecimal gradeDown; + + @Schema(description = "是否包含上限") + private String isInUp; + + @Schema(description = "是否包含下限") + private String isInDown; + + @Schema(description = "方式") + private String way; + + @Schema(description = "类型", example = "1") + private String type; + + @Schema(description = "是否省内", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否省内不能为空") + private String inState; + + @Schema(description = "调整价") + private BigDecimal gradeAmount; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDetailSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDetailSaveReqVO.java index d1c49ab..3369881 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDetailSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractDetailSaveReqVO.java @@ -10,36 +10,36 @@ import java.util.List; @Data public class ContractDetailSaveReqVO { - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32609") + @Schema(description = "主键") private Long id; - @Schema(description = "合同主信息主键", example = "13595") - private Long contractMainId; - - @Schema(description = "物料名称", example = "张三") + @Schema(description = "物料名称", example = "物料名称") private String materialName; - @Schema(description = "物料编码") + @Schema(description = "物料编码", example = "物料编码") private String materialNumber; @Schema(description = "数量") private BigDecimal quantity; - @Schema(description = "计量单位") + @Schema(description = "计量单位", example = "吨") private String unit; @Schema(description = "含税单价", example = "28579") private BigDecimal inTaxUnitPrice; - @Schema(description = "金属元素缩写") + @Schema(description = "金属元素缩写", example = "金属元素缩写") private String elementAbbreviation; - @Schema(description = "金属元素名称", example = "赵六") + @Schema(description = "金属元素名称", example = "金属元素名称") private String elementName; - @Schema(description = "金属元素编码") + @Schema(description = "金属元素编码", example = "金属元素编码") private String elementNumber; // 交货计划 private List plans; + + // 价款结算条款 + private List formulas; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractFormulaSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractFormulaSaveReqVO.java new file mode 100644 index 0000000..054453e --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractFormulaSaveReqVO.java @@ -0,0 +1,57 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; + +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 ContractFormulaSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28539") + private Long id; + + @Schema(description = "合同明细主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8181") + @NotNull(message = "合同明细主键不能为空") + private Long contractDetailId; + + @Schema(description = "公式类型;单价/总价/水扣款/加工费", example = "UNIT_PRICE") + private String formulaType; + + @Schema(description = "公式") + private String formulaCalculate; + + @Schema(description = "编码公式") + private String numberFormula; + + @Schema(description = "物料名称", example = "物料名称") + private String materialName; + + @Schema(description = "物料编码") + private String materialNumber; + + @Schema(description = "计算小数位") + private Long decimal; + + @Schema(description = "金属元素编码") + private String elementNumber; + + @Schema(description = "金属元素缩写") + private String elementAbbreviation; + + @Schema(description = "金属元素名称", example = "金属元素名称") + private String elementName; + + // 基础系数配置 + private List coefficients; + // 品位等级价配置 + private List grades; + // 调整价配置 + private List deducts; + // 市场价配置 + private List prices; + // 品位不计价配置 + private List nots; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractGradeSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractGradeSaveReqVO.java new file mode 100644 index 0000000..ef2daa3 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractGradeSaveReqVO.java @@ -0,0 +1,63 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 品位等级价配置新增/修改 Request VO") +@Data +public class ContractGradeSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15414") + private Long id; + + @Schema(description = "配置主键", example = "16734") + private Long parameterId; + + @Schema(description = "条款主键", example = "15344") + private Long formulaId; + + @Schema(description = "金属元素编码") + private String elementNumber; + + @Schema(description = "金属元素缩写") + private String elementAbbreviation; + + @Schema(description = "金属元素名称", example = "芋艿") + private String elementName; + + @Schema(description = "品位单位") + private String gradeUnit; + + @Schema(description = "品位上限") + private BigDecimal gradeUp; + + @Schema(description = "品位下限") + private BigDecimal gradeDown; + + @Schema(description = "是否包含上限;包含则是大于等于,不包含则是大于") + private String isInUp; + + @Schema(description = "是否包含下限;包含则是小于等于,不包含则是小于") + private String isInDown; + + @Schema(description = "默认计价品位;计价方式为加时,默认为为下限,计价方式为减时,默认为为上限,可手动填写") + private BigDecimal gradeDefault; + + @Schema(description = "系数;计价类型为阶梯价使用,标识没上升多少系数进行加款还是减款") + private BigDecimal settlementCoefficient; + + @Schema(description = "不足系数值按比例计算") + private String useCoefficient; + + @Schema(description = "计价类型", example = "2") + private String priceType; + + @Schema(description = "是否省内", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否省内不能为空") + private String inState; + + @Schema(description = "等级单价", example = "26237") + private BigDecimal unitPrice; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractNotSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractNotSaveReqVO.java new file mode 100644 index 0000000..024bea7 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractNotSaveReqVO.java @@ -0,0 +1,48 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 品位不计价配置新增/修改 Request VO") +@Data +public class ContractNotSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "21132") + private Long id; + + @Schema(description = "配置主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "3781") + @NotNull(message = "配置主键不能为空") + private Long parameterId; + + @Schema(description = "条款主键", example = "5722") + private Long formulaId; + + @Schema(description = "金属元素编码") + private String elementNumber; + + @Schema(description = "金属元素缩写") + private String elementAbbreviation; + + @Schema(description = "金属元素名称", example = "张三") + private String elementName; + + @Schema(description = "上限", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "上限不能为空") + private BigDecimal gradeUp; + + @Schema(description = "下限") + private BigDecimal gradeDown; + + @Schema(description = "是否包含上限") + private String isInUp; + + @Schema(description = "是否包含下限") + private String isInDown; + + @Schema(description = "是否省内", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否省内不能为空") + private String inState; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPlanSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPlanSaveReqVO.java index 971b717..15f214c 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPlanSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPlanSaveReqVO.java @@ -4,30 +4,26 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; -import java.time.LocalDateTime; @Schema(description = "管理后台 - 交货计划条款新增/修改 Request VO") @Data public class ContractPlanSaveReqVO { - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "27474") + @Schema(description = "主键") private Long id; - @Schema(description = "合同明细主键", example = "32763") - private Long contractDetailId; - - @Schema(description = "交货年份", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "交货年份", example = "2025") private Long contractDeliveryYear; - @Schema(description = "交货月份") + @Schema(description = "交货月份", example = "9") private Long contractPlanDeliveryMonth; - @Schema(description = "计划交货数量", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "计划交货数量") private BigDecimal contractPlanDeliveryQuantity; - @Schema(description = "交货开始日期", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime contractDeliveryStartDate; + @Schema(description = "交货开始日期") + private String contractDeliveryStartDate; - @Schema(description = "交货结束日期", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime contractDeliveryEndDate; + @Schema(description = "交货结束日期") + private String contractDeliveryEndDate; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPriceSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPriceSaveReqVO.java new file mode 100644 index 0000000..3d30958 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractPriceSaveReqVO.java @@ -0,0 +1,53 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 市场价配置新增/修改 Request VO") +@Data +public class ContractPriceSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "13654") + private Long id; + + @Schema(description = "配置主键", example = "1590") + private Long parameterId; + + @Schema(description = "条款主键", example = "24677") + private Long formulaId; + + @Schema(description = "市场价") + private BigDecimal value; + + @Schema(description = "计算方式;均价/高位价/地位价") + private String calculateWay; + + @Schema(description = "数据来源网价代码;数据字典") + private String dataOrigin; + + @Schema(description = "计价开始日期") + private LocalDateTime calculateStartDate; + + @Schema(description = "计价截止日期") + private LocalDateTime calculateEndDate; + + @Schema(description = "包含开始日期") + private String inStartDate; + + @Schema(description = "包含结束日期") + private String inEndDate; + + @Schema(description = "价格品种元素的明细分类") + private String priceGrade; + + @Schema(description = "品种分类", example = "1") + private String gradeType; + + @Schema(description = "取价方式;区间价/固定价", example = "2") + private String averageType; + + @Schema(description = "网价小数位") + private BigDecimal decimal; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractRespVO.java index 3522b9b..6a88340 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractRespVO.java @@ -167,7 +167,7 @@ public class ContractRespVO { @Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息") @ExcelProperty("代理方;与ERP(ZLIFNR)对应,拓展信息") - private String zlifnr; + private String agent; @Schema(description = "类别;与ERP(HTLB)对应,拓展信息") @ExcelProperty("类别;与ERP(HTLB)对应,拓展信息") @@ -195,7 +195,7 @@ public class ContractRespVO { @Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息") @ExcelProperty("境内/境外;与ERP(JNJW)对应,拓展信息") - private String jnjw; + private String isDomestic; @Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填") @ExcelProperty("建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractSaveReqVO.java index 52dd360..5c94cd9 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/preparaton/ContractSaveReqVO.java @@ -1,21 +1,16 @@ package com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton; import com.alibaba.excel.annotation.ExcelProperty; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceDataSaveReqVO; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.List; -import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -import static com.zt.plat.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; - @Schema(description = "管理后台 - 合同信息新增/修改 Request VO") @Data public class ContractSaveReqVO { @@ -30,45 +25,45 @@ public class ContractSaveReqVO { private Integer step; // 合同基本信息 - @Schema(description = "甲方公司编号;如果是采购合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是销售合同,手动选择,且与ERP(WLDWBH)对应。") + @Schema(description = "甲方公司编号;如果是采购合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是销售合同,手动选择,且与ERP(WLDWBH)对应。", example = "甲方公司编号") @ExcelProperty("甲方公司编号;如果是采购合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是销售合同,手动选择,且与ERP(WLDWBH)对应。") private String purchaseCompanyNumber; - @Schema(description = "甲方公司名称", example = "王五") + @Schema(description = "甲方公司名称", example = "甲方公司名称") @ExcelProperty("甲方公司名称") private String purchaseCompanyName; - @Schema(description = "甲方地址") + @Schema(description = "甲方地址", example = "甲方地址") @ExcelProperty("甲方地址") private String purchaseAddress; - @Schema(description = "甲方法定代表人") + @Schema(description = "甲方法定代表人", example = "甲方法定代表人") @ExcelProperty("甲方法定代表人") private String purchaseLeader; - @Schema(description = "乙方公司编号;如果是销售合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是采购合同,手动选择,且与ERP(WLDWBH)对应。") + @Schema(description = "乙方公司编号;如果是销售合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是采购合同,手动选择,且与ERP(WLDWBH)对应。", example = "乙方公司编号") @ExcelProperty("乙方公司编号;如果是销售合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是采购合同,手动选择,且与ERP(WLDWBH)对应。") private String salesCompanyNumber; - @Schema(description = "乙方公司名称", example = "王五") + @Schema(description = "乙方公司名称", example = "乙方公司名称") @ExcelProperty("乙方公司名称") private String salesCompanyName; - @Schema(description = "乙方地址") + @Schema(description = "乙方地址", example = "乙方地址") @ExcelProperty("乙方地址") private String salesAddress; - @Schema(description = "乙方企业负责人") + @Schema(description = "乙方企业负责人", example = "乙方企业负责人") @ExcelProperty("乙方企业负责人") private String salesPurchaseLeader; @NotBlank(message = "合同名称不能为空") @Size(max = 90, message = "合同名称长度不能超过90个字符") - @Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "芋艿") + @Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "合同名称") @ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一") private String contractName; - @Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一") + @Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一", example = "合同编号") @ExcelProperty("合同编号;与ERP(HTBH)对应,校验唯一") private String contractPaperNumber; @@ -77,34 +72,28 @@ public class ContractSaveReqVO { @ExcelProperty("合同类型") private String contractType; - @Schema(description = "收支性质;与ERP(SZXZ)对应") + @Schema(description = "收支性质;与ERP(SZXZ)对应", example = "EXPENSES") @ExcelProperty("收支性质;与ERP(SZXZ)对应") private String direction; - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @JsonFormat(timezone = TIME_ZONE_DEFAULT, pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @Schema(description = "签署日期;与ERP(HTQDRQ)对应") @ExcelProperty("签署日期;与ERP(HTQDRQ)对应") - private LocalDateTime signDate; + private String signDate; - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @JsonFormat(timezone = TIME_ZONE_DEFAULT, pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @Schema(description = "开始日期;与ERP(HTQSRQ)对应") @ExcelProperty("开始日期;与ERP(HTQSRQ)对应") - private LocalDateTime startDate; + private String startDate; - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @JsonFormat(timezone = TIME_ZONE_DEFAULT, pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @Schema(description = "结束日期;与ERP(HTZZRQ)对应") @ExcelProperty("结束日期;与ERP(HTZZRQ)对应") - private LocalDateTime endDate; + private String endDate; - @Schema(description = "签署地") + @Schema(description = "签署地", example = "签署地") @ExcelProperty("签署地") private String signPlace; // 金额信息 - @Schema(description = "币种;与ERP(BZBH)对应") + @Schema(description = "币种;与ERP(BZBH)对应", example = "CNY") @ExcelProperty("币种;与ERP(BZBH)对应") private String currency; @@ -116,7 +105,7 @@ public class ContractSaveReqVO { @ExcelProperty("原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额") private BigDecimal cooAmount; - @Schema(description = "是否有履约保证金;为是,则保证金必填。") + @Schema(description = "是否有履约保证金;为是,则保证金必填。", example = "1") @ExcelProperty("是否有履约保证金;为是,则保证金必填。") private String hasDeposit; @@ -128,7 +117,7 @@ public class ContractSaveReqVO { @ExcelProperty("本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息") private BigDecimal changeBasicAmountDeposit; - @Schema(description = "是否有预付款;与ERP(SFYYFK)对应") + @Schema(description = "是否有预付款;与ERP(SFYYFK)对应", example = "1") @ExcelProperty("是否有预付款;与ERP(SFYYFK)对应") private String hasPrepayment; @@ -140,7 +129,7 @@ public class ContractSaveReqVO { @ExcelProperty("预付款金额;与ERP(YFKJE)对应") private BigDecimal prepaymentAmount; - @Schema(description = "是否有质保金;与ERP(SFHZBJ)对应") + @Schema(description = "是否有质保金;与ERP(SFHZBJ)对应", example = "1") @ExcelProperty("是否有质保金;与ERP(SFHZBJ)对应") private String hasQualityAmount; @@ -152,11 +141,11 @@ public class ContractSaveReqVO { @ExcelProperty("质保金金额;与ERP(BZJJE)对应") private BigDecimal qualityAmount; - @Schema(description = "是否先款后货") + @Schema(description = "是否先款后货", example = "1") @ExcelProperty("是否先款后货") private String hasPayable; - @Schema(description = "备注;与ERP(BZXX)对应") + @Schema(description = "备注;与ERP(BZXX)对应", example = "备注") @ExcelProperty("备注;与ERP(BZXX)对应") private String remark; @@ -180,51 +169,51 @@ public class ContractSaveReqVO { @ExcelProperty("本币履约保证金;与ERP(LYBZJBGQBWB)对应") private BigDecimal basicAmountDeposit; - @Schema(description = "是否框架合同;与ERP(SFKJHT)对应,拓展信息") + @Schema(description = "是否框架合同;与ERP(SFKJHT)对应,拓展信息", example = "1") @ExcelProperty("是否框架合同;与ERP(SFKJHT)对应,拓展信息") private String isFramework; - @Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息") + @Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息", example = "DOMESTIC") @ExcelProperty("境内/境外;与ERP(JNJW)对应,拓展信息") - private String jnjw; + private String isDomestic; - @Schema(description = "施工类型编号;与ERP(HTLXBH)对应,拓展信息") + @Schema(description = "施工类型编号;与ERP(HTLXBH)对应,拓展信息", example = "施工类型编号") @ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息") private String constructionTypeNumber; - @Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "张三") + @Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "施工类型名称") @ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息") private String constructionTypeName; - @Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息") + @Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息", example = "代理方") @ExcelProperty("代理方;与ERP(ZLIFNR)对应,拓展信息") - private String zlifnr; + private String agent; - @Schema(description = "类别;与ERP(HTLB)对应,拓展信息") + @Schema(description = "类别;与ERP(HTLB)对应,拓展信息", example = "PROCESSING") @ExcelProperty("类别;与ERP(HTLB)对应,拓展信息") private String category; - // 模板部分查询 - @Schema(description = "模板实例主键", example = "10196") - @ExcelProperty("模板实例主键") - private Long instanceId; - // 合同动态表单 - // 合同动态条款 - - // TODO 未确认字段 - @Schema(description = "是否虚拟合同;与ERP(SFXNHT)对应") + @Schema(description = "是否虚拟合同;与ERP(SFXNHT)对应", example = "1") @ExcelProperty("是否虚拟合同;与ERP(SFXNHT)对应") private String contractVirtual; - @Schema(description = "补充协议类型;变更协议/增加条款", example = "1") + @Schema(description = "补充协议类型;变更协议/增加条款", example = "补充协议类型") @ExcelProperty("补充协议类型;变更协议/增加条款") private String replenishAgreementType; - @Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填") + @Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填", example = "建筑服务发生地") @ExcelProperty("建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填") private String architectureServicePlace; @Schema(description = "达到收款条件金额;与ERP(DDSKJE)对应,拓展信息,销售合同,且类型为SAP02COSR必填") @ExcelProperty("达到收款条件金额;与ERP(DDSKJE)对应,拓展信息,销售合同,且类型为SAP02COSR必填") private BigDecimal payeeConditionAmount; + + // 模板部分查询 + @Schema(description = "模板实例主键", example = "10196") + @ExcelProperty("模板实例主键") + private Long instanceId; + + // 合同动态表单 + private List dynamicsFields; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractCoefficientDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractCoefficientDO.java new file mode 100644 index 0000000..c945db3 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractCoefficientDO.java @@ -0,0 +1,92 @@ +package com.zt.plat.module.contractorder.dal.dataobject.contract; + +import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; +import lombok.*; + +import java.math.BigDecimal; + +/** + * 基础系数配置 DO + * + * @author 后台管理 + */ +@TableName("bse_ctrt_coef") +@KeySequence("bse_ctrt_coef_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** + * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO + */ +public class ContractCoefficientDO extends BusinessBaseDO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 配置主键 + */ + @TableField("PRM_ID") + private Long parameterId; + /** + * 条款主键 + */ + @TableField("FMU_ID") + private Long formulaId; + /** + * 金属元素编码 + */ + @TableField("ELEM_NUM") + private String elementNumber; + /** + * 金属元素缩写 + */ + @TableField("ELEM_ABBR") + private String elementAbbreviation; + /** + * 金属元素名称 + */ + @TableField("ELEM_NAME") + private String elementName; + /** + * 系数值 + */ + @TableField("STLM_COEF") + private String settlementCoefficient; + /** + * 系数上限 + */ + @TableField("COEF_UP") + private BigDecimal coefficientUp; + /** + * 系数下限 + */ + @TableField("COEF_DOWN") + private BigDecimal coefficientDown; + /** + * 是否包含上限 + */ + @TableField("IS_IN_UP") + private String isInUp; + /** + * 是否包含下限 + */ + @TableField("IS_IN_DOWN") + private String isInDown; + /** + * 是否省内 + */ + @TableField("IN_STA") + private String inState; + /** + * 类型 + */ + @TableField("TP") + private String type; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractDeductDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractDeductDO.java new file mode 100644 index 0000000..c80521e --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractDeductDO.java @@ -0,0 +1,92 @@ +package com.zt.plat.module.contractorder.dal.dataobject.contract; + +import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; +import lombok.*; + +import java.math.BigDecimal; + +/** + * 调整价配置 DO + * + * @author 后台管理 + */ +@TableName("bse_ctrt_ddct") +@KeySequence("bse_ctrt_ddct_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** + * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO + */ +public class ContractDeductDO extends BusinessBaseDO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 配置主键 + */ + @TableField("PRM_ID") + private Long parameterId; + /** + * 条款主键 + */ + @TableField("FMU_ID") + private Long formulaId; + /** + * 物料编码;推送ERP + */ + @TableField("MTRL_NUM") + private String materialNumber; + /** + * 物料名称 + */ + @TableField("MTRL_NAME") + private String materialName; + /** + * 上限 + */ + @TableField("GRD_UP") + private BigDecimal gradeUp; + /** + * 下限 + */ + @TableField("GRD_DOWN") + private BigDecimal gradeDown; + /** + * 是否包含上限 + */ + @TableField("IS_IN_UP") + private String isInUp; + /** + * 是否包含下限 + */ + @TableField("IS_IN_DOWN") + private String isInDown; + /** + * 方式 + */ + @TableField("WY") + private String way; + /** + * 类型 + */ + @TableField("TP") + private String type; + /** + * 是否省内 + */ + @TableField("IN_STA") + private String inState; + /** + * 调整价 + */ + @TableField("GRD_AMT") + private BigDecimal gradeAmount; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java new file mode 100644 index 0000000..539a56a --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java @@ -0,0 +1,80 @@ +package com.zt.plat.module.contractorder.dal.dataobject.contract; + +import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; +import lombok.*; + +/** + * 价款结算条款 DO + * + * @author 后台管理 + */ +@TableName("bse_ctrt_fmu") +@KeySequence("bse_ctrt_fmu_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** + * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO + */ +public class ContractFormulaDO extends BusinessBaseDO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 合同明细主键 + */ + @TableField("CTRT_DTL_ID") + private Long contractDetailId; + /** + * 公式类型;单价/总价/水扣款/加工费 + */ + @TableField("FMU_TP") + private String formulaType; + /** + * 公式 + */ + @TableField("FMU_CALT") + private String formulaCalculate; + /** + * 编码公式 + */ + @TableField("NUM_FMU") + private String numberFormula; + /** + * 物料名称 + */ + @TableField("MTRL_NAME") + private String materialName; + /** + * 物料编码 + */ + @TableField("MTRL_NUM") + private String materialNumber; + /** + * 计算小数位 + */ + @TableField("DEC") + private Long decimal; + /** + * 金属元素编码 + */ + @TableField("ELEM_NUM") + private String elementNumber; + /** + * 金属元素缩写 + */ + @TableField("ELEM_ABBR") + private String elementAbbreviation; + /** + * 金属元素名称 + */ + @TableField("ELEM_NAME") + private String elementName; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractGradeDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractGradeDO.java new file mode 100644 index 0000000..47403a4 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractGradeDO.java @@ -0,0 +1,112 @@ +package com.zt.plat.module.contractorder.dal.dataobject.contract; + +import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; +import lombok.*; + +import java.math.BigDecimal; + +/** + * 品位等级价配置 DO + * + * @author 后台管理 + */ +@TableName("bse_ctrt_grd") +@KeySequence("bse_ctrt_grd_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** + * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO + */ +public class ContractGradeDO extends BusinessBaseDO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 配置主键 + */ + @TableField("PRM_ID") + private Long parameterId; + /** + * 条款主键 + */ + @TableField("FMU_ID") + private Long formulaId; + /** + * 金属元素编码 + */ + @TableField("ELEM_NUM") + private String elementNumber; + /** + * 金属元素缩写 + */ + @TableField("ELEM_ABBR") + private String elementAbbreviation; + /** + * 金属元素名称 + */ + @TableField("ELEM_NAME") + private String elementName; + /** + * 品位单位 + */ + @TableField("GRD_UNT") + private String gradeUnit; + /** + * 品位上限 + */ + @TableField("GRD_UP") + private BigDecimal gradeUp; + /** + * 品位下限 + */ + @TableField("GRD_DOWN") + private BigDecimal gradeDown; + /** + * 是否包含上限;包含则是大于等于,不包含则是大于 + */ + @TableField("IS_IN_UP") + private String isInUp; + /** + * 是否包含下限;包含则是小于等于,不包含则是小于 + */ + @TableField("IS_IN_DOWN") + private String isInDown; + /** + * 默认计价品位;计价方式为加时,默认为为下限,计价方式为减时,默认为为上限,可手动填写 + */ + @TableField("GRD_DFT") + private BigDecimal gradeDefault; + /** + * 系数;计价类型为阶梯价使用,标识没上升多少系数进行加款还是减款 + */ + @TableField("STLM_COEF") + private BigDecimal settlementCoefficient; + /** + * 不足系数值按比例计算 + */ + @TableField("USE_COEF") + private String useCoefficient; + /** + * 计价类型 + */ + @TableField("PRC_TP") + private String priceType; + /** + * 是否省内 + */ + @TableField("IN_STA") + private String inState; + /** + * 等级单价 + */ + @TableField("UPRC") + private BigDecimal unitPrice; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java index a0c5531..3bad913 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java @@ -1,9 +1,8 @@ package com.zt.plat.module.contractorder.dal.dataobject.contract; -import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import lombok.*; - import java.math.BigDecimal; import java.time.LocalDateTime; @@ -218,8 +217,8 @@ public class ContractMainDO extends BusinessBaseDO { /** * 代理方;与ERP(ZLIFNR)对应,拓展信息 */ - @TableField("ZLIFNR") - private String zlifnr; + @TableField("AGT") + private String agent; /** * 类别;与ERP(HTLB)对应,拓展信息 */ @@ -253,8 +252,8 @@ public class ContractMainDO extends BusinessBaseDO { /** * 境内/境外;与ERP(JNJW)对应,拓展信息 */ - @TableField("JNJW") - private String jnjw; + @TableField("IS_DOM") + private String isDomestic; /** * 建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填 */ @@ -270,4 +269,14 @@ public class ContractMainDO extends BusinessBaseDO { */ @TableField("STP") private Integer step; + /** + * ERP请求状态 + */ + @TableField("ERP_STS") + private String erpStatus; + /** + * ERP请求失败原因 + */ + @TableField("CAUS") + private String cause; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractNotDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractNotDO.java new file mode 100644 index 0000000..642a7b6 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractNotDO.java @@ -0,0 +1,82 @@ +package com.zt.plat.module.contractorder.dal.dataobject.contract; + +import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; +import lombok.*; + +import java.math.BigDecimal; + +/** + * 品位不计价配置 DO + * + * @author 后台管理 + */ +@TableName("bse_ctrt_nt") +@KeySequence("bse_ctrt_nt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** + * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO + */ +public class ContractNotDO extends BusinessBaseDO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 配置主键 + */ + @TableField("PRM_ID") + private Long parameterId; + /** + * 条款主键 + */ + @TableField("FMU_ID") + private Long formulaId; + /** + * 金属元素编码 + */ + @TableField("ELEM_NUM") + private String elementNumber; + /** + * 金属元素缩写 + */ + @TableField("ELEM_ABBR") + private String elementAbbreviation; + /** + * 金属元素名称 + */ + @TableField("ELEM_NAME") + private String elementName; + /** + * 上限 + */ + @TableField("GRD_UP") + private BigDecimal gradeUp; + /** + * 下限 + */ + @TableField("GRD_DOWN") + private BigDecimal gradeDown; + /** + * 是否包含上限 + */ + @TableField("IS_IN_UP") + private String isInUp; + /** + * 是否包含下限 + */ + @TableField("IS_IN_DOWN") + private String isInDown; + /** + * 是否省内 + */ + @TableField("IN_STA") + private String inState; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java new file mode 100644 index 0000000..3eb77a1 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java @@ -0,0 +1,98 @@ +package com.zt.plat.module.contractorder.dal.dataobject.contract; + +import com.baomidou.mybatisplus.annotation.*; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 市场价配置 DO + * + * @author 后台管理 + */ +@TableName("bse_ctrt_prc") +@KeySequence("bse_ctrt_prc_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** + * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO + */ +public class ContractPriceDO extends BusinessBaseDO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 配置主键 + */ + @TableField("PRM_ID") + private Long parameterId; + /** + * 条款主键 + */ + @TableField("FMU_ID") + private Long formulaId; + /** + * 市场价 + */ + @TableField("VAL") + private BigDecimal value; + /** + * 计算方式;均价/高位价/地位价 + */ + @TableField("CALT_WY") + private String calculateWay; + /** + * 数据来源网价代码;数据字典 + */ + @TableField("DAT_ORGN") + private String dataOrigin; + /** + * 计价开始日期 + */ + @TableField("CALT_STRT_DT") + private LocalDateTime calculateStartDate; + /** + * 计价截止日期 + */ + @TableField("CALT_END_DT") + private LocalDateTime calculateEndDate; + /** + * 包含开始日期 + */ + @TableField("IN_STRT_DT") + private String inStartDate; + /** + * 包含结束日期 + */ + @TableField("IN_END_DT") + private String inEndDate; + /** + * 价格品种元素的明细分类 + */ + @TableField("PRC_GRD") + private String priceGrade; + /** + * 品种分类 + */ + @TableField("GRD_TP") + private String gradeType; + /** + * 取价方式;区间价/固定价 + */ + @TableField("AVG_TP") + private String averageType; + /** + * 网价小数位 + */ + @TableField("DEC") + private BigDecimal decimal; +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractCoefficientMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractCoefficientMapper.java new file mode 100644 index 0000000..9a971d8 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractCoefficientMapper.java @@ -0,0 +1,15 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractCoefficientDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 基础系数配置 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractCoefficientMapper extends BaseMapperX { + +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractDeductMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractDeductMapper.java new file mode 100644 index 0000000..df9e005 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractDeductMapper.java @@ -0,0 +1,15 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractDeductDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 调整价配置 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractDeductMapper extends BaseMapperX { + +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractFormulaMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractFormulaMapper.java new file mode 100644 index 0000000..793e5f4 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractFormulaMapper.java @@ -0,0 +1,15 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractFormulaDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 价款结算条款 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractFormulaMapper extends BaseMapperX { + +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractGradeMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractGradeMapper.java new file mode 100644 index 0000000..3bd8413 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractGradeMapper.java @@ -0,0 +1,14 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractGradeDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 品位等级价配置 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractGradeMapper extends BaseMapperX { +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractNotMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractNotMapper.java new file mode 100644 index 0000000..862e08e --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractNotMapper.java @@ -0,0 +1,14 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractNotDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 品位不计价配置 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractNotMapper extends BaseMapperX { +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPlanMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPlanMapper.java new file mode 100644 index 0000000..8cb6c38 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPlanMapper.java @@ -0,0 +1,14 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractPlanDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 交货计划条款 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractPlanMapper extends BaseMapperX { +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPriceMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPriceMapper.java new file mode 100644 index 0000000..f857cac --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractPriceMapper.java @@ -0,0 +1,14 @@ +package com.zt.plat.module.contractorder.dal.mysql.contract; + +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractPriceDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 市场价配置 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface ContractPriceMapper extends BaseMapperX { +} \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java index ba2323f..59167e0 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java @@ -1,22 +1,27 @@ package com.zt.plat.module.contractorder.service.contract; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.tenant.core.context.CompanyContextHolder; +import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceDataDO; +import com.zt.plat.module.base.service.tmpltp.TemplateInstanceDataService; import com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton.ContractPageReqVO; import com.zt.plat.module.contractorder.controller.admin.contract.vo.preparaton.ContractSaveReqVO; -import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractMainDO; -import com.zt.plat.module.contractorder.dal.mysql.contract.ContractMainMapper; +import com.zt.plat.module.contractorder.dal.dataobject.contract.*; +import com.zt.plat.module.contractorder.dal.mysql.contract.*; import com.zt.plat.module.contractorder.enums.contract.ContractStatusEnum; import com.zt.plat.module.contractorder.enums.contract.DateConstants; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.contractorder.enums.ErrorCodeConstants.*; @@ -32,12 +37,31 @@ public class ContractServiceImpl implements ContractService { @Resource private ContractMainMapper contractMainMapper; + @Resource + private ContractDetailMapper contractDetailMapper; + @Resource + private ContractPlanMapper contractPlanMapper; + @Resource + private TemplateInstanceDataService templateInstanceDataService; + @Resource + private ContractFormulaMapper contractFormulaMapper; + @Resource + private ContractCoefficientMapper contractCoefficientMapper; + @Resource + private ContractGradeMapper contractGradeMapper; + @Resource + private ContractDeductMapper contractDeductMapper; + @Resource + private ContractPriceMapper contractPriceMapper; + @Resource + private ContractNotMapper contractNotMapper; @Override public PageResult getContractPage(ContractPageReqVO pageReqVO) { return contractMainMapper.selectContractPage(pageReqVO); } + @Transactional @Override public Long createContract(ContractSaveReqVO reqVO) { @@ -65,7 +89,99 @@ public class ContractServiceImpl implements ContractService { // 保存合同主信息 contractMainMapper.insert(contractMainDO); - System.out.println(contractMainDO); + // 合同主信息ID + Long contractId = contractMainDO.getId(); + // 合同明细 + reqVO.getDetail().forEach(detail -> { + // 合同明细DO + ContractDetailDO detailDO = BeanUtils.toBean(detail, ContractDetailDO.class); + // 设置合同主信息ID + detailDO.setContractMainId(contractId); + // 保存合同明细 + contractDetailMapper.insert(detailDO); + + // 合同明细ID + Long detailDOId = detailDO.getId(); + // 交货计划 + detail.getPlans().forEach(plan -> { + // 交货计划DO + ContractPlanDO planDO = BeanUtils.toBean(plan, ContractPlanDO.class); + // 合同明细主键 + planDO.setContractDetailId(detailDOId); + // 保存交货计划 + contractPlanMapper.insert(planDO); + }); + + // 价款结算条款 + detail.getFormulas().forEach(formula -> { + // 价款结算条款DO + ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); + // 合同明细主键 + formulaDO.setContractDetailId(detailDOId); + // 保存价款结算条款 + contractFormulaMapper.insert(formulaDO); + + // 价款结算条款ID + Long formulaDOId = formulaDO.getId(); + // 基础系数配置 + formula.getCoefficients().forEach(coefficient -> { + // 基础系数配置DO + ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); + // 条款主键 + coefficientDO.setFormulaId(formulaDOId); + // 保存基础系数配置 + contractCoefficientMapper.insert(coefficientDO); + }); + // 品位等级价配置 + formula.getGrades().forEach(grade -> { + // 品位等级价配置DO + ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); + // 条款主键 + gradeDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractGradeMapper.insert(gradeDO); + }); + // 调整价配置 + formula.getDeducts().forEach(deduct -> { + // 调整价配置DO + ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); + // 条款主键 + deductDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractDeductMapper.insert(deductDO); + }); + // 市场价配置 + formula.getPrices().forEach(price -> { + // 市场价配置DO + ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); + // 条款主键 + priceDO.setFormulaId(formulaDOId); + // 保存市场价配置 + contractPriceMapper.insert(priceDO); + }); + // 品位不计价配置 + formula.getNots().forEach(not -> { + // 品位不计价配置DO + ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); + // 条款主键 + notDO.setFormulaId(formulaDOId); + // 保存品位不计价配置 + contractNotMapper.insert(notDO); + }); + }); + }); + + // 合同动态表单 + List templateInstanceDataDOS = new ArrayList<>(); + reqVO.getDynamicsFields().forEach(dynamicsField -> { + TemplateInstanceDataDO templateInstanceDataDO = new TemplateInstanceDataDO(); + BeanUtils.copyProperties(dynamicsField, templateInstanceDataDO); + templateInstanceDataDO.setInscId(reqVO.getInstanceId().toString()); + templateInstanceDataDOS.add(templateInstanceDataDO); + }); + // 更新合同动态表单值 + templateInstanceDataService.setTemplateInstanceData(templateInstanceDataDOS); + return contractMainDO.getId(); } From b8d866035605a72e131938116952b2d307352a3e Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Wed, 24 Sep 2025 15:27:45 +0800 Subject: [PATCH 02/21] =?UTF-8?q?pom=EF=BC=8C=E5=B7=A5=E8=89=BA=E8=B7=AF?= =?UTF-8?q?=E7=BA=BF=EF=BC=8C=E5=B0=81=E8=A3=85post=E6=8F=90=E4=BA=A4asp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plat/module/erp/api/ErpExternalApi.java | 4 +- .../module/erp/api/ErpExternalApiImpl.java | 4 +- .../module/erp/common/conf/ErpConfig.java | 137 ++++++++++++---- .../admin/erp/ErpAssetController.java | 2 +- .../admin/erp/vo/ErpProcessPageReqVO.java | 2 +- .../admin/erp/vo/ErpProcessRespVO.java | 2 +- .../admin/erp/vo/ErpProcessSaveReqVO.java | 2 +- .../erp/dal/dataobject/erp/ErpProcessDO.java | 4 +- .../dataobject/erp/ErpProcessDetailDO.java | 2 +- .../erp/service/erp/ErpBomServiceImpl.java | 4 +- .../erp/ErpProcessDetailServiceImpl.java | 99 ++++++++++++ .../service/erp/ErpProcessServiceImpl.java | 147 +++++++++++++----- 12 files changed, 328 insertions(+), 81 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 f55cdfb..875db6a 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 @@ -11,6 +11,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import java.util.HashMap; + @FeignClient(name = ApiConstants.NAME) @Tag(name = "RPC 服务 - ERP") public interface ErpExternalApi { @@ -19,6 +21,6 @@ public interface ErpExternalApi { @PostMapping(PREFIX + "/submit") @Operation(summary = "erp数据提交") - ResponseEntity submitDataToErp(@Valid @RequestBody ErpSubmitReqDTO reqDTO); + HashMap submitDataToErp(@Valid @RequestBody ErpSubmitReqDTO reqDTO); } 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 6861777..27b4237 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 @@ -7,6 +7,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; + /** * ERP Api 实现类 * @@ -21,7 +23,7 @@ public class ErpExternalApiImpl implements ErpExternalApi { private ErpConfig erpConfig; @Override - public ResponseEntity submitDataToErp(ErpSubmitReqDTO reqDTO) { + public HashMap submitDataToErp(ErpSubmitReqDTO reqDTO) { return erpConfig.pushDataToErp(reqDTO); } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java index 487f5ed..096e015 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java @@ -82,45 +82,114 @@ public class ErpConfig { } } + // GET请求处理 +// public HashMap getResult(SAPInterfaceResult result) { +// HashMap resMap = new HashMap<>(); +// String E_RSLT = null; +// JSONObject jsonObject = result.getData(); +// //判断 result里的succeed是否为true +// boolean succeed = result.isSucceed(); +// if (succeed && "S".equals(jsonObject.getString("E_FLAG"))) { +// JSONObject data = result.getData(); +// String flag = "S"; +// String E_RESP = data.getString("E_DATA"); +// +// String E_MSG = result.getMsg(); +//// log.info("请求SAP成功 E_RESP:{}", E_RESP); +//// log.info("请求SAP成功 E_MSG:{}", E_MSG); +// resMap.put("E_RESP", E_RESP); +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +// return resMap; +// } else { +// String E_MSG = result.getMsg(); +// String flag = "E"; +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +//// log.info("请求SAP失败 E_MSG:{}", E_MSG); +// return resMap; +// } +// } + /** * 调用ERP接口更新erp数据 */ -public ResponseEntity pushDataToErp(ErpSubmitReqDTO reqDTO) { - try { - // 构建完整URL - String url = "http://" + erpAddress + "/api/rfc/post"; - // 构建请求参数 - JSONObject requestBody = new JSONObject(); - requestBody.put("uuid", UUID.randomUUID().toString()); - 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()); - if (reqDTO.getSign() != null){ - requestBody.put("sign", reqDTO.getSign()); + public HashMap pushDataToErp(ErpSubmitReqDTO reqDTO) { + try { + // 构建完整URL + String url = "http://" + erpAddress + "/api/rfc/post"; + // 构建请求参数 + JSONObject requestBody = new JSONObject(); + requestBody.put("uuid", UUID.randomUUID().toString()); + 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()); + if (reqDTO.getSign() != null) { + requestBody.put("sign", reqDTO.getSign()); + } + if (reqDTO.getReq() != null) { + requestBody.put("req", reqDTO.getReq()); + } + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + // 创建HTTP请求实体 + HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); + + // 发送POST请求 + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); + + return postResult(response); + } catch (Exception e) { + log.error("调用ERP RFC接口失败:" + e.getMessage(), e); + return null; } - if (reqDTO.getReq() != null) { - requestBody.put("req", reqDTO.getReq()); - } - // 设置请求头 - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - // 创建HTTP请求实体 - HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); - - // 发送POST请求 - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); - - return response; - } catch (Exception e) { - log.error("调用ERP RFC接口失败:"+e.getMessage(), e); - return ResponseEntity.status(500).body("调用ERP接口失败: " + e.getMessage()); } -} + + // POST请求处理 + public HashMap postResult(ResponseEntity result) { + HashMap resMap = new HashMap<>(); + String E_RSLT = null; + + boolean succeed = result.getHeaders().containsKey("succeed"); +// JSONObject data = result.getBody("data"); +// if (data == null) { +// throw new RuntimeException("SAP接口返回值为空," + result.getMsg()); +// } else if (succeed && "S".equals(data.getString("E_FLAG"))) { +// String E_FLAG = data.getString("E_FLAG"); +// String flag = "S"; +// String E_RESP = data.getString("E_RESP"); +// String E_MSG = data.getString("ET_MSG"); +//// log.info("请求SAP成功 E_RESP:{}", E_RESP); +//// log.info("请求SAP成功 E_MSG:{}", E_MSG); +// resMap.put("E_RESP", E_RESP); +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +// return resMap; +// } else if (!succeed && "E".equals(data.getString("E_FLAG"))) { +// String E_FLAG = data.getString("E_FLAG"); +// String flag = "E"; +// String E_RESP = data.getString("E_DATA"); +// String E_MSG = data.getString("ET_MSG"); +// if (StrUtil.isBlank(E_MSG)) { +// E_MSG = result.getMsg(); +// E_MSG = "[{\"MESSAGE\":\"" + result.getMsg() + "\"}]"; +// } +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +//// log.info("请求SAP失败 E_MSG:{}", E_MSG); +// return resMap; +// } else { +// throw new RuntimeException("SAP接口异常," + result); +// } + return resMap; + } + //list public Map> numbers(JSONArray dataArray, String key, String dataKey) { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java index 098191d..a129747 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java @@ -104,7 +104,7 @@ public class ErpAssetController { @PostMapping("/getErpAssetTask") @Operation(summary = "定时获得erp更新资产卡片") @PreAuthorize("@ss.hasPermission('sply:erp-asset:create')") - public CommonResult getErpCompanyTask() { + public CommonResult getErpAssetTask() { erpAssetService.callErpRfcInterface(); return success(true); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java index a6bdae0..ee384cf 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java @@ -11,7 +11,7 @@ import java.math.BigDecimal; public class ErpProcessPageReqVO extends PageParam { @Schema(description = "工厂编码") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "物料编码") private String materialNumber; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java index e7f9c44..fb285f1 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java @@ -18,7 +18,7 @@ public class ErpProcessRespVO { @Schema(description = "工厂编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("工厂编码") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("物料编码") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java index b6ddd3c..b9dbe90 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java @@ -16,7 +16,7 @@ public class ErpProcessSaveReqVO { @Schema(description = "工厂编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "工厂编码不能为空") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "物料编码不能为空") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java index 18de83f..e55a72a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java @@ -34,7 +34,7 @@ public class ErpProcessDO { * 工厂编码 */ @TableField("FACT_NUM") - private BigDecimal factoryNumber; + private String factoryNumber; /** * 物料编码 */ @@ -63,7 +63,7 @@ public class ErpProcessDO { /** * 计量单位 */ - @TableField("UOM") + @TableField("UNT") private String uom; /** * 用途 diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java index 306f013..31b09f6 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java @@ -48,7 +48,7 @@ public class ErpProcessDetailDO { /** * 作业的计量单位 */ - @TableField("UOM") + @TableField("UNT") private String uom; /** * 工作中心编号 diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java index ee0ccce..7c3e518 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java @@ -312,8 +312,8 @@ public class ErpBomServiceImpl implements ErpBomService { items.add(item); req.put("item", items); reqDTO.setReq(req); - ResponseEntity response = erpExternalApi.submitDataToErp(reqDTO); - if (response.getStatusCode() == HttpStatus.OK) { + HashMap response = erpExternalApi.submitDataToErp(reqDTO); + if (response.get("result").isEmpty()) { log.info("ERP数据提交成功"); } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java index c1c1e32..472a12a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java @@ -3,16 +3,24 @@ package com.zt.plat.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.module.erp.common.conf.ErpConfig; +import com.zt.plat.module.erp.common.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailSaveReqVO; +import com.zt.plat.module.erp.dal.dataobject.erp.ErpBomDetailDO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpProcessDetailDO; import com.zt.plat.module.erp.dal.mysql.erp.ErpProcessDetailMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; 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.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PROCESS_DETAIL_NOT_EXISTS; @@ -29,6 +37,9 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { @Resource private ErpProcessDetailMapper erpProcessDetailMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpProcessDetailRespVO createErpProcessDetail(ErpProcessDetailSaveReqVO createReqVO) { // 插入 @@ -86,4 +97,92 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { return erpProcessDetailMapper.selectPage(pageReqVO); } + public void saveOrUpdateErpProcessDetail(List updateReqVOS) { + String key = "erpMap" + OftenEnum.FuncnrEnum.工艺路线.getFuncnr() + "Detail"; + // 1. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(updateReqVOS, key); + + // 2. 批量保存数据 + saveData(result); + } + + private ProcessingResult processData(List updateReqVOS, String key) { + if (erpConfig.getRedisCacheMap(key).isEmpty()) { + initializeMap(key); + } + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + + List dataArrayNumbers = new ArrayList<>(); + Map existingNumbers = erpConfig.getRedisCacheMap(key); + for (ErpProcessDetailDO updateReqVO : updateReqVOS) { + String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber().toEngineeringString(); + if (updateReqVO.getId() == null) { + toInsert.add(updateReqVO); + } else { + toUpdate.add(updateReqVO); + } + dataArrayNumbers.add(mapKey); + } + + Map deleteNumbers = new HashMap<>(); + for (Map.Entry entry : existingNumbers.entrySet()) { + if (!dataArrayNumbers.contains(entry.getKey())) { + deleteNumbers.put(entry.getKey(), entry.getValue()); + } + } + + return new ProcessingResult(toUpdate, toInsert, deleteNumbers, key); + } + + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpProcessDetailMapper.insertBatch(result.toInsert); + // 批量查询刚插入数据的id,提升效率 + List insertedRecords = erpProcessDetailMapper.selectList( + new LambdaQueryWrapperX() + .in(ErpProcessDetailDO::getProcessId, result.toInsert.stream().map(ErpProcessDetailDO::getProcessId).distinct().collect(Collectors.toList())) + .in(ErpProcessDetailDO::getProcessingNumber, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingNumber).distinct().collect(Collectors.toList())) + ); + Map numberIdMap = insertedRecords.stream() + .collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber(), ErpProcessDetailDO::getId)); + erpConfig.addRedisCacheMap(result.key, numberIdMap); + } + if (!result.toUpdate.isEmpty()) { + erpProcessDetailMapper.updateBatch(result.toUpdate); + } + if (!result.deleteNumbers.isEmpty()) { + // 使用流式处理和批处理优化删除逻辑 + List idsToDelete = new ArrayList<>(result.deleteNumbers.values()); + if (!idsToDelete.isEmpty()) { + erpProcessDetailMapper.deleteByIds(idsToDelete); + } + erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + } + } + + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final Map deleteNumbers; + private final String key; + + public ProcessingResult(List toUpdate, List toInsert, Map deleteNumbers, String key) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.deleteNumbers = deleteNumbers; + this.key = key; + } + } + + private void initializeMap(String key) { + List assets = erpProcessDetailMapper.selectList(new LambdaQueryWrapperX()); + Map existingNumbers = new HashMap<>(); + for (ErpProcessDetailDO asset : assets) { + String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber(); + existingNumbers.put(mapKey, asset.getId()); + } + erpConfig.addRedisCacheMap(key, existingNumbers); + } } \ 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/ErpProcessServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java index e5a73a5..967fdf5 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java @@ -3,12 +3,13 @@ package com.zt.plat.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.erp.common.conf.ErpConfig; import com.zt.plat.module.erp.common.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessSaveReqVO; -import com.zt.plat.module.erp.dal.dataobject.erp.ErpProcessDO; +import com.zt.plat.module.erp.dal.dataobject.erp.*; import com.zt.plat.module.erp.dal.dataobject.erp.ErpProcessDO; import com.zt.plat.module.erp.dal.mysql.erp.ErpProcessMapper; import com.alibaba.fastjson.JSONArray; @@ -20,10 +21,12 @@ 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 static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PROCESS_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -42,6 +45,10 @@ public class ErpProcessServiceImpl implements ErpProcessService { @Resource private ErpConfig erpConfig; + @Resource + private ErpProcessDetailServiceImpl processDetailService; + + @Override public ErpProcessRespVO createErpProcess(ErpProcessSaveReqVO createReqVO) { // 插入 @@ -69,12 +76,12 @@ public class ErpProcessServiceImpl implements ErpProcessService { } @Override - public void deleteErpProcessListByIds(List ids) { + public void deleteErpProcessListByIds(List ids) { // 校验存在 validateErpProcessExists(ids); // 删除 erpProcessMapper.deleteByIds(ids); - } + } private void validateErpProcessExists(List ids) { List list = erpProcessMapper.selectByIds(ids); @@ -104,16 +111,32 @@ public class ErpProcessServiceImpl implements ErpProcessService { @XxlJob("getErpProcessTask") public void callErpRfcInterface() { try { - OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.公司代码; + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.公司代码; String funcnr = funcnrEnum.getFuncnr(); + String key = "erpMap" + funcnr; + if (erpConfig.getRedisCacheMap(key).isEmpty()) { + initializeMap(key); + } + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); + Map redisCache = erpConfig.getRedisCacheMap(factKey); + if (CollUtil.isEmpty(redisCache)) { + throw exception(ERP_PROCESS_NOT_EXISTS); + } // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, null); - if (dataArray == null || dataArray.isEmpty()) { - return; + for (String factoryNumber : redisCache.keySet()) { + req.put("WERKS", factoryNumber); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); } // 2. 处理公司数据,区分新增和更新 - ProcessingResult result = processData(dataArray,funcnrEnum); + ProcessingResult result = processData(dataArrayALL, funcnrEnum); // 3. 批量保存数据 saveData(result); @@ -127,35 +150,65 @@ public class ErpProcessServiceImpl implements ErpProcessService { /** * 处理数据,区分新增和更新 */ - private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { - String key = "erp" + funcnr.getFuncnr(); - Map> numbers = erpConfig.numbers(dataArray, key,funcnr.getDatakey()); - List allnumbers = numbers.get("all"); - List comnumbers = numbers.get("com"); + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { + String key = "erpMap" + funcnrEnum.getFuncnr(); + Map numbers = erpConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); - List toInsert = new ArrayList<>(); + + List erpProcessDetailDOList = new ArrayList<>(); + Map addnumbers = new HashMap<>(); + List dataArrayNumbers = new ArrayList<>(); for (int i = 0; i < dataArray.size(); i++) { JSONObject dataJson = dataArray.getJSONObject(i); if (dataJson != null) { - String number = dataJson.getString("BUKRS").trim(); - if (number != null) { - ErpProcessDO DO = new ErpProcessDO(); -// DO.setName(dataJson.getString("BUTXT")); -// DO.setNumber(number); -// DO.setCurrency(dataJson.getString("WAERS")); - if (comnumbers.contains(number)) { - // 更新 - toUpdate.add(DO); - } else { - // 新增 - toInsert.add(DO); + ErpProcessDO DO = new ErpProcessDO(); + DO.setFactoryNumber(dataJson.getString("WERKS")); + DO.setMaterialNumber(dataJson.getString("MATNR")); + DO.setMaterialName(dataJson.getString("MAKTX")); + DO.setBlineGroup(dataJson.getString("PLNAL")); + DO.setGroupCount(dataJson.getLong("PLNNR")); + DO.setBlineDescription(dataJson.getString("KTEXT")); + DO.setUom(dataJson.getString("PLNME")); + DO.setUseDescription(dataJson.getString("VERWE")); + DO.setStatus(dataJson.getString("STATU")); + String number = DO.getFactoryNumber() + "-" + DO.getMaterialNumber() + "-" + DO.getBlineGroup(); + dataArrayNumbers.add(number); + if (numbers.get(number) != null) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + erpProcessMapper.insert(DO); + addnumbers.put(number, DO.getId()); + } + + JSONArray dataJsonItem = dataJson.getJSONArray("ITEM"); + if (dataJsonItem != null && !dataJsonItem.isEmpty()) { + for (int j = 0; j < dataJsonItem.size(); j++) { + JSONObject itemJson = dataJsonItem.getJSONObject(j); + ErpProcessDetailDO detailDO = new ErpProcessDetailDO(); + detailDO.setProcessId(String.valueOf(DO.getId())); + detailDO.setProcessingNumber(itemJson.getBigDecimal("VORNR")); + detailDO.setProcessingName(itemJson.getString("LTXA1")); + detailDO.setUom(itemJson.getString("MEINH")); + detailDO.setWorkCenterNumber(itemJson.getString("ARBPL")); + detailDO.setWorkCenterName(itemJson.getString("KTEXT1")); + erpProcessDetailDOList.add(detailDO); } } } } - return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + // 识别需要删除的数据 + List deleteNumbers = new ArrayList<>(); + for (String number : numbers.keySet()) { + if (!dataArrayNumbers.contains(number)) { + deleteNumbers.add(number); + } + } + + return new ProcessingResult(toUpdate, key, addnumbers, deleteNumbers, erpProcessDetailDOList); } /** @@ -163,13 +216,22 @@ public class ErpProcessServiceImpl implements ErpProcessService { */ private void saveData(ProcessingResult result) { // 批量新增和更新 - if (!result.toInsert.isEmpty()) { - erpProcessMapper.insertBatch(result.toInsert); - } if (!result.toUpdate.isEmpty()) { erpProcessMapper.updateBatch(result.toUpdate); } - erpConfig.updateRedisCache(result.key,result.allnumbers); + // 保存或更新BOM详情 + if (!result.erpProcessDetailDOList.isEmpty()) { + processDetailService.saveOrUpdateErpProcessDetail(result.erpProcessDetailDOList); + } + + // 更新Redis缓存 + if (!result.addnumbers.isEmpty()) { + erpConfig.addRedisCacheMap(result.key, result.addnumbers); + } + + if (!result.deleteNumbers.isEmpty()) { + erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + } } /** @@ -177,15 +239,28 @@ public class ErpProcessServiceImpl implements ErpProcessService { */ private static class ProcessingResult { private final List toUpdate; - private final List toInsert; private final String key; - private final List allnumbers; + private final Map addnumbers; + private final List deleteNumbers; + private final List erpProcessDetailDOList; - public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + public ProcessingResult(List toUpdate, String key, Map addnumbers, + List deleteNumbers, List erpProcessDetailDOList) { this.toUpdate = toUpdate; - this.toInsert = toInsert; this.key = key; - this.allnumbers = allnumbers; + this.addnumbers = addnumbers; + this.deleteNumbers = deleteNumbers; + this.erpProcessDetailDOList = erpProcessDetailDOList; } } + + private void initializeMap(String key) { + List bomList = erpProcessMapper.selectList(new LambdaQueryWrapperX()); + Map existingNumbers = new HashMap<>(); + for (ErpProcessDO bom : bomList) { + String mapKey = bom.getFactoryNumber() + "-" + bom.getMaterialNumber() + "-" + bom.getBlineGroup(); + existingNumbers.put(mapKey, bom.getId()); + } + erpConfig.addRedisCacheMap(key, existingNumbers); + } } \ No newline at end of file From 08e3b37e52ecd22acd53ded1abc6d173427c673f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Wed, 24 Sep 2025 15:57:05 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E6=A8=A1=E7=89=88=E7=BC=96=E5=88=B6?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/tmpltp/enums/DeleteStatusEnum.java | 39 ++++++++ .../tmpltp/enums/ErrorCodeConstants.java | 15 ++-- ...StatusEnum.java => PublishStatusEnum.java} | 30 +++---- .../plat/module/tmpltp/enums/TmplStsEnum.java | 34 +++++++ .../module/tmpltp/enums/UpdateStatusEnum.java | 39 ++++++++ .../templtp/TemplateInstanceController.java | 10 ++- .../vo/PublishTemplateInstanceReqVO.java | 16 ++++ .../tmpltp/TemplateInstanceService.java | 3 + .../tmpltp/TemplateInstanceServiceImpl.java | 90 ++++++++++++++++++- .../service/tmpltp/TmplTpServiceImpl.java | 33 ++++--- .../resources/mapper/tmpltp/TmplTpMapper.xml | 2 +- 11 files changed, 265 insertions(+), 46 deletions(-) create mode 100644 zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java rename zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/{StatusEnum.java => PublishStatusEnum.java} (55%) create mode 100644 zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java create mode 100644 zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/PublishTemplateInstanceReqVO.java diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java new file mode 100644 index 0000000..113da7e --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java @@ -0,0 +1,39 @@ +package com.zt.plat.module.tmpltp.enums; + +import java.util.HashSet; +import java.util.Set; + +public enum DeleteStatusEnum { + + STATUS_DRF(TmplStsEnum.DRAFT.getCode(), new HashSet<>() {{add(TmplStsEnum.STOPPED.getCode());}}), + STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()), + STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>()); + + + private final String code; + private final Set allowedTransitions; + + DeleteStatusEnum(String code, Set allowedTransitions) { + this.code = code; + this.allowedTransitions = allowedTransitions; + } + + /** + * 根据状态码获取对应的枚举实例 + */ + public static DeleteStatusEnum fromCode(String code) { + for (DeleteStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } + + /** + * 校验状态转换是否合法 + */ + public boolean isTransitionAllowed(String targetStatus) { + return allowedTransitions.contains(targetStatus); + } +} diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/ErrorCodeConstants.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/ErrorCodeConstants.java index cbfaec7..6b9efff 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/ErrorCodeConstants.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/ErrorCodeConstants.java @@ -14,14 +14,15 @@ public interface ErrorCodeConstants { ErrorCode TMPL_TP_DEl_ERROR = new ErrorCode(1_027_000_507, "模版分类删除失败"); ErrorCode TEMPLATE_INSTANCE_DATA_NOT_EXISTS = new ErrorCode(1_027_000_508, "实例字段值不存在"); ErrorCode TEMPLATE_INSTANCE_ITEM_NOT_EXISTS = new ErrorCode(1_027_000_509, "实例条款值不存在"); + ErrorCode TEMPLATE_INSTANCE_CREATE_FAIL = new ErrorCode(1_027_000_510, "实例创建失败"); ErrorCode PARAMS_IS_NULL_OR_ERR = new ErrorCode(1_027_000_510, "参数为空或参数错误"); - ErrorCode DEPARTMENT_INSTANCE_RELATIVITY_NOT_EXISTS = new ErrorCode(1_027_000_511, "部门与实例关联不存在"); - ErrorCode ILLEGAL_OPERATION_TYPE = new ErrorCode(1_027_000_511, "非法操作类型"); - ErrorCode OPERATION_FAIL= new ErrorCode(1_027_000_512, "操作失败"); - ErrorCode STATUS_OPERATION_FAIL= new ErrorCode(1_027_000_513, "当前状态不支持此操作"); - ErrorCode NOT_FOUND_CLASS= new ErrorCode(1_027_000_514, "找不到对应的类"); - ErrorCode UTIL_NOT_INIT= new ErrorCode(1_027_000_515, "工具类为未初始化"); - ErrorCode TMPL_INS_FLD_CODE_EXISTS = new ErrorCode(1_027_000_516, "字段已存在"); + ErrorCode DEPARTMENT_INSTANCE_RELATIVITY_NOT_EXISTS = new ErrorCode(1_027_000_512, "部门与实例关联不存在"); + ErrorCode ILLEGAL_OPERATION_TYPE = new ErrorCode(1_027_000_513, "非法操作类型"); + ErrorCode OPERATION_FAIL= new ErrorCode(1_027_000_514, "操作失败"); + ErrorCode STATUS_OPERATION_FAIL= new ErrorCode(1_027_000_515, "当前状态不支持此操作"); + ErrorCode NOT_FOUND_CLASS= new ErrorCode(1_027_000_516, "找不到对应的类"); + ErrorCode UTIL_NOT_INIT= new ErrorCode(1_027_000_517, "工具类为未初始化"); + ErrorCode TMPL_INS_FLD_CODE_EXISTS = new ErrorCode(1_027_000_518, "字段已存在"); //Illegal operation type } diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/StatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java similarity index 55% rename from zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/StatusEnum.java rename to zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java index 2871837..4a56aa9 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/StatusEnum.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java @@ -6,25 +6,23 @@ import java.util.Set; /** * 状态枚举类,定义所有可能的状态及合法的状态转换 */ -public enum StatusEnum { - // 定义所有状态及对应的合法转换目标状态 - STATUS_1("1", new HashSet() {{ - add("2"); - add("4"); +public enum PublishStatusEnum { + + STATUS_DRF(TmplStsEnum.DRAFT.getCode(), new HashSet<>() {{ + add(TmplStsEnum.DRAFT.getCode()); + add(TmplStsEnum.STOPPED.getCode()); }}), - STATUS_2("2", new HashSet() {{ - add("3"); - }}), - STATUS_3("3", new HashSet() {{ - add("4"); - add("2"); - }}), - STATUS_4("4", new HashSet<>()); // 没有合法的转换目标 + STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()), + STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>() {{ + add(TmplStsEnum.DRAFT.getCode()); + add(TmplStsEnum.STOPPED.getCode()); + }}); + private final String code; private final Set allowedTransitions; - StatusEnum(String code, Set allowedTransitions) { + PublishStatusEnum(String code, Set allowedTransitions) { this.code = code; this.allowedTransitions = allowedTransitions; } @@ -32,8 +30,8 @@ public enum StatusEnum { /** * 根据状态码获取对应的枚举实例 */ - public static StatusEnum fromCode(String code) { - for (StatusEnum status : values()) { + public static PublishStatusEnum fromCode(String code) { + for (PublishStatusEnum status : values()) { if (status.code.equals(code)) { return status; } diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java new file mode 100644 index 0000000..04d6407 --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java @@ -0,0 +1,34 @@ +package com.zt.plat.module.tmpltp.enums; + +import lombok.Getter; + +@Getter +public enum TmplStsEnum { + // 草稿状态 + DRAFT("DRF", "草稿"), + // 已发布状态 + PUBLISHED("PUB", "已发布"), + // 已停用状态 + STOPPED("STOP", "已停用"); + + // 获取状态编码 + private final String code; + // 获取状态描述 + private final String description; + + // 构造方法 + TmplStsEnum(String code, String description) { + this.code = code; + this.description = description; + } + + // 根据编码获取枚举实例 + public static TmplStsEnum getByCode(String code) { + for (TmplStsEnum status : TmplStsEnum.values()) { + if (status.getCode().equals(code)) { + return status; + } + } + return null; + } +} diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java new file mode 100644 index 0000000..398f9a0 --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java @@ -0,0 +1,39 @@ +package com.zt.plat.module.tmpltp.enums; + +import java.util.HashSet; +import java.util.Set; + +public enum UpdateStatusEnum { + + STATUS_DRF(TmplStsEnum.DRAFT.getCode(), new HashSet<>() {{add(TmplStsEnum.DRAFT.getCode());}}), + STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()), + STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>()); + + + private final String code; + private final Set allowedTransitions; + + UpdateStatusEnum(String code, Set allowedTransitions) { + this.code = code; + this.allowedTransitions = allowedTransitions; + } + + /** + * 根据状态码获取对应的枚举实例 + */ + public static UpdateStatusEnum fromCode(String code) { + for (UpdateStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } + + /** + * 校验状态转换是否合法 + */ + public boolean isTransitionAllowed(String targetStatus) { + return allowedTransitions.contains(targetStatus); + } +} diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java index fdd827e..7e96049 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java @@ -1,6 +1,7 @@ package com.zt.plat.module.base.controller.admin.templtp; +import com.zt.plat.module.base.controller.admin.templtp.vo.PublishTemplateInstanceReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstancePageReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceRespVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceSaveReqVO; @@ -136,5 +137,12 @@ public class TemplateInstanceController extends AbstractFileUploadController { ExcelUtils.write(response, "模板实例.xls", "数据", TemplateInstanceRespVO.class, BeanUtils.toBean(list, TemplateInstanceRespVO.class)); } - + //模版实例发布 + @PostMapping("/publish-batch") + @Operation(summary = "模版实例发布") + @PreAuthorize("@ss.hasPermission('bse:template-instance:publish')") + public CommonResult publishTemplateInstance(@Valid @RequestBody List publishReqVOS) { + templateInstanceService.publishTemplateInstance(publishReqVOS); + return success(true); + } } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/PublishTemplateInstanceReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/PublishTemplateInstanceReqVO.java new file mode 100644 index 0000000..4a04cc2 --- /dev/null +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/PublishTemplateInstanceReqVO.java @@ -0,0 +1,16 @@ +package com.zt.plat.module.base.controller.admin.templtp.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + + +@Schema(description = "管理后台 - 实例发布 Request VO") +@Data +public class PublishTemplateInstanceReqVO { + @Schema(description = "主键;需要发布的模版实例id,类型是长整型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "id不能为空") + private String id; + @Schema(description = "当前状态;对应模版状态字段sts。需要传当前记录的状态,非必传。类型是字符串", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String currentStatus; +} diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java index 77350d6..e8b207f 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java @@ -2,6 +2,7 @@ package com.zt.plat.module.base.service.tmpltp; import java.util.*; +import com.zt.plat.module.base.controller.admin.templtp.vo.PublishTemplateInstanceReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstancePageReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceRespVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceSaveReqVO; @@ -64,4 +65,6 @@ public interface TemplateInstanceService { PageResult getTemplateInstancePage(TemplateInstancePageReqVO pageReqVO); List getDeptByInstanId(Long instanId); + + void publishTemplateInstance(List publishReqVOS); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java index 3ec7b89..e2f2661 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java @@ -2,18 +2,25 @@ package com.zt.plat.module.base.service.tmpltp; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; +import com.zt.plat.module.base.controller.admin.templtp.vo.PublishTemplateInstanceReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstancePageReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceRespVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceSaveReqVO; import com.zt.plat.module.base.dal.dataobject.tmpltp.DepartmentInstanceRelativityDO; import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceDO; +import com.zt.plat.module.base.dal.dataobject.tmpltp.TmplTpDO; import com.zt.plat.module.base.dal.mysql.tmpltp.DepartmentInstanceRelativityMapper; import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceDataMapper; import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceItemMapper; import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceMapper; +import com.zt.plat.module.tmpltp.enums.DeleteStatusEnum; +import com.zt.plat.module.tmpltp.enums.PublishStatusEnum; +import com.zt.plat.module.tmpltp.enums.TmplStsEnum; +import com.zt.plat.module.tmpltp.enums.UpdateStatusEnum; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,8 +28,10 @@ import org.springframework.validation.annotation.Validated; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.tmpltp.enums.ErrorCodeConstants.*; @@ -53,8 +62,12 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { public TemplateInstanceRespVO createTemplateInstance(TemplateInstanceSaveReqVO createReqVO) { // 插入 TemplateInstanceDO templateInstance = BeanUtils.toBean(createReqVO, TemplateInstanceDO.class); - templateInstance.setVer("v1.0"); - templateInstanceMapper.insert(templateInstance); + templateInstance.setVer("v1.0"); //设置初始版本为v1.0 + templateInstance.setSts(TmplStsEnum.DRAFT.getCode());//设置初始状态为草稿 + int insert = templateInstanceMapper.insert(templateInstance); + if (insert <= 0) { + throw exception(TEMPLATE_INSTANCE_CREATE_FAIL); + } //构建使用部门 List departmentInstanceRelativityDOS = new ArrayList<>(); @@ -76,10 +89,13 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { // TemplateInstanceDO templateInstanceDO = templateInstanceMapper.selectById(updateReqVO.getId()); // //获取保存旧文件内容防止被更新 // String originalContent = templateInstanceDO.getOriginalContent(); + + //校验该记录能否被修改 + validateStatusCanUpdate(updateReqVO.getId()); // 更新 TemplateInstanceDO templateInstanceDO = templateInstanceMapper.selectById(updateReqVO.getId()); String sts = templateInstanceDO.getSts(); - if (!sts.equals("DRF")) { + if (!sts.equals( TmplStsEnum.DRAFT.getCode())) { throw exception(STATUS_OPERATION_FAIL); } @@ -94,19 +110,23 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { public void deleteTemplateInstance(Long id) { // 校验存在 validateTemplateInstanceExists(id); + validateStatusCanDelete(id); // 删除 //删除对应的字段和条款关系 //1、删除合同的与字段的关系 templateInstanceDataMapper.deleteByTemplateInstanceId(id); //2、删除条款与和他的关系 - templateInstanceDataMapper.deleteByTemplateInstanceId(id); + templateInstanceItemMapper.deleteByTemplateInstanceId(id); templateInstanceMapper.deleteById(id); } @Override + @Transactional public void deleteTemplateInstanceListByIds(List ids) { // 校验存在 validateTemplateInstanceExists(ids); + //校验当前模版能否被删除 + validateStatusCanDelete(ids); // 删除 templateInstanceMapper.deleteByIds(ids); } @@ -206,4 +226,66 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { .toList(); } + @Override + @Transactional + public void publishTemplateInstance(List publishReqVOS) { + // 校验当前状态是否能够进行发布 + publishReqVOS.forEach(reqVO -> { + String currentStatus = reqVO.getCurrentStatus(); + if (currentStatus.isEmpty()) { + currentStatus = templateInstanceMapper.selectById(reqVO.getId()).getSts(); + } + PublishStatusEnum status = PublishStatusEnum.fromCode(currentStatus); + boolean transitionAllowed = false; + if (status != null) { + transitionAllowed = status.isTransitionAllowed( TmplStsEnum.PUBLISHED.getCode()); + } + if (!transitionAllowed) { + throw exception(STATUS_OPERATION_FAIL); + } + }); + + templateInstanceMapper.update(new LambdaUpdateWrapper() + .in(TemplateInstanceDO::getId, publishReqVOS.stream() + .map(PublishTemplateInstanceReqVO::getId) + .collect(Collectors.toSet())) + .set(TemplateInstanceDO::getSts, TmplStsEnum.PUBLISHED.getCode())); + } + + private void validateStatusCanDelete(List ids) { + Set sts = templateInstanceMapper.selectByIds(ids).stream().map(TemplateInstanceDO::getSts).collect(Collectors.toSet()); + sts.forEach(status -> { + DeleteStatusEnum deleteStatusEnum = DeleteStatusEnum.fromCode(status); + boolean transitionAllowed = false; + if (deleteStatusEnum != null) { + transitionAllowed = deleteStatusEnum.isTransitionAllowed( TmplStsEnum.DRAFT.getCode()); + } + if (!transitionAllowed) { + throw exception(STATUS_OPERATION_FAIL); + } + }); + } + + private void validateStatusCanDelete(Long id) { + String sts = templateInstanceMapper.selectById(id).getSts(); + DeleteStatusEnum deleteStatusEnum = DeleteStatusEnum.fromCode(sts); + boolean transitionAllowed = false; + if (deleteStatusEnum != null) { + transitionAllowed = deleteStatusEnum.isTransitionAllowed(TmplStsEnum.DRAFT.getCode()); + } + if (!transitionAllowed) { + throw exception(STATUS_OPERATION_FAIL); + } + } + private void validateStatusCanUpdate(Long id) { + String sts = templateInstanceMapper.selectById(id).getSts(); + UpdateStatusEnum updateStatusEnum = UpdateStatusEnum.fromCode(sts); + boolean transitionAllowed = false; + if (updateStatusEnum != null) { + transitionAllowed = updateStatusEnum.isTransitionAllowed(sts); + } + if (!transitionAllowed) { + throw exception(STATUS_OPERATION_FAIL); + } + } } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java index f14a611..af878d6 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java @@ -11,7 +11,6 @@ import com.zt.plat.module.base.dal.dataobject.tmpltp.TmplTpFldDO; import com.zt.plat.module.base.dal.mysql.tmpltp.TmplFldRelMapper; import com.zt.plat.module.base.dal.mysql.tmpltp.TmplItmRelMapper; import com.zt.plat.module.base.dal.mysql.tmpltp.TmplTpMapper; -import com.zt.plat.module.tmpltp.enums.StatusEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -193,27 +192,27 @@ public class TmplTpServiceImpl extends ServiceImpl imple } - private boolean validateStatusUpdate(Long id, String status) { - TmplTpDO tmplTpDO = baseMapper.getTmplTpById(id); - String currentSts = tmplTpDO.getSts(); - - // 获取当前状态对应的枚举实例 - StatusEnum currentStatus = StatusEnum.fromCode(currentSts); - - // 如果当前状态不合法,直接返回false - if (currentStatus == null) { - return false; - } - - // 校验状态转换是否合法 - return currentStatus.isTransitionAllowed(status); - } +// private boolean validateStatusUpdate(Long id, String status) { +// TmplTpDO tmplTpDO = baseMapper.getTmplTpById(id); +// String currentSts = tmplTpDO.getSts(); +// +// // 获取当前状态对应的枚举实例 +// PublishStatusEnum currentStatus = PublishStatusEnum.fromCode(currentSts); +// +// // 如果当前状态不合法,直接返回false +// if (currentStatus == null) { +// return false; +// } +// +// // 校验状态转换是否合法 +// return currentStatus.isTransitionAllowed(status); +// } // private boolean validateStatusCanDelete(List ids) { // Set sts = listByIds(ids).stream().map(TmplTpDO::getSts).collect(Collectors.toSet()); // List result = new ArrayList<>(); // sts.forEach(status -> { -// StatusEnum currentStatus = StatusEnum.fromCode(status); +// PublishStatusEnum currentStatus = PublishStatusEnum.fromCode(status); // boolean transitionAllowed = false; // if (currentStatus != null) { // transitionAllowed = currentStatus.isTransitionAllowed(status); diff --git a/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml b/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml index bcaecee..3659758 100644 --- a/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml +++ b/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml @@ -26,7 +26,7 @@ + select + c.NUM as erpNumber, + c.NAME as erpName, + d.NAME as companyName, + d.ID as deptId, + d.LEADER_USER_ID as leaderUserId, + d.IS_COMPANY, + d.IS_GROUP, + d.PHONE, + d.EMAIL, + d.STATUS, + d.CREATOR + from + SPLY_CPN_REL r + left join SYSTEM_DEPT d on r.COMPANY_ID = d.ID + left join SPLY_ERP_CPN c on r.ERP_NUM = c.NUM + where r.DELETED = 0 + \ No newline at end of file diff --git a/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml b/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml index 49e0c8f..d4b82a9 100644 --- a/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml +++ b/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml @@ -9,4 +9,7 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + \ 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/ErpFactoryServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java index 95e81cc..039d8de 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 @@ -118,7 +118,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { String companykey = "erp" + OftenEnum.FuncnrEnum.公司代码.getFuncnr(); Map redisCache = erpConfig.getRedisCacheMap(companykey); if (CollUtil.isEmpty(redisCache)) { - return; + throw new RuntimeException("ERP公司代码缓存数据丢失,请重新同步公司代码"); } for (String companyNumber : redisCache.keySet()) { req.put("BUKRS", companyNumber); From a902e61b025dc2b11c8f41fae531474e80a16c41 Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Thu, 25 Sep 2025 14:54:26 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E9=87=91=E5=B1=9E=E5=85=83=E7=B4=A0?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=BB=A7=E6=89=BF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/base/controller/admin/base/vo/ElementSaveReqVO.java | 2 +- .../com/zt/plat/module/base/dal/dataobject/base/ElementDO.java | 3 ++- .../src/main/resources/mapper/base/ElementMapper.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/ElementSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/ElementSaveReqVO.java index 8741e4c..eafee0c 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/ElementSaveReqVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/ElementSaveReqVO.java @@ -20,7 +20,7 @@ public class ElementSaveReqVO { private String name; @Schema(description = "金属元素编码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "金属元素编码不能为空") +// @NotEmpty(message = "金属元素编码不能为空") private String coding; @Schema(description = "品位单位", requiredMode = Schema.RequiredMode.REQUIRED) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/ElementDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/ElementDO.java index 62dbcb4..66172eb 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/ElementDO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/ElementDO.java @@ -2,6 +2,7 @@ package com.zt.plat.module.base.dal.dataobject.base; import com.baomidou.mybatisplus.annotation.*; import com.zt.plat.framework.mybatis.core.dataobject.BaseDO; +import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import lombok.*; /** * 金属元素 DO @@ -19,7 +20,7 @@ import lombok.*; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ElementDO extends BaseDO { +public class ElementDO extends BusinessBaseDO { diff --git a/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml b/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml index d4b82a9..66316ee 100644 --- a/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml +++ b/zt-module-base/zt-module-base-server/src/main/resources/mapper/base/ElementMapper.xml @@ -10,6 +10,6 @@ --> \ No newline at end of file From 451db1f909a3bc0715a22b0db1481e543482e495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Thu, 25 Sep 2025 15:00:29 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E6=A8=A1=E7=89=88=E7=BC=96=E5=88=B6?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templtp/TemplateInstanceController.java | 9 +- .../vo/TemplateInstanceDataRespVO.java | 1 - .../vo/TemplateInstanceItemRespVO.java | 4 + .../templtp/vo/TemplateInstanceRespVO.java | 5 + .../dataobject/tmpltp/TemplateInstanceDO.java | 6 + .../tmpltp/TemplateInstanceService.java | 4 +- .../tmpltp/TemplateInstanceServiceImpl.java | 232 +++++++++++++----- 7 files changed, 197 insertions(+), 64 deletions(-) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java index d01ffbb..ab0b1f5 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java @@ -167,7 +167,14 @@ public class TemplateInstanceController extends AbstractFileUploadController { @PostMapping("/create-version") @Operation(summary = "创建版本") @PreAuthorize("@ss.hasPermission('bse:template-instance:create-version')") - public CommonResult createVersion(@Valid @NotEmpty(message = "模版实例") String id) { + public CommonResult createVersion(@Valid @NotEmpty(message = "模版实例id不能为空") String id) { return success(templateInstanceService.createVersion(id)); } + + //通过模版编码查看历史版本 + @GetMapping("/list-by-template-cdg") + @Operation(summary = "通过模版编码(cdg)查看历史版本",description = "通过模版编码查看历史版本,已按照发布时间和创建时间降序排序") + public CommonResult> listByTemplateCode(@RequestParam("cdg") @Valid @NotEmpty(message = "模版编号不能为空") String templateCode) { + return success(templateInstanceService.listByCdg(templateCode)); + } } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java index 3e41942..a744a72 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceDataRespVO.java @@ -31,5 +31,4 @@ public class TemplateInstanceDataRespVO { @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; - } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java index 9fb3f71..430a579 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceItemRespVO.java @@ -32,4 +32,8 @@ public class TemplateInstanceItemRespVO { @ExcelProperty("创建时间") private LocalDate createTime; + @Schema(description = "条款名", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("条款名") + private String itmName; + } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java index 96da62c..9cc4a28 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java @@ -56,6 +56,11 @@ public class TemplateInstanceRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "发布时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("发布时间") + private LocalDateTime publishTime; + + @Schema(description = "使用部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "") private List deptIds; @Schema(description = "实例字段;这个是实例字段绑定的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "") diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java index f38899d..3ea628d 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java @@ -68,6 +68,12 @@ public class TemplateInstanceDO extends BusinessBaseDO { * 状态 */ private String sts; + + + /** + * 发布时间 + */ + private LocalDateTime publishTime; // /** // * 公司编号 // */ diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java index d43028f..493ea66 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java @@ -77,7 +77,9 @@ public interface TemplateInstanceService { void setDisableOrEnable(@Valid DisableEnableReqVO reqVO); - TemplateInstanceRespVO createVersion(@Valid @NotEmpty(message = "模版实例") String id); + TemplateInstanceRespVO createVersion(@Valid @NotEmpty(message = "模版实例id不能为空") String id); Map getVersion(String id); + + List listByCdg(String cdg); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java index 4d8d8b4..f29d476 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java @@ -1,6 +1,9 @@ package com.zt.plat.module.base.service.tmpltp; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.fastjson2.util.DateUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zt.plat.framework.common.pojo.PageResult; @@ -10,15 +13,13 @@ import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.tenant.core.context.CompanyContextHolder; import com.zt.plat.module.base.controller.admin.templtp.vo.*; import com.zt.plat.module.base.dal.dataobject.tmpltp.*; -import com.zt.plat.module.base.dal.mysql.tmpltp.DepartmentInstanceRelativityMapper; -import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceDataMapper; -import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceItemMapper; -import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceMapper; +import com.zt.plat.module.base.dal.mysql.tmpltp.*; import com.zt.plat.module.tmpltp.enums.DeleteStatusEnum; import com.zt.plat.module.tmpltp.enums.PublishStatusEnum; import com.zt.plat.module.tmpltp.enums.TmplStsEnum; import com.zt.plat.module.tmpltp.enums.UpdateStatusEnum; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -37,6 +38,7 @@ import static com.zt.plat.module.tmpltp.enums.ErrorCodeConstants.*; * * @author 后台管理 */ +@Slf4j @Service @Validated public class TemplateInstanceServiceImpl implements TemplateInstanceService { @@ -58,7 +60,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { // 插入 TemplateInstanceDO templateInstance = BeanUtils.toBean(createReqVO, TemplateInstanceDO.class); templateInstance.setVer("v1.0"); //设置初始版本为v1.0 - templateInstance.setCdg(UUID.randomUUID().toString());//设置模板编码 + templateInstance.setCdg(getCdg());//设置初始编码 templateInstance.setSts(TmplStsEnum.DRAFT.getCode());//设置初始状态为草稿 int insert = templateInstanceMapper.insert(templateInstance); if (insert <= 0) { @@ -75,7 +77,9 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { }); departmentInstanceRelativityMapper.insertBatch(departmentInstanceRelativityDOS); // 插入使用范围 - return BeanUtils.toBean(templateInstance, TemplateInstanceRespVO.class); + TemplateInstanceRespVO templateInstanceRespVO = BeanUtils.toBean(templateInstance, TemplateInstanceRespVO.class); + templateInstanceRespVO.setDeptIds(createReqVO.getDeptIds()); + return templateInstanceRespVO; } @Override @@ -141,63 +145,96 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { } - private String incrementVersion(String currentVersion) { - // 处理空值或空字符串 - if (currentVersion == null || currentVersion.trim().isEmpty()) { - return "v1.0"; - } +// private String incrementVersion(String currentVersion) { +// // 处理空值或空字符串 +// if (currentVersion == null || currentVersion.trim().isEmpty()) { +// return "v1.0"; +// } +// +// String version = currentVersion.trim(); +// Matcher matcher = VERSION_PATTERN.matcher(version); +// +// if (!matcher.matches()) { +// // 没有找到数字部分,返回默认版本 +// return version + "1.0"; +// } +// +// String prefix = matcher.group(1); // 前缀部分(如 "v", "version-" 等) +// String numberPart = matcher.group(2); // 数字部分(如 "1.2.3") +// String suffix = matcher.group(3); // 后缀部分 +// +// // 分割数字部分 +// String[] segments = numberPart.split("\\."); +// +// // 从最后一段开始处理进位 +// boolean carry = true; // 初始需要加1 +// +// for (int i = segments.length - 1; i >= 0 && carry; i--) { +// try { +// int currentNumber = Integer.parseInt(segments[i]); +// currentNumber++; // 加1 +// +// if (currentNumber >= 10) { +// // 需要进位 +// segments[i] = "0"; +// carry = true; // 继续向前进位 +// } else { +// // 不需要进位 +// segments[i] = String.valueOf(currentNumber); +// carry = false; // 停止进位 +// } +// } catch (NumberFormatException e) { +// // 理论上不会发生,因为正则已经保证了是数字 +// segments[i] = "1"; +// carry = false; +// } +// } +// +// // 如果最高位也需要进位,在前面添加一段 +// if (carry) { +// String[] newSegments = new String[segments.length + 1]; +// newSegments[0] = "1"; +// System.arraycopy(segments, 0, newSegments, 1, segments.length); +// segments = newSegments; +// } +// +// // 重新组合版本号 +// String newNumberPart = String.join(".", segments); +// return prefix + newNumberPart + suffix; +// } +private String incrementVersion(String currentVersion) { + // 处理空值或空字符串 + if (currentVersion == null || currentVersion.trim().isEmpty()) { + return "v1"; + } - String version = currentVersion.trim(); - Matcher matcher = VERSION_PATTERN.matcher(version); + String version = currentVersion.trim(); + // 正则模式:前缀(可选) + 数字部分 + 后缀(可选) + // 数字部分匹配一个或多个数字 + Pattern VERSION_PATTERN = Pattern.compile("^([^0-9]*?)(\\d+)(.*)$"); + Matcher matcher = VERSION_PATTERN.matcher(version); - if (!matcher.matches()) { - // 没有找到数字部分,返回默认版本 - return version + "1.0"; - } + if (!matcher.matches()) { + // 没有找到数字部分,返回默认版本 + return version + "1"; + } - String prefix = matcher.group(1); // 前缀部分(如 "v", "version-" 等) - String numberPart = matcher.group(2); // 数字部分(如 "1.2.3") - String suffix = matcher.group(3); // 后缀部分 + String prefix = matcher.group(1); // 前缀部分(如 "v", "version-" 等) + String numberPart = matcher.group(2); // 数字部分(如 "1", "123") + String suffix = matcher.group(3); // 后缀部分 - // 分割数字部分 - String[] segments = numberPart.split("\\."); - - // 从最后一段开始处理进位 - boolean carry = true; // 初始需要加1 - - for (int i = segments.length - 1; i >= 0 && carry; i--) { - try { - int currentNumber = Integer.parseInt(segments[i]); - currentNumber++; // 加1 - - if (currentNumber >= 10) { - // 需要进位 - segments[i] = "0"; - carry = true; // 继续向前进位 - } else { - // 不需要进位 - segments[i] = String.valueOf(currentNumber); - carry = false; // 停止进位 - } - } catch (NumberFormatException e) { - // 理论上不会发生,因为正则已经保证了是数字 - segments[i] = "1"; - carry = false; - } - } - - // 如果最高位也需要进位,在前面添加一段 - if (carry) { - String[] newSegments = new String[segments.length + 1]; - newSegments[0] = "1"; - System.arraycopy(segments, 0, newSegments, 1, segments.length); - segments = newSegments; - } + try { + // 将数字部分解析为整数并加1 + int number = Integer.parseInt(numberPart); + number++; // 重新组合版本号 - String newNumberPart = String.join(".", segments); - return prefix + newNumberPart + suffix; + return prefix + number + suffix; + } catch (NumberFormatException e) { + // 解析数字格式异常时的 fallback + return prefix + "1" + suffix; } +} @Override @@ -267,10 +304,52 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { TemplateInstanceDO newTpInstanceDO = BeanUtils.toBean(templateInstanceDO, TemplateInstanceDO.class); newTpInstanceDO.setId(null); newTpInstanceDO.setVer(incrementVersion(templateInstanceDO.getVer())); + newTpInstanceDO.setCreateTime(null); + newTpInstanceDO.setUpdateTime(null); + templateInstanceMapper.insert(newTpInstanceDO); templateInstanceMapper.update(new LambdaUpdateWrapper() .set(TemplateInstanceDO::getSts,TmplStsEnum.STOPPED.getCode()) .eq(TemplateInstanceDO::getId, id)); - return BeanUtils.toBean(newTpInstanceDO, TemplateInstanceRespVO.class); + List templateInstanceDataDOS = new ArrayList<>(); + List templateInstanceItemDOS =new ArrayList<>(); + List newDepartmentInstanceRelativityDOS = new ArrayList<>(); + //设置部门 + List departmentInstanceRelativityDOS = departmentInstanceRelativityMapper + .selectList(new LambdaQueryWrapper() + .eq(DepartmentInstanceRelativityDO::getTemplateInstanceId, id)); + departmentInstanceRelativityDOS.forEach(departmentInstanceRelativityDO -> { + DepartmentInstanceRelativityDO newDepartmentInstanceRelativityDO = new DepartmentInstanceRelativityDO(); + newDepartmentInstanceRelativityDO.setTemplateInstanceId(String.valueOf(newTpInstanceDO.getId())); + newDepartmentInstanceRelativityDO.setCompanyDepartmentId(departmentInstanceRelativityDO.getCompanyDepartmentId()); + newDepartmentInstanceRelativityDOS.add(newDepartmentInstanceRelativityDO); + }); + //设置条款 + templateInstanceItemMapper.selectList(new LambdaQueryWrapper() + .eq(TemplateInstanceItemDO::getInscId, id)).forEach(templateInstanceItemDO -> { + TemplateInstanceItemDO newTemplateInstanceItemDO = new TemplateInstanceItemDO(); + newTemplateInstanceItemDO.setInscId(String.valueOf(newTpInstanceDO.getId())); + newTemplateInstanceItemDO.setItmId(templateInstanceItemDO.getItmId()); + newTemplateInstanceItemDO.setVal(templateInstanceItemDO.getVal()); + templateInstanceItemDOS.add(newTemplateInstanceItemDO); + }); + //设置实例字段 + templateInstanceDataMapper.selectList(new LambdaQueryWrapper() + .eq(TemplateInstanceDataDO::getInscId, id)).forEach(templateInstanceDataDO -> { + TemplateInstanceDataDO newTemplateInstanceDataDO = new TemplateInstanceDataDO(); + newTemplateInstanceDataDO.setInscId(String.valueOf(newTpInstanceDO.getId())); + newTemplateInstanceDataDO.setFldKy(templateInstanceDataDO.getFldKy()); + newTemplateInstanceDataDO.setFldVal(templateInstanceDataDO.getFldVal()); + templateInstanceDataDOS.add(newTemplateInstanceDataDO); + }); + templateInstanceDataMapper.insertBatch(templateInstanceDataDOS); + log.info("==================实例字段插入成功,共插入【{}】条记录==================", templateInstanceDataDOS.size()); + templateInstanceItemMapper.insertBatch(templateInstanceItemDOS); + log.info("==================条款插入成功,共插入【{}】条记录==================", templateInstanceItemDOS.size()); + departmentInstanceRelativityMapper.insertBatch(newDepartmentInstanceRelativityDOS); + log.info("==================部门实例关系插入成功,共插入【{}】条记录==================", newDepartmentInstanceRelativityDOS.size()); + TemplateInstanceRespVO templateInstanceRespVO = BeanUtils.toBean(newTpInstanceDO, TemplateInstanceRespVO.class); + getDetailedInfo(templateInstanceRespVO); + return templateInstanceRespVO; } @Override @@ -279,12 +358,26 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { return Map.of("version", templateInstanceMapper.selectById(id).getVer()); } + @Override + public List listByCdg(String cdg) { + List templateInstanceDOS = templateInstanceMapper.selectList( + new LambdaQueryWrapper() + .eq(TemplateInstanceDO::getCdg, cdg) + .eq(TemplateInstanceDO::getCompanyId, CompanyContextHolder.getCompanyId()) + .orderByDesc(TemplateInstanceDO::getPublishTime) + .orderByDesc(TemplateInstanceDO::getCreateTime) + ); + List templateInstanceRespVOS = BeanUtils.toBean(templateInstanceDOS, TemplateInstanceRespVO.class); + templateInstanceRespVOS.forEach(this::getDetailedInfo); + return templateInstanceRespVOS; + } + @Override public void getDetailedInfo(TemplateInstanceRespVO templateInstanceRespVO) { - templateInstanceRespVO.setDeptIds(getDeptByInstanId(templateInstanceRespVO.getId())); - templateInstanceRespVO.setInstanceItemRespVOS(setInstanceItemRespVOS(templateInstanceRespVO.getId())); - templateInstanceRespVO.setTemplateInstanceDataRespVOS(setTemplateInstanceDataRespVOS(templateInstanceRespVO.getId())); + templateInstanceRespVO.setDeptIds(getDeptByInstanId(templateInstanceRespVO.getId())); // 部门 + templateInstanceRespVO.setInstanceItemRespVOS(setInstanceItemRespVOS(templateInstanceRespVO.getId())); // 条款 + templateInstanceRespVO.setTemplateInstanceDataRespVOS(setTemplateInstanceDataRespVOS(templateInstanceRespVO.getId())); // 实例字段 } // 实例条款值 @@ -292,7 +385,21 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { List templateInstanceItemDOS = templateInstanceItemMapper.selectList(new LambdaQueryWrapper() .eq(TemplateInstanceItemDO::getInscId, id) .eq(TemplateInstanceItemDO::getCompanyId, CompanyContextHolder.getCompanyId())); - return BeanUtils.toBean(templateInstanceItemDOS, TemplateInstanceItemRespVO.class); + List templateInstanceItemRespVOS = BeanUtils.toBean(templateInstanceItemDOS, TemplateInstanceItemRespVO.class); + TmplItmMapper tmplItmMapper = SpringUtil.getBean(TmplItmMapper.class); + List ids = templateInstanceItemRespVOS.stream().map(TemplateInstanceItemRespVO::getItmId).toList(); + if (ids.isEmpty()){ + return templateInstanceItemRespVOS; + } + List tmplItmDOS = tmplItmMapper.selectByIds(ids); + tmplItmDOS.forEach(tmplItmDO -> { + templateInstanceItemRespVOS.forEach(templateInstanceItemRespVO -> { + if (templateInstanceItemRespVO.getItmId().equals(tmplItmDO.getId())) { + templateInstanceItemRespVO.setItmName(tmplItmDO.getItmName()); + } + }); + }); + return templateInstanceItemRespVOS ; } // 实例数据 @@ -339,4 +446,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { throw exception(STATUS_OPERATION_FAIL); } } + private String getCdg(){ + return "TP" + DateUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomUtil.randomNumbers(4); + } } From df4be30cf3bea088de6035520bf3bb8c2d8fd376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Thu, 25 Sep 2025 15:03:39 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E6=A8=A1=E7=89=88=E7=BC=96=E5=88=B6?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/templtp/TemplateInstanceController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java index ab0b1f5..f0c765d 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java @@ -142,9 +142,9 @@ public class TemplateInstanceController extends AbstractFileUploadController { @PreAuthorize("@ss.hasPermission('bse:template-instance:query')") public CommonResult> listExcludingDisabled(@Valid TemplateInstancePageReqVO pageReqVO) { PageResult templateInstanceRespVOPageResult = BeanUtils.toBean(templateInstanceService.listExcludingDisabled(pageReqVO), TemplateInstanceRespVO.class); - templateInstanceRespVOPageResult.getList().forEach(templateInstanceRespVO -> { - templateInstanceService.getDetailedInfo(templateInstanceRespVO); - }); + templateInstanceRespVOPageResult.getList().forEach( + templateInstanceRespVO -> + templateInstanceService.getDetailedInfo(templateInstanceRespVO)); return success(templateInstanceRespVOPageResult); } From 26bdf3cbdf9998e6cc3951885281b24df056a02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Thu, 25 Sep 2025 15:09:05 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E6=A8=A1=E7=89=88=E7=BC=96=E5=88=B6?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java index 904c839..b2eb6bc 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/tmpltp/TemplateInstanceDO.java @@ -6,6 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import lombok.*; + +import java.time.LocalDateTime; + /** * 模板实例 DO * From 327fd9bdcb5d797246edf81706ddf83d920f8e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Thu, 25 Sep 2025 15:12:10 +0800 Subject: [PATCH 20/21] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E5=B8=83=E6=97=B6=E9=97=B4=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/base/service/tmpltp/TemplateInstanceServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java index a15aa00..9f4223b 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java @@ -23,6 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -303,6 +304,7 @@ private String incrementVersion(String currentVersion) { TemplateInstanceDO newTpInstanceDO = BeanUtils.toBean(templateInstanceDO, TemplateInstanceDO.class); newTpInstanceDO.setId(null); newTpInstanceDO.setVer(incrementVersion(templateInstanceDO.getVer())); + newTpInstanceDO.setPublishTime(LocalDateTime.now()); newTpInstanceDO.setCreateTime(null); newTpInstanceDO.setUpdateTime(null); templateInstanceMapper.insert(newTpInstanceDO); From ff18060b065cb22891829f4ee6660084c39f86eb Mon Sep 17 00:00:00 2001 From: guojunyun Date: Thu, 25 Sep 2025 15:27:50 +0800 Subject: [PATCH 21/21] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=88=E5=90=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/{contract => }/DateConstants.java | 2 +- ...eConstants.java => DictTypeConstants.java} | 4 +- .../enums/ErrorCodeConstants.java | 2 + .../enums/TableFieldConstants.java | 58 +++++ .../admin/contract/ContractController.java | 3 +- .../vo/contract/ContractFormulaSaveReqVO.java | 5 +- .../vo/contract/ContractPriceSaveReqVO.java | 2 +- .../vo/contract/ContractSaveReqVO.java | 2 +- .../contract/ContractViewFormulaRespVO.java | 2 +- .../vo/contract/ContractViewPriceRespVO.java | 2 +- .../contract/ContractFormulaDO.java | 9 +- .../dataobject/contract/ContractPriceDO.java | 4 +- .../service/contract/ContractService.java | 10 +- .../service/contract/ContractServiceImpl.java | 243 +++++++++++++++++- 14 files changed, 320 insertions(+), 28 deletions(-) rename zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/{contract => }/DateConstants.java (69%) rename zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/{contract/ContractDictTypeConstants.java => DictTypeConstants.java} (69%) create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DateConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/DateConstants.java similarity index 69% rename from zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DateConstants.java rename to zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/DateConstants.java index b321407..6b9854d 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DateConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/DateConstants.java @@ -1,4 +1,4 @@ -package com.zt.plat.module.contractorder.enums.contract; +package com.zt.plat.module.contractorder.enums; public class DateConstants { diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/ContractDictTypeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/DictTypeConstants.java similarity index 69% rename from zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/ContractDictTypeConstants.java rename to zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/DictTypeConstants.java index 496af54..05c0572 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/ContractDictTypeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/DictTypeConstants.java @@ -1,11 +1,11 @@ -package com.zt.plat.module.contractorder.enums.contract; +package com.zt.plat.module.contractorder.enums; /** * 合同字典类型常量 * * @author ZT */ -public class ContractDictTypeConstants { +public class DictTypeConstants { // 合同状态 public static String BSE_CTRT_STS = "BSE_CTRT_STS"; diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java index f70d548..d6a9ba0 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java @@ -16,4 +16,6 @@ public interface ErrorCodeConstants { ErrorCode CONTRACT_NAME_EXISTS = new ErrorCode(1_027_000_001, "合同名已存在"); ErrorCode CONTRACT_PAPER_NUMBER_EXISTS = new ErrorCode(1_027_000_002, "合同编号已存在"); ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(1_027_000_003, "合同不存在"); + ErrorCode CONTRACT_ID_NOT_EXISTS = new ErrorCode(1_027_000_004, "合同主键为空"); + ErrorCode CONTRACT_STATUS_NOT_UPDATE = new ErrorCode(1_027_000_004, "{}合同不允许修改"); } diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java new file mode 100644 index 0000000..41684a4 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java @@ -0,0 +1,58 @@ +package com.zt.plat.module.contractorder.enums; + +/** + * 表字段常量 + * + * @author ZT + */ +public class TableFieldConstants { + + // 表主键 + public static final String ID = "ID"; + + /* 合同主信息表 */ + // 合同名称;与ERP(HTMC)对应,校验唯一 + public static final String BSE_CTRT_MAIN_CTRT_NAME = "CTRT_NAME"; + // 合同编号;与ERP(HTBH)对应,校验唯一 + public static final String BSE_CTRT_MAIN_CTRT_PPR_NUM = "CTRT_PPR_NUM"; + + /* 合同明细表 */ + // 合同主信息主键 + public static final String BSE_CTRT_DTL_CTRT_MAIN_ID = "CTRT_MAIN_ID"; + + /* 交货计划条款表 */ + // 合同明细主键 + public static final String BSE_CTRT_PLN_CTRT_DTL_ID = "CTRT_DTL_ID"; + + /* 价款结算条款表 */ + // 合同明细主键 + public static final String BSE_CTRT_FMU_CTRT_DTL_ID = "CTRT_DTL_ID"; + + /* 基础系数配置表 */ + // 条款主键 + public static final String BSE_CTRT_COEF_FMU_ID = "FMU_ID"; + + /* 品位等级价配置表 */ + // 条款主键 + public static final String BSE_CTRT_GRD_FMU_ID = "FMU_ID"; + + /* 调整价配置表 */ + // 条款主键 + public static final String BSE_CTRT_DDCT_FMU_ID = "FMU_ID"; + + /* 市场价配置表 */ + // 条款主键 + public static final String BSE_CTRT_PRC_FMU_ID = "FMU_ID"; + + /* 品位不计价配置表 */ + // 条款主键 + public static final String BSE_CTRT_NT_FMU_ID = "FMU_ID"; + + /* 实例字段值表 */ + // 关联实例主键 + public static final String BSE_TMPL_INSC_DAT_INSC_ID = "INSC_ID"; + + /* 实例条款值表 */ + // 关联实例主键 + public static final String BSE_TMPL_INSC_ITM_INSC_ID = "INSC_ID"; +} diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java index 4af08ea..a9908df 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java @@ -57,12 +57,11 @@ public class ContractController implements BusinessControllerMarker { return success(contractViewRespVO); } - // TODO @PutMapping("update") @Operation(summary = "修改合同") @PreAuthorize("@ss.hasPermission('system:contract:update')") public CommonResult update(@Valid @RequestBody ContractSaveReqVO reqVO) { - return success(true); + return success(contractService.update(reqVO)); } // TODO diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java index 0f60fc3..f96295c 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java @@ -33,7 +33,7 @@ public class ContractFormulaSaveReqVO { private String materialNumber; @Schema(description = "计算小数位") - private Long decimalBit; + private Long decimalPoint; @Schema(description = "金属元素编码") private String elementNumber; @@ -44,6 +44,9 @@ public class ContractFormulaSaveReqVO { @Schema(description = "金属元素名称", example = "金属元素名称") private String elementName; + @Schema(description = "结算类型,多条使用逗号分隔(字典:PRCH_STLM_TP)", example = "LST") + private String settlementType; + // 基础系数配置 private List coefficients; // 品位等级价配置 diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPriceSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPriceSaveReqVO.java index 8c6faa0..6a0c197 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPriceSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPriceSaveReqVO.java @@ -49,5 +49,5 @@ public class ContractPriceSaveReqVO { private String averageType; @Schema(description = "网价小数位") - private BigDecimal decimalBit; + private BigDecimal decimalPoint; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java index 355faea..6dfdf33 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java @@ -15,7 +15,7 @@ import java.util.List; @Data public class ContractSaveReqVO { - @Schema(description = "主键") + @Schema(description = "主键,新增时为空,修改时需要有值") @ExcelProperty("主键") private Long id; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java index e0f2c8a..ae04390 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java @@ -30,7 +30,7 @@ public class ContractViewFormulaRespVO { private String materialNumber; @Schema(description = "计算小数位") - private Long decimalBit; + private Long decimalPoint; @Schema(description = "金属元素编码") private String elementNumber; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewPriceRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewPriceRespVO.java index 1789b44..ad519ee 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewPriceRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewPriceRespVO.java @@ -49,5 +49,5 @@ public class ContractViewPriceRespVO { private String averageType; @Schema(description = "网价小数位") - private BigDecimal decimalBit; + private BigDecimal decimalPoint; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java index 4dda223..2c92df2 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java @@ -60,8 +60,8 @@ public class ContractFormulaDO extends BusinessBaseDO { /** * 计算小数位 */ - @TableField("DEC") - private Long decimalBit; + @TableField("DEC_PNT") + private Long decimalPoint; /** * 金属元素编码 */ @@ -77,4 +77,9 @@ public class ContractFormulaDO extends BusinessBaseDO { */ @TableField("ELEM_NAME") private String elementName; + /** + * 结算类型,多条使用逗号分隔(字典:PRCH_STLM_TP) + */ + @TableField("STLM_TP") + private String settlementType; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java index 80b8013..f7f2017 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractPriceDO.java @@ -93,6 +93,6 @@ public class ContractPriceDO extends BusinessBaseDO { /** * 网价小数位 */ - @TableField("DEC") - private BigDecimal decimalBit; + @TableField("DEC_PNT") + private BigDecimal decimalPoint; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java index e9aed34..bcaeb4f 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java @@ -25,7 +25,7 @@ public interface ContractService { /** * 新增合同 * - * @param reqVO 用户信息 + * @param reqVO 合同信息 * @return 合同ID */ Long createContract(@Valid ContractSaveReqVO reqVO); @@ -37,4 +37,12 @@ public interface ContractService { * @return 合同信息 */ ContractViewRespVO get(Long id); + + /** + * 修改合同 + * + * @param reqVO 合同信息 + * @return 修改结果 + */ + Boolean update(@Valid ContractSaveReqVO reqVO); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java index e85de9d..663604d 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java @@ -14,8 +14,9 @@ import com.zt.plat.module.base.service.tmpltp.TemplateInstanceDataService; import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.*; import com.zt.plat.module.contractorder.dal.dataobject.contract.*; import com.zt.plat.module.contractorder.dal.mysql.contract.*; +import com.zt.plat.module.contractorder.enums.TableFieldConstants; import com.zt.plat.module.contractorder.enums.contract.ContractStatusEnum; -import com.zt.plat.module.contractorder.enums.contract.DateConstants; +import com.zt.plat.module.contractorder.enums.DateConstants; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -74,14 +75,16 @@ public class ContractServiceImpl implements ContractService { public Long createContract(ContractSaveReqVO reqVO) { // 校验合同名称是否存在 - ContractMainDO contract = contractMainMapper.selectOne("CTRT_NAME", reqVO.getContractName()); + ContractMainDO contract = contractMainMapper + .selectOne(TableFieldConstants.BSE_CTRT_MAIN_CTRT_NAME, reqVO.getContractName()); if (contract != null) { throw exception(CONTRACT_NAME_EXISTS); } if (StringUtils.isNotEmpty(reqVO.getContractPaperNumber())) { // 校验合同编号是否存在 - contract = contractMainMapper.selectOne("CTRT_PPR_NUM", reqVO.getContractPaperNumber()); + contract = contractMainMapper + .selectOne(TableFieldConstants.BSE_CTRT_MAIN_CTRT_PPR_NUM, reqVO.getContractPaperNumber()); if (contract != null) { throw exception(CONTRACT_PAPER_NUMBER_EXISTS); } @@ -228,20 +231,21 @@ public class ContractServiceImpl implements ContractService { // 查询并设置物料信息 List detailDOS = contractDetailMapper - .selectList("CTRT_MAIN_ID", contractMainDO.getId()); + .selectList(TableFieldConstants.BSE_CTRT_DTL_CTRT_MAIN_ID, contractMainDO.getId()); if (detailDOS != null && !detailDOS.isEmpty()) { respVO.setDetail(BeanUtils.toBean(detailDOS, ContractViewDetailRespVO.class)); respVO.getDetail().forEach(detail -> { // 查询并设置交货计划 - List planDOS = contractPlanMapper.selectList("CTRT_DTL_ID", detail.getId()); + List planDOS = contractPlanMapper + .selectList(TableFieldConstants.BSE_CTRT_PLN_CTRT_DTL_ID, detail.getId()); if (planDOS != null && !planDOS.isEmpty()) { detail.setPlans(BeanUtils.toBean(planDOS, ContractViewPlanRespVO.class)); } // 查询并设置价款结算条款 List formulaDOS = contractFormulaMapper - .selectList("CTRT_DTL_ID", detail.getId()); + .selectList(TableFieldConstants.BSE_CTRT_FMU_CTRT_DTL_ID, detail.getId()); if (formulaDOS != null && !formulaDOS.isEmpty()) { detail.setFormulas(BeanUtils.toBean(formulaDOS, ContractViewFormulaRespVO.class)); @@ -249,27 +253,31 @@ public class ContractServiceImpl implements ContractService { // 查询并设置基础系数配置 List coefficientDOS = contractCoefficientMapper - .selectList("FMU_ID", formula.getId()); + .selectList(TableFieldConstants.BSE_CTRT_COEF_FMU_ID, formula.getId()); if (coefficientDOS != null && !coefficientDOS.isEmpty()) { formula.setCoefficients(BeanUtils.toBean(coefficientDOS, ContractViewCoefficientRespVO.class)); } // 查询并设置品位等级价配置 - List gradeDOS = contractGradeMapper.selectList("FMU_ID", formula.getId()); + List gradeDOS = contractGradeMapper + .selectList(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formula.getId()); if (gradeDOS != null && !gradeDOS.isEmpty()) { formula.setGrades(BeanUtils.toBean(gradeDOS, ContractViewGradeRespVO.class)); } // 查询并设置调整价配置 - List deductDOS = contractDeductMapper.selectList("FMU_ID", formula.getId()); + List deductDOS = contractDeductMapper + .selectList(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formula.getId()); if (deductDOS != null && !deductDOS.isEmpty()) { formula.setDeducts(BeanUtils.toBean(deductDOS, ContractViewDeductRespVO.class)); } // 查询并设置市场价配置 - List priceDOS = contractPriceMapper.selectList("FMU_ID", formula.getId()); + List priceDOS = contractPriceMapper + .selectList(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formula.getId()); if (priceDOS != null && !priceDOS.isEmpty()) { formula.setPrices(BeanUtils.toBean(priceDOS, ContractViewPriceRespVO.class)); } // 查询并设置品位不计价配置 - List notDOS = contractNotMapper.selectList("FMU_ID", formula.getId()); + List notDOS = contractNotMapper + .selectList(TableFieldConstants.BSE_CTRT_NT_FMU_ID, formula.getId()); if (notDOS != null && !notDOS.isEmpty()) { formula.setNots(BeanUtils.toBean(notDOS, ContractViewNotRespVO.class)); } @@ -280,14 +288,14 @@ public class ContractServiceImpl implements ContractService { // 查询并设置合同动态表单 List templateInstanceDataDOS = templateInstanceDataMapper - .selectList("INSC_ID", contractMainDO.getInstanceId()); + .selectList(TableFieldConstants.BSE_TMPL_INSC_DAT_INSC_ID, contractMainDO.getInstanceId()); if (templateInstanceDataDOS != null && !templateInstanceDataDOS.isEmpty()) { respVO.setDynamicsFields(BeanUtils.toBean(templateInstanceDataDOS, TemplateInstanceDataRespVO.class)); } // 查询并设置合同动态条款 List templateInstanceItemDOS = templateInstanceItemMapper - .selectList("INSC_ID", contractMainDO.getInstanceId()); + .selectList(TableFieldConstants.BSE_TMPL_INSC_ITM_INSC_ID, contractMainDO.getInstanceId()); if (templateInstanceItemDOS != null && !templateInstanceItemDOS.isEmpty()) { respVO.setDynamicsItems(BeanUtils.toBean(templateInstanceItemDOS, TemplateInstanceItemRespVO.class)); } @@ -295,6 +303,215 @@ public class ContractServiceImpl implements ContractService { return respVO; } + @Transactional + @Override + public Boolean update(ContractSaveReqVO reqVO) { + + // 校验合同主键是否存在 + Long id = reqVO.getId(); + if (id == null) { + throw exception(CONTRACT_ID_NOT_EXISTS); + } + + // 查询合同是否存在 + ContractMainDO oldContractMainDO = contractMainMapper.selectById(id); + if (contractMainMapper.selectById(id) == null) { + throw exception(CONTRACT_NOT_EXISTS); + } + + // 校验合同名称是否重复 + ContractMainDO contract = contractMainMapper.selectOne(new QueryWrapper() + .eq(TableFieldConstants.BSE_CTRT_MAIN_CTRT_NAME, reqVO.getContractName()) + .ne(TableFieldConstants.ID, id)); + if (contract != null) { + throw exception(CONTRACT_NAME_EXISTS); + } + + if (StringUtils.isNotEmpty(reqVO.getContractPaperNumber())) { + // 校验合同编号是否存在 + contract = contractMainMapper.selectOne(new QueryWrapper() + .eq(TableFieldConstants.BSE_CTRT_MAIN_CTRT_PPR_NUM, reqVO.getContractPaperNumber()) + .ne(TableFieldConstants.ID, id)); + if (contract != null) { + throw exception(CONTRACT_PAPER_NUMBER_EXISTS); + } + } + + // 合同状态校验 + if (ContractStatusEnum.DELETED.getCode().equals(oldContractMainDO.getStatus()) + || ContractStatusEnum.ARCHIVED.getCode().equals(oldContractMainDO.getStatus()) + || ContractStatusEnum.TERMINATED.getCode().equals(oldContractMainDO.getStatus()) + || ContractStatusEnum.IN_PROGRESS.getCode().equals(oldContractMainDO.getStatus()) + || ContractStatusEnum.UNDER_REVIEW.getCode().equals(oldContractMainDO.getStatus())) { + + throw exception(CONTRACT_STATUS_NOT_UPDATE, + ContractStatusEnum.valueOf(oldContractMainDO.getStatus()).getLabel()); + } + + // 请求更新的合同信息 + ContractMainDO newContractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class); + + // 删除关联信息 + // 查询合同明细 + List detailDOS = contractDetailMapper + .selectList(TableFieldConstants.BSE_CTRT_DTL_CTRT_MAIN_ID, id); + if (detailDOS != null && !detailDOS.isEmpty()) { + detailDOS.forEach(detailDO -> { + Long detailDOId = detailDO.getId(); + + // 删除交货计划 + contractPlanMapper.delete(TableFieldConstants.BSE_CTRT_PLN_CTRT_DTL_ID, detailDOId.toString()); + + // 查询价款结算条款 + List formulaDOS = contractFormulaMapper + .selectList(TableFieldConstants.BSE_CTRT_FMU_CTRT_DTL_ID, detailDOId.toString()); + if (formulaDOS != null && !formulaDOS.isEmpty()) { + formulaDOS.forEach(formulaDO -> { + + // 价款结算条款ID + Long formulaDOId = formulaDO.getId(); + + // 删除基础系数配置 + contractCoefficientMapper.delete(TableFieldConstants.BSE_CTRT_COEF_FMU_ID, formulaDOId.toString()); + // 删除品位等级价配置 + contractGradeMapper.delete(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formulaDOId.toString()); + // 删除调整价配置 + contractDeductMapper.delete(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formulaDOId.toString()); + // 删除市场价配置 + contractPriceMapper.delete(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formulaDOId.toString()); + // 删除品位不计价配置 + contractNotMapper.delete(TableFieldConstants.BSE_CTRT_NT_FMU_ID, formulaDOId.toString()); + }); + } + + // 删除价款结算条款 + contractFormulaMapper.delete(TableFieldConstants.BSE_CTRT_FMU_CTRT_DTL_ID, detailDOId.toString()); + }); + + // 删除合同明细 + contractDetailMapper.delete(TableFieldConstants.BSE_CTRT_DTL_CTRT_MAIN_ID, id.toString()); + } + + // 重新插入关联信息 + if (reqVO.getDetail() != null && !reqVO.getDetail().isEmpty()) { + reqVO.getDetail().forEach(detail -> { + // 合同明细DO + ContractDetailDO detailDO = BeanUtils.toBean(detail, ContractDetailDO.class); + // 设置合同主信息ID + detailDO.setContractMainId(id); + // 保存合同明细 + contractDetailMapper.insert(detailDO); + + // 合同明细ID + Long detailDOId = detailDO.getId(); + // 交货计划 + if (detail.getPlans() != null && !detail.getPlans().isEmpty()) { + detail.getPlans().forEach(plan -> { + // 交货计划DO + ContractPlanDO planDO = BeanUtils.toBean(plan, ContractPlanDO.class); + // 合同明细主键 + planDO.setContractDetailId(detailDOId); + // 保存交货计划 + contractPlanMapper.insert(planDO); + }); + } + + // 价款结算条款 + if (detail.getFormulas() != null && !detail.getFormulas().isEmpty()) { + detail.getFormulas().forEach(formula -> { + // 价款结算条款DO + ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); + // 合同明细主键 + formulaDO.setContractDetailId(detailDOId); + // 保存价款结算条款 + contractFormulaMapper.insert(formulaDO); + + // 价款结算条款ID + Long formulaDOId = formulaDO.getId(); + // 基础系数配置 + if (formula.getCoefficients() != null && !formula.getCoefficients().isEmpty()) { + formula.getCoefficients().forEach(coefficient -> { + // 基础系数配置DO + ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); + // 条款主键 + coefficientDO.setFormulaId(formulaDOId); + // 保存基础系数配置 + contractCoefficientMapper.insert(coefficientDO); + }); + } + // 品位等级价配置 + if (formula.getGrades() != null && !formula.getGrades().isEmpty()) { + formula.getGrades().forEach(grade -> { + // 品位等级价配置DO + ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); + // 条款主键 + gradeDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractGradeMapper.insert(gradeDO); + }); + } + // 调整价配置 + if (formula.getDeducts() != null && !formula.getDeducts().isEmpty()) { + formula.getDeducts().forEach(deduct -> { + // 调整价配置DO + ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); + // 条款主键 + deductDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractDeductMapper.insert(deductDO); + }); + } + // 市场价配置 + if (formula.getPrices()!= null && !formula.getPrices().isEmpty()) { + formula.getPrices().forEach(price -> { + // 市场价配置DO + ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); + // 条款主键 + priceDO.setFormulaId(formulaDOId); + // 保存市场价配置 + contractPriceMapper.insert(priceDO); + }); + } + // 品位不计价配置 + if (formula.getNots() != null && !formula.getNots().isEmpty()) { + formula.getNots().forEach(not -> { + // 品位不计价配置DO + ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); + // 条款主键 + notDO.setFormulaId(formulaDOId); + // 保存品位不计价配置 + contractNotMapper.insert(notDO); + }); + } + }); + } + }); + } + + // 合同动态表单 + List templateInstanceDataDOS = new ArrayList<>(); + if (reqVO.getDynamicsFields() != null && !reqVO.getDynamicsFields().isEmpty()) { + reqVO.getDynamicsFields().forEach(dynamicsField -> { + TemplateInstanceDataDO templateInstanceDataDO = new TemplateInstanceDataDO(); + BeanUtils.copyProperties(dynamicsField, templateInstanceDataDO); + templateInstanceDataDO.setInscId(reqVO.getInstanceId().toString()); + templateInstanceDataDOS.add(templateInstanceDataDO); + }); + } + // 更新合同动态表单值 + if (!templateInstanceDataDOS.isEmpty()) { + templateInstanceDataService.setTemplateInstanceData(templateInstanceDataDOS); + } + + // 更新合同主信息 + int updateNum = contractMainMapper.updateById(newContractMainDO); + if (updateNum > 0) { + return true; + } else { + return false; + } + } + /** * 生成系统合同编号 *