From c78a465d5285e44ee66076b2463769c7511f1ae4 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Thu, 16 Oct 2025 14:26:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=8C=E5=96=84=20=E5=90=88=E5=90=8C?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/contract/ContractController.java | 6 +- .../service/contract/ContractService.java | 5 +- .../service/contract/ContractServiceImpl.java | 115 ++++++++++++++++-- 3 files changed, 110 insertions(+), 16 deletions(-) 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 cf602dbf..70dee2a5 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 @@ -13,6 +13,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -101,8 +103,8 @@ public class ContractController implements BusinessControllerMarker { @PostMapping("/download") @Operation(summary = "下载文件") @PreAuthorize("@ss.hasPermission('base:contract:download')") - public void download(@RequestBody List ids) { - contractService.download(ids); + public ResponseEntity download(@RequestBody List ids) { + return contractService.download(ids); } // TODO 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 74b74e9e..2e0bbfd8 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 @@ -6,6 +6,8 @@ import com.zt.plat.module.contractorder.api.dto.contract.ContractRespDTO; import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.*; import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractMainDO; import jakarta.validation.Valid; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.ResponseEntity; import java.util.List; @@ -164,6 +166,7 @@ public interface ContractService { * 下载文件 * * @param ids 合同ID集合 + * @return 压缩文件流 */ - void download(List ids); + ResponseEntity download(List ids); } 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 6b6c639e..12905e34 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 @@ -13,8 +13,10 @@ import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceDataR import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceItemRespVO; import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceDataDO; import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceItemDO; +import com.zt.plat.module.base.dal.dataobject.tmpltp.TmplInscBsnRelDO; 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.TmplInscBsnRelMapper; import com.zt.plat.module.base.service.tmpltp.TemplateInstanceDataService; import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi; import com.zt.plat.module.bpm.api.task.BpmTaskApi; @@ -40,15 +42,23 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.ByteArrayOutputStream; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.contractorder.enums.ErrorCodeConstants.*; @@ -102,6 +112,8 @@ public class ContractServiceImpl implements ContractService { private SystemRelativityMapper systemRelativityMapper; @Resource private FileApi fileApi; + @Resource + private TmplInscBsnRelMapper tmplInscBsnRelMapper; @Override public PageResult getContractPage(ContractPageReqVO pageReqVO) { @@ -759,6 +771,8 @@ public class ContractServiceImpl implements ContractService { ContractDetailDO detailDO = BeanUtils.toBean(detail, ContractDetailDO.class); // 设置合同主信息ID detailDO.setContractMainId(id); + // 主键 + detailDO.setId(null); // 保存合同明细 contractDetailMapper.insert(detailDO); @@ -771,6 +785,8 @@ public class ContractServiceImpl implements ContractService { ContractPlanDO planDO = BeanUtils.toBean(plan, ContractPlanDO.class); // 合同明细主键 planDO.setContractDetailId(detailDOId); + // 主键 + planDO.setId(null); // 保存交货计划 contractPlanMapper.insert(planDO); }); @@ -785,6 +801,8 @@ public class ContractServiceImpl implements ContractService { ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); // 合同主键 formulaDO.setContractId(id); + // 主键 + formulaDO.setId(null); // 保存价款结算条款 contractFormulaMapper.insert(formulaDO); @@ -797,6 +815,8 @@ public class ContractServiceImpl implements ContractService { ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); // 条款主键 coefficientDO.setFormulaId(formulaDOId); + // 主键 + coefficientDO.setId(null); // 保存基础系数配置 contractCoefficientMapper.insert(coefficientDO); }); @@ -808,6 +828,8 @@ public class ContractServiceImpl implements ContractService { ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); // 条款主键 gradeDO.setFormulaId(formulaDOId); + // 主键 + gradeDO.setId(null); // 保存品位等级价配置 contractGradeMapper.insert(gradeDO); }); @@ -819,6 +841,8 @@ public class ContractServiceImpl implements ContractService { ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); // 条款主键 deductDO.setFormulaId(formulaDOId); + // 主键 + deductDO.setId(null); // 保存品位等级价配置 contractDeductMapper.insert(deductDO); }); @@ -830,6 +854,8 @@ public class ContractServiceImpl implements ContractService { ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); // 条款主键 priceDO.setFormulaId(formulaDOId); + // 主键 + priceDO.setId(null); // 保存市场价配置 contractPriceMapper.insert(priceDO); }); @@ -844,6 +870,8 @@ public class ContractServiceImpl implements ContractService { ContractDemoteDO demoteDO = BeanUtils.toBean(demote, ContractDemoteDO.class); // 设置合同主键 demoteDO.setContractId(id); + // 主键 + demoteDO.setId(null); // 保存参数降级规则 contractDemoteMapper.insert(demoteDO); }); @@ -856,6 +884,8 @@ public class ContractServiceImpl implements ContractService { ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); // 条款主键 notDO.setContractId(id); + // 主键 + notDO.setId(null); // 保存品位不计价规则 contractNotMapper.insert(notDO); }); @@ -878,11 +908,8 @@ public class ContractServiceImpl implements ContractService { // 更新合同主信息 int updateNum = contractMainMapper.updateById(newContractMainDO); - if (updateNum > 0) { - return true; - } else { - return false; - } + + return updateNum > 0; } @Override @@ -1359,20 +1386,82 @@ public class ContractServiceImpl implements ContractService { } @Override - public void download(List ids) { + public ResponseEntity download(List ids) { try { + + // 返回的压缩包 + ByteArrayOutputStream zipsByte = new ByteArrayOutputStream(); + ZipOutputStream zips = new ZipOutputStream(zipsByte); + // 遍历合同ID集合 ids.forEach(id -> { + try { + // 查询合同信息 + ContractMainDO contractMainDO = contractMainMapper.selectById(id); - // 查询合同信息 - ContractMainDO contractMainDO = contractMainMapper.selectById(id); - JSONArray fileObjectOther = new JSONArray(contractMainDO.getFileObjectOther()); - System.out.println(fileObjectOther); - CommonResult fileRespDTOResult = fileApi - .getFile(fileObjectOther.getJSONObject(0).getLong("id")); + // 单个合同文件压缩 + ByteArrayOutputStream zipByte = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(zipByte); + + // 关联的模版附件查询 + TmplInscBsnRelDO tmplInscBsnRelDO = tmplInscBsnRelMapper.selectOne("BSN_ID", id); + if (tmplInscBsnRelDO != null) { + if (StringUtils.isNotEmpty(tmplInscBsnRelDO.getCntt())) { + JSONObject cntt = new JSONObject(tmplInscBsnRelDO.getCntt()); + CommonResult fileRespResult = fileApi + .getFile(cntt.getLong("id")); + + zip.putNextEntry(new ZipEntry(System.currentTimeMillis() + fileRespResult.getData().getName())); + zip.write(fileRespResult.getData().getContent()); + zip.closeEntry(); + } + } + + // 上传模板附件 + if(StringUtils.isNotBlank(contractMainDO.getFileObject())){ + JSONArray fileObjects = new JSONArray(contractMainDO.getFileObject()); + for (int i = 0; i < fileObjects.size(); i++) { + JSONObject file = fileObjects.getJSONObject(i); + CommonResult fileRespResult = fileApi + .getFile(file.getLong("id")); + + zip.putNextEntry(new ZipEntry(System.currentTimeMillis() + fileRespResult.getData().getName())); + zip.write(fileRespResult.getData().getContent()); + zip.closeEntry(); + } + } + + // 合同其它附件 + if(StringUtils.isNotBlank(contractMainDO.getFileObjectOther())){ + JSONArray fileObjectOthers = new JSONArray(contractMainDO.getFileObjectOther()); + for (int i = 0; i < fileObjectOthers.size(); i++) { + JSONObject file = fileObjectOthers.getJSONObject(i); + CommonResult fileRespResult = fileApi + .getFile(file.getLong("id")); + + zip.putNextEntry(new ZipEntry(System.currentTimeMillis() + fileRespResult.getData().getName())); + zip.write(fileRespResult.getData().getContent()); + zip.closeEntry(); + } + } + + zip.finish(); + String zipName = String.format("%s(%s)相关文件.zip", contractMainDO.getContractName(), contractMainDO.getSystemContractNumber()); + zips.putNextEntry(new ZipEntry(zipName)); + zips.write(zipByte.toByteArray()); + zips.closeEntry(); + } catch (Exception e) { + log.info("添加压缩包异常:" + e.getMessage()); + } }); + + zips.finish(); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=contract-file-"+ System.currentTimeMillis()+".zip") + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .body(new ByteArrayResource(zipsByte.toByteArray())); } catch (Exception e) { - e.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } From a2d9178c8e95dd98b95548f3f9457eb2766f6c95 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Thu, 16 Oct 2025 16:10:31 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E6=B7=BB=E5=8A=A0=E5=BD=92=E6=A1=A3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E6=8F=90=E4=BA=A4=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4=20=E5=90=88=E5=90=8C?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A0=A1=E9=AA=8C=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/ErrorCodeConstants.java | 3 +- .../admin/contract/ContractController.java | 23 ++---- .../vo/contract/ContractSaveReqVO.java | 6 +- .../vo/contract/FormulaSaveReqVO.java | 3 +- .../service/contract/ContractService.java | 10 ++- .../service/contract/ContractServiceImpl.java | 74 ++++++++++++++----- 6 files changed, 78 insertions(+), 41 deletions(-) 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 1a83532f..ac8df7a6 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 @@ -23,5 +23,6 @@ public interface ErrorCodeConstants { ErrorCode CONTRACT_STATUS_NOT_APPROVAL = new ErrorCode(1_027_000_008, "{}状态合同不允许审核"); ErrorCode CONTRACT_ERP_COMPANY_PLEASE_BIND = new ErrorCode(1_027_000_009, "请先绑定{}ERP公司信息"); ErrorCode CONTRACT_STATUS_NOT_DELETE = new ErrorCode(1_027_000_010, "{}状态合同不允许删除"); - ErrorCode CONTRACT_ERP_RCV_DLVY_NOT_EXISTS = new ErrorCode(1_027_000_010, "不存在的收支类型或收支类型为空"); + ErrorCode CONTRACT_ERP_RCV_DLVY_NOT_EXISTS = new ErrorCode(1_027_000_011, "不存在的收支类型或收支类型为空"); + ErrorCode CONTRACT_STATUS_NOT_ARCHIVE = new ErrorCode(1_027_000_012, "{}状态合同不允许归档"); } 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 70dee2a5..3424b4de 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 @@ -108,10 +108,10 @@ public class ContractController implements BusinessControllerMarker { } // TODO - @PostMapping("/preview") - @Operation(summary = "预览文件 TODO") - @PreAuthorize("@ss.hasPermission('base:contract:preview')") - public void preview() { + @PostMapping("/cancel") + @Operation(summary = "作废 TODO") + @PreAuthorize("@ss.hasPermission('base:contract:cancel')") + public void cancel() { } // TODO @@ -121,17 +121,17 @@ public class ContractController implements BusinessControllerMarker { public void complete() { } - // TODO @PostMapping("/archive") - @Operation(summary = "归档 TODO") + @Operation(summary = "归档") @PreAuthorize("@ss.hasPermission('base:contract:archive')") - public void archive() { + public CommonResult archive(@RequestBody List ids) { + return success(contractService.archive(ids)); } @GetMapping("/submit/approval") @Operation(summary = "合同提交审批") @PreAuthorize("@ss.hasPermission('base:contract:approval')") - public CommonResult submitApproval(@RequestParam("id") Long id) { + public CommonResult submitApproval(@RequestParam("id") Long id) { return success(contractService.submitApproval(id)); } @@ -143,13 +143,6 @@ public class ContractController implements BusinessControllerMarker { return success(contractService.approval(reqVO)); } - // TODO - @PostMapping("/view/approval") - @Operation(summary = "查看审批 TODO") - @PreAuthorize("@ss.hasPermission('base:contract:approval')") - public void viewApproval() { - } - @PostMapping("/submit/erp") @Operation(summary = "提交ERP") @PreAuthorize("@ss.hasPermission('base:contract:erp')") 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 738d3b9b..3cd354ee 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 @@ -162,9 +162,6 @@ public class ContractSaveReqVO { @Schema(description = "备注;与ERP(BZXX)对应", example = "备注") private String remark; - // 物料信息 - private List detail; - // 扩展信息 @Schema(description = "原币金额-变更后;与ERP(BGHHTYBZJE)对应,拓展信息") private BigDecimal changeCooAmount; @@ -216,6 +213,9 @@ public class ContractSaveReqVO { @Schema(description = "模板实例主键", example = "10196") private Long instanceId; + // 物料信息 + private List detail; + // 合同动态表单 private List dynamicsFields; 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/FormulaSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/FormulaSaveReqVO.java index 42026d76..aed20f92 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/FormulaSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/FormulaSaveReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.contractorder.controller.admin.contract.vo.contract; +import cn.hutool.json.JSONArray; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -45,7 +46,7 @@ public class FormulaSaveReqVO { private String elementName; @Schema(description = "结算类型,多条使用逗号分隔(字典:PRCH_STLM_TP)", example = "1") - private String settlementType; + private JSONArray settlementType; // 基础系数配置 private List coefficients; 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 2e0bbfd8..1a8e418c 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 @@ -56,7 +56,7 @@ public interface ContractService { * @param id 合同ID * @return 提交审批结果 */ - String submitApproval(Long id); + Boolean submitApproval(Long id); /** * 合同审批 @@ -169,4 +169,12 @@ public interface ContractService { * @return 压缩文件流 */ ResponseEntity download(List ids); + + /** + * 归档 + * + * @param ids 合同ID集合 + * @return 归档结果 + */ + Boolean archive(List ids); } 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 12905e34..41adb861 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 @@ -687,6 +687,17 @@ public class ContractServiceImpl implements ContractService { throw exception(CONTRACT_NOT_EXISTS); } + // 合同状态校验 + if (!(DictEnum.BSE_CTRT_STS_DRAFT.getCode().equals(oldContractMainDO.getStatus()) + || DictEnum.BSE_CTRT_STS_REJECTED.getCode().equals(oldContractMainDO.getStatus()) + || DictEnum.BSE_CTRT_STS_WAIT_PUSH.getCode().equals(oldContractMainDO.getStatus()) + || DictEnum.BSE_CTRT_STS_PUSH_ERROR.getCode().equals(oldContractMainDO.getStatus()) + || DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(oldContractMainDO.getStatus()))) { + + throw exception(CONTRACT_STATUS_NOT_UPDATE, + DictEnum.getByCode(oldContractMainDO.getStatus(), DictTypeConstants.BSE_CTRT_STS).getLabel()); + } + // 校验合同名称是否重复 ContractMainDO contract = contractMainMapper.selectOne(new QueryWrapper() .eq(TableFieldConstants.BSE_CTRT_MAIN_CTRT_NAME, reqVO.getContractName()) @@ -705,17 +716,6 @@ public class ContractServiceImpl implements ContractService { } } - // 合同状态校验 - if (DictEnum.BSE_CTRT_STS_DELETED.getCode().equals(oldContractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_ARCHIVED.getCode().equals(oldContractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_TERMINATED.getCode().equals(oldContractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(oldContractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_UNDER_REVIEW.getCode().equals(oldContractMainDO.getStatus())) { - - throw exception(CONTRACT_STATUS_NOT_UPDATE, - DictEnum.getByCode(oldContractMainDO.getStatus(), DictTypeConstants.BSE_CTRT_STS).getLabel()); - } - // 请求更新的合同信息 ContractMainDO newContractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class); @@ -906,6 +906,15 @@ public class ContractServiceImpl implements ContractService { templateInstanceDataService.setTemplateInstanceData(templateInstanceDataDOS); } + // 合同状态更新 + if (DictEnum.BSE_CTRT_STS_PUSH_ERROR.getCode().equals(oldContractMainDO.getStatus())) { + // “推送失败”的状态编辑后状态变为“待推送” + newContractMainDO.setStatus(DictEnum.BSE_CTRT_STS_WAIT_PUSH.getCode()); + } else if (DictEnum.BSE_CTRT_STS_REJECTED.getCode().equals(oldContractMainDO.getStatus()) + || DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(oldContractMainDO.getStatus())) { + newContractMainDO.setStatus(DictEnum.BSE_CTRT_STS_WAIT_AUDIT.getCode()); + } + // 更新合同主信息 int updateNum = contractMainMapper.updateById(newContractMainDO); @@ -990,7 +999,7 @@ public class ContractServiceImpl implements ContractService { } @Override - public String submitApproval(Long id) { + public Boolean submitApproval(Long id) { // 判断主键 if (ObjectUtils.isEmpty(id)) { @@ -1004,11 +1013,8 @@ public class ContractServiceImpl implements ContractService { } // 合同状态校验 - if (DictEnum.BSE_CTRT_STS_UNDER_REVIEW.getCode().equals(contractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(contractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_TERMINATED.getCode().equals(contractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_ARCHIVED.getCode().equals(contractMainDO.getStatus()) - || DictEnum.BSE_CTRT_STS_DELETED.getCode().equals(contractMainDO.getStatus())) { + if (!(DictEnum.BSE_CTRT_STS_DRAFT.getCode().equals(contractMainDO.getStatus()) + || DictEnum.BSE_CTRT_STS_WAIT_AUDIT.getCode().equals(contractMainDO.getStatus()))) { throw exception(CONTRACT_STATUS_NOT_SUBMIT_APPROVAL, DictEnum.getByCode(contractMainDO.getStatus(), DictTypeConstants.BSE_CTRT_STS).getLabel()); @@ -1023,7 +1029,7 @@ public class ContractServiceImpl implements ContractService { if (StringUtils.isNotBlank(contractMainDO.getProcessInstanceId())) { - // TODO:驳回状态重新提交审批处理 + // TODO:待审核状态重新提交审批处理 // 进入审批流程的合同,查询当前审批的任务节点 List taskList = bpmTaskApi.getTaskListByProcessInstanceId(contractMainDO.getProcessInstanceId()).getData(); } else { @@ -1044,11 +1050,11 @@ public class ContractServiceImpl implements ContractService { } contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_UNDER_REVIEW.getCode()); contractMainMapper.updateById(contractMainDO); - return "提交审批成功"; + return true; } } - return "提交审批失败"; + return false; } @Override @@ -1465,6 +1471,34 @@ public class ContractServiceImpl implements ContractService { } } + @Override + public Boolean archive(List ids) { + + // 遍历合同ID + ids.forEach(id -> { + + // 查询合同是否存在 + ContractMainDO contractMainDO = contractMainMapper.selectById(id); + if (contractMainDO == null) { + throw exception(CONTRACT_NOT_EXISTS); + } + + // 合同状态校验 + if (!DictEnum.BSE_CTRT_STS_TERMINATED.getCode().equals(contractMainDO.getStatus())) { + throw exception(CONTRACT_STATUS_NOT_ARCHIVE, + DictEnum.getByCode(contractMainDO.getStatus(), DictTypeConstants.BSE_CTRT_STS).getLabel()); + } + + // 设置归档状态 + contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_ARCHIVED.getCode()); + + // 更新合同 + contractMainMapper.updateById(contractMainDO); + }); + + return true; + } + /** * 校验合同内容 * From f7155565d4808b5a957792055b44947cfeeaf7ae Mon Sep 17 00:00:00 2001 From: guojunyun Date: Thu, 16 Oct 2025 17:06:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BD=9C=E5=BA=9F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E6=96=B0=E5=A2=9E=E5=AE=8C=E7=BB=93?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E4=BF=AE=E6=94=B9=E5=90=88=E5=90=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=BB=E8=BE=91=EF=BC=9A=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?erp=E7=94=B2=E4=B9=99=E6=96=B9=E5=85=AC=E5=8F=B8=E7=BC=96?= =?UTF-8?q?=E5=8F=B7=E3=80=81=E5=90=8D=E7=A7=B0=20=E4=BF=9D=E5=AD=98erp?= =?UTF-8?q?=E5=90=88=E5=90=8C=E6=98=A0=E5=B0=84=E8=A1=A8=E6=98=AF=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=88=A0=E9=99=A4=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/contract/ContractController.java | 12 +-- .../service/contract/ContractService.java | 16 ++++ .../service/contract/ContractServiceImpl.java | 75 ++++++++++++++++++- .../service/erp/ErpContractServiceImpl.java | 1 + 4 files changed, 94 insertions(+), 10 deletions(-) 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 3424b4de..d8420e02 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 @@ -107,18 +107,18 @@ public class ContractController implements BusinessControllerMarker { return contractService.download(ids); } - // TODO @PostMapping("/cancel") - @Operation(summary = "作废 TODO") + @Operation(summary = "作废") @PreAuthorize("@ss.hasPermission('base:contract:cancel')") - public void cancel() { + public CommonResult cancel(@RequestBody List ids) { + return success(contractService.cancel(ids)); } - // TODO @PostMapping("/complete") - @Operation(summary = "完结 TODO") + @Operation(summary = "完结") @PreAuthorize("@ss.hasPermission('base:contract:complete')") - public void complete() { + public CommonResult complete(@RequestBody List ids) { + return success(contractService.complete(ids)); } @PostMapping("/archive") 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 1a8e418c..9f2db384 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 @@ -177,4 +177,20 @@ public interface ContractService { * @return 归档结果 */ Boolean archive(List ids); + + /** + * 作废 + * + * @param ids 合同ID集合 + * @return 作废结果 + */ + Boolean cancel(List ids); + + /** + * 完结 + * + * @param ids 合同ID集合 + * @return 完结结果 + */ + Boolean complete(List ids); } 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 41adb861..a49f76d7 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 @@ -30,6 +30,7 @@ import com.zt.plat.module.contractorder.enums.*; import com.zt.plat.module.contractorder.enums.contract.DictEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractSaveReqVO; +import com.zt.plat.module.erp.dal.dataobject.erp.ErpCompanyDO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpContractDO; import com.zt.plat.module.erp.service.erp.ErpCompanyService; import com.zt.plat.module.erp.service.erp.ErpContractService; @@ -140,23 +141,33 @@ public class ContractServiceImpl implements ContractService { } } + // 合同主信息 + ContractMainDO contractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class); + // 校验ERP的公司 if (StringUtils.isNotEmpty(reqVO.getPurchaseCompanyNumber()) || StringUtils.isNotEmpty(reqVO.getSalesCompanyNumber())) { if (StringUtils.isNotEmpty(reqVO.getPurchaseCompanyNumber())) { - if (erpCompanyService.getErpCompanyByNumber(reqVO.getPurchaseCompanyNumber()) == null) { + ErpCompanyDO erpCompany = erpCompanyService.getErpCompanyByNumber(reqVO.getPurchaseCompanyNumber()); + if (erpCompany == null) { throw exception(CONTRACT_ERP_COMPANY_PLEASE_BIND, ApiConstants.PURCHASE); + } else { + contractMainDO.setErpPurchaseCompanyNumber(erpCompany.getNumber()); + contractMainDO.setErpPurchaseCompanyName(erpCompany.getName()); } } if (StringUtils.isNotEmpty(reqVO.getSalesCompanyNumber())) { - if (erpCompanyService.getErpCompanyByNumber(reqVO.getSalesCompanyNumber()) == null) { + ErpCompanyDO erpCompany = erpCompanyService.getErpCompanyByNumber(reqVO.getSalesCompanyNumber()); + if (erpCompany == null) { throw exception(CONTRACT_ERP_COMPANY_PLEASE_BIND, ApiConstants.SALES); + } else { + contractMainDO.setErpSalesCompanyNumber(erpCompany.getNumber()); + contractMainDO.setErpSalesCompanyName(erpCompany.getName()); } } } - // 合同主信息 - ContractMainDO contractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class); + // 合同状态保存为草稿 contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_DRAFT.getCode()); // 生成系统合同编号 @@ -1499,6 +1510,62 @@ public class ContractServiceImpl implements ContractService { return true; } + @Override + public Boolean cancel(List ids) { + + // 遍历合同ID + ids.forEach(id -> { + + // 查询合同是否存在 + ContractMainDO contractMainDO = contractMainMapper.selectById(id); + if (contractMainDO == null) { + throw exception(CONTRACT_NOT_EXISTS); + } + + // 合同状态校验 + if (!DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(contractMainDO.getStatus())) { + throw exception(CONTRACT_STATUS_NOT_ARCHIVE, + DictEnum.getByCode(contractMainDO.getStatus(), DictTypeConstants.BSE_CTRT_STS).getLabel()); + } + + // 设置作废状态 + contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_VOID.getCode()); + + // 更新合同 + contractMainMapper.updateById(contractMainDO); + }); + + return true; + } + + @Override + public Boolean complete(List ids) { + + // 遍历合同ID + ids.forEach(id -> { + + // 查询合同是否存在 + ContractMainDO contractMainDO = contractMainMapper.selectById(id); + if (contractMainDO == null) { + throw exception(CONTRACT_NOT_EXISTS); + } + + // 合同状态校验 + if (!DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(contractMainDO.getStatus())) { + throw exception(CONTRACT_STATUS_NOT_ARCHIVE, + DictEnum.getByCode(contractMainDO.getStatus(), DictTypeConstants.BSE_CTRT_STS).getLabel()); + } + + // 设置完结状态 + contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_TERMINATED.getCode()); + + // 更新合同 + contractMainMapper.updateById(contractMainDO); + }); + + return true; + } + /** * 校验合同内容 * diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java index ec54ad4c..36c8f911 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java @@ -242,6 +242,7 @@ public class ErpContractServiceImpl implements ErpContractService { ErpContractDO erpContractDO = getErpContractByMainId(erpContract.getContractMainId()); if (erpContractDO == null) { // 不存在映射表则新增 + erpContract.setDeleted(false); erpContractMapper.insert(erpContract); } else { // 存在映射表则更新