From ff18060b065cb22891829f4ee6660084c39f86eb Mon Sep 17 00:00:00 2001 From: guojunyun Date: Thu, 25 Sep 2025 15:27:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=88=E5=90=8C=E6=8E=A5?= =?UTF-8?q?=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; + } + } + /** * 生成系统合同编号 *