修改合同接口

This commit is contained in:
guojunyun
2025-09-25 15:27:50 +08:00
parent 327fd9bdcb
commit ff18060b06
14 changed files with 320 additions and 28 deletions

View File

@@ -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<Boolean> update(@Valid @RequestBody ContractSaveReqVO reqVO) {
return success(true);
return success(contractService.update(reqVO));
}
// TODO

View File

@@ -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<ContractCoefficientSaveReqVO> coefficients;
// 品位等级价配置

View File

@@ -49,5 +49,5 @@ public class ContractPriceSaveReqVO {
private String averageType;
@Schema(description = "网价小数位")
private BigDecimal decimalBit;
private BigDecimal decimalPoint;
}

View File

@@ -15,7 +15,7 @@ import java.util.List;
@Data
public class ContractSaveReqVO {
@Schema(description = "主键")
@Schema(description = "主键,新增时为空,修改时需要有值")
@ExcelProperty("主键")
private Long id;

View File

@@ -30,7 +30,7 @@ public class ContractViewFormulaRespVO {
private String materialNumber;
@Schema(description = "计算小数位")
private Long decimalBit;
private Long decimalPoint;
@Schema(description = "金属元素编码")
private String elementNumber;

View File

@@ -49,5 +49,5 @@ public class ContractViewPriceRespVO {
private String averageType;
@Schema(description = "网价小数位")
private BigDecimal decimalBit;
private BigDecimal decimalPoint;
}

View File

@@ -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;
}

View File

@@ -93,6 +93,6 @@ public class ContractPriceDO extends BusinessBaseDO {
/**
* 网价小数位
*/
@TableField("DEC")
private BigDecimal decimalBit;
@TableField("DEC_PNT")
private BigDecimal decimalPoint;
}

View File

@@ -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);
}

View File

@@ -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<ContractDetailDO> 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<ContractPlanDO> planDOS = contractPlanMapper.selectList("CTRT_DTL_ID", detail.getId());
List<ContractPlanDO> 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<ContractFormulaDO> 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<ContractCoefficientDO> 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<ContractGradeDO> gradeDOS = contractGradeMapper.selectList("FMU_ID", formula.getId());
List<ContractGradeDO> gradeDOS = contractGradeMapper
.selectList(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formula.getId());
if (gradeDOS != null && !gradeDOS.isEmpty()) {
formula.setGrades(BeanUtils.toBean(gradeDOS, ContractViewGradeRespVO.class));
}
// 查询并设置调整价配置
List<ContractDeductDO> deductDOS = contractDeductMapper.selectList("FMU_ID", formula.getId());
List<ContractDeductDO> deductDOS = contractDeductMapper
.selectList(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formula.getId());
if (deductDOS != null && !deductDOS.isEmpty()) {
formula.setDeducts(BeanUtils.toBean(deductDOS, ContractViewDeductRespVO.class));
}
// 查询并设置市场价配置
List<ContractPriceDO> priceDOS = contractPriceMapper.selectList("FMU_ID", formula.getId());
List<ContractPriceDO> priceDOS = contractPriceMapper
.selectList(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formula.getId());
if (priceDOS != null && !priceDOS.isEmpty()) {
formula.setPrices(BeanUtils.toBean(priceDOS, ContractViewPriceRespVO.class));
}
// 查询并设置品位不计价配置
List<ContractNotDO> notDOS = contractNotMapper.selectList("FMU_ID", formula.getId());
List<ContractNotDO> 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<TemplateInstanceDataDO> 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<TemplateInstanceItemDO> 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<ContractMainDO>()
.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<ContractMainDO>()
.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<ContractDetailDO> 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<ContractFormulaDO> 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<TemplateInstanceDataDO> 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;
}
}
/**
* 生成系统合同编号
*