| | |
| | | List<CrmContractProductDO> contractProducts = validateContractProducts(createReqVO.getProducts()); |
| | | // 1.2 校验关联字段 |
| | | validateRelationDataExists(createReqVO); |
| | | // 1.3 生成序号 |
| | | String no = noRedisDAO.generate(CrmNoRedisDAO.CONTRACT_NO_PREFIX); |
| | | if (contractMapper.selectByNo(no) != null) { |
| | | throw exception(CONTRACT_NO_EXISTS); |
| | | // 1.3 生成或校验合同编号:支持自定义编号,未填写时自动生成 |
| | | String no = StrUtil.trimToNull(createReqVO.getNo()); |
| | | if (no == null) { |
| | | no = noRedisDAO.generate(CrmNoRedisDAO.CONTRACT_NO_PREFIX); |
| | | if (contractMapper.selectByNo(no) != null) { |
| | | throw exception(CONTRACT_NO_EXISTS); |
| | | } |
| | | } else if (contractMapper.selectByNo(no) != null) { |
| | | throw exception(CONTRACT_NO_DUPLICATE, no); |
| | | } |
| | | |
| | | // 2.1 插入合同 |
| | |
| | | updateReqVO.setOwnerUserId(null); // 不允许更新的字段 |
| | | // 1.1 校验存在 |
| | | CrmContractDO oldContract = validateContractExists(updateReqVO.getId()); |
| | | // 1.2 只有草稿、审批中,可以编辑; |
| | | // 1.2 合同编号:留空则保持原编号,填写则校验唯一性(排除自身) |
| | | // 留空时回填原编号而非置空,避免操作日志 diff 出现“编号被清空” |
| | | String no = StrUtil.trimToNull(updateReqVO.getNo()); |
| | | if (no == null) { |
| | | no = oldContract.getNo(); |
| | | } else { |
| | | CrmContractDO noContract = contractMapper.selectByNo(no); |
| | | if (noContract != null && !ObjUtil.equal(noContract.getId(), updateReqVO.getId())) { |
| | | throw exception(CONTRACT_NO_DUPLICATE, no); |
| | | } |
| | | } |
| | | updateReqVO.setNo(no); |
| | | // 1.3 只有草稿、审批中,可以编辑; |
| | | if (!ObjectUtils.equalsAny(oldContract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(), |
| | | CrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | throw exception(CONTRACT_UPDATE_FAIL_NOT_DRAFT); |
| | | } |
| | | // 1.3 校验产品项的有效性 |
| | | // 1.4 校验产品项的有效性 |
| | | List<CrmContractProductDO> contractProducts = validateContractProducts(updateReqVO.getProducts()); |
| | | // 1.4 校验关联字段 |
| | | // 1.5 校验关联字段 |
| | | validateRelationDataExists(updateReqVO); |
| | | |
| | | // 2.1 更新合同 |