| | |
| | | updateReqVO.setOwnerUserId(null); // 不允许更新的字段 |
| | | // 1.1 校验存在 |
| | | CrmContractDO oldContract = validateContractExists(updateReqVO.getId()); |
| | | // 1.2 只有草稿、审批中,可以编辑; |
| | | // 1.2 只有草稿、审核不通过,可以编辑; |
| | | if (!ObjectUtils.equalsAny(oldContract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(), |
| | | CrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | CrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(CONTRACT_UPDATE_FAIL_NOT_DRAFT); |
| | | } |
| | | // 1.3 校验产品项的有效性 |
| | |
| | | public void deleteContract(Long id) { |
| | | // 1.1 校验存在 |
| | | CrmContractDO contract = validateContractExists(id); |
| | | // 1.2 如果被 CrmReceivableDO 所使用,则不允许删除 |
| | | // 1.2 只有草稿、审核不通过,可以删除; |
| | | if (!ObjectUtils.equalsAny(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(), |
| | | CrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(CONTRACT_DELETE_FAIL_NOT_EDITABLE); |
| | | } |
| | | // 1.3 如果被 CrmReceivableDO 所使用,则不允许删除 |
| | | if (receivableService.getReceivableCountByContractId(contract.getId()) > 0) { |
| | | throw exception(CONTRACT_DELETE_FAIL); |
| | | } |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_SUBMIT_SUB_TYPE, bizNo = "{{#id}}", |
| | | success = CRM_CONTRACT_SUBMIT_SUCCESS) |
| | | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.WRITE) |
| | | public void submitContract(Long id) { |
| | | // 1. 校验存在 + 可提交状态(未提交 / 审核不通过) |
| | | CrmContractDO contract = validateContractExists(id); |
| | |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(CONTRACT_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. 状态置为审批中,并清空上一轮审核结果,避免残留「审核不通过」的原因 |
| | | contractMapper.submitAndResetAuditInfo(id, CrmAuditStatusEnum.PROCESS.getStatus()); |
| | | if (contractMapper.submitAndResetAuditInfo(id, CrmAuditStatusEnum.PROCESS.getStatus()) != 1) { |
| | | throw exception(CONTRACT_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | // 4. 记录日志 |
| | | LogRecordContext.putVariable("contractName", contract.getName()); |
| | |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(CONTRACT_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | contractMapper.auditContract(id, CrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | if (contractMapper.auditContract(id, CrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark) != 1) { |
| | | throw exception(CONTRACT_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | return; |
| | | } |
| | | // 5. 审核通过:记录审核人与审核意见,状态置为审核通过 |
| | | contractMapper.auditContract(id, CrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | if (contractMapper.auditContract(id, CrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark) != 1) { |
| | | throw exception(CONTRACT_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | } |
| | | |
| | | // ======================= 查询相关 ======================= |