From 520673fd0e116a76b7c033c5f1fd99312aab4b02 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Tue, 28 Oct 2025 17:14:25 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=9B=BD=E8=B4=B82.0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=90=88=E5=90=8C=E8=B0=83=E7=94=A8=E6=8E=A5=E5=8F=A3=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=86=85=E9=83=A8=E4=BE=9B=E5=BA=94=E9=93=BE=E7=9A=84?= =?UTF-8?q?=E5=90=88=E5=90=8C=EF=BC=9A=E6=A0=B9=E6=8D=AE=E5=AE=A2=E5=95=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=E6=8F=90=E4=BA=A4=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=90=88=E5=90=8C=E6=98=A0=E5=B0=84=E5=88=B0erp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/contract/international/Partner.java | 3 + .../enums/ErrorCodeConstants.java | 3 +- .../contractorder/api/ContractApiImpl.java | 66 ++++++++++++------- .../service/contract/ContractService.java | 2 + .../service/contract/ContractServiceImpl.java | 5 +- .../erp/service/erp/ErpContractService.java | 6 +- .../service/erp/ErpContractServiceImpl.java | 8 +-- 7 files changed, 58 insertions(+), 35 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/Partner.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/Partner.java index 707a8908..89c1993c 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/Partner.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/Partner.java @@ -30,4 +30,7 @@ public class Partner { private String partnerType; // 客商类型 @Schema(description = "境内/外") private String domesticOrOverseas; // 境内/外 + + @Schema(description = "erp合同编号") + private String erpContractPaperNumber; // erp合同编号 } \ No newline at end of file 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 6a2ebcc3..b3edc42d 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 @@ -28,5 +28,6 @@ public interface ErrorCodeConstants { ErrorCode CONTRACT_STATUS_NOT_SUBMIT_ERP = new ErrorCode(1_027_000_013, "{}状态合同不允许提交ERP"); ErrorCode CONTRACT_ORDER_EXISTS = new ErrorCode(1_027_000_014, "关联订单已存在"); ErrorCode CONTRACT_SUBMIT_ERP_FAIL = new ErrorCode(1_027_000_015, "合同提交erp失败:{}"); - ErrorCode CONTRACT_UNKNOWN_OPERATE = new ErrorCode(1_027_000_015, "未知的操作"); + ErrorCode CONTRACT_UNKNOWN_OPERATE = new ErrorCode(1_027_000_016, "未知的操作"); + ErrorCode CONTRACT_PARTNER_NOT_EXISTS = new ErrorCode(1_027_000_017, "客商信息不存在"); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java index c22010fd..5f4a4792 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java @@ -186,17 +186,47 @@ public class ContractApiImpl implements ContractApi { throw exception(CONTRACT_UNKNOWN_OPERATE); } - // 提交合同到erp - // 生成ERP合同映射表 - ErpContractSaveReqVO erpContractVO = contractService.getErpContract(contractMainDO); + // 根据客商信息列表提交多个合同映射到erp + if (reqVO.getPartnerList() == null || reqVO.getPartnerList().isEmpty()) { + throw exception(CONTRACT_PARTNER_NOT_EXISTS); + } - // 调用ERP模块 - JSONObject erpResult = contractService.sendToErp(erpContractVO); - log.info("合同提交ERP结果:{}", erpResult); + // 合同主信息-合同编号 + String contractPaperNumber = contractMainDO.getContractPaperNumber(); + // 合同主信息-合同名称 + String contractName = contractMainDO.getContractName(); + for (int i = 0; i < reqVO.getPartnerList().size(); i++) { + Partner partner = reqVO.getPartnerList().get(i); - // 调用ERP失败 - if (!erpResult.getBool("success")) { - throw exception(CONTRACT_SUBMIT_ERP_FAIL, erpResult.getStr("errMsg")); + // 根据客商信息设置合同信息 + // 合同编号 + contractMainDO.setContractPaperNumber(contractPaperNumber + "_" + String.format("%03d", (i+1))); + reqVO.getPartnerList().get(i) + .setErpContractPaperNumber(contractPaperNumber + "_" + String.format("%03d", (i+1))); + // 合同名称 + contractMainDO.setContractName(contractName + "_" + String.format("%03d", (i+1))); + // 境内/境外 -> 客商信息:境内/外 + contractMainDO.setIsDomestic(partner.getDomesticOrOverseas()); + // 乙方公司编号(销售方) -> 客商信息:供应商代码 + contractMainDO.setSalesCompanyNumber(partner.getPartnerCode()); + // ERP乙方公司编码 + contractMainDO.setErpSalesCompanyNumber(partner.getPartnerCode()); + // 乙方公司名称 -> 客商信息:供应商名称 + contractMainDO.setSalesCompanyName(partner.getPartnerName()); + // ERP乙方公司名称 + contractMainDO.setErpSalesCompanyName(partner.getPartnerName()); + + // 生成ERP合同映射表 + ErpContractSaveReqVO erpContractVO = contractService.getErpContract(contractMainDO); + + // 调用ERP模块 + JSONObject erpResult = contractService.sendToErp(erpContractVO); + log.info("合同提交ERP结果:{}", erpResult); + + // 调用ERP失败 + if (!erpResult.getBool("success")) { + throw exception(CONTRACT_SUBMIT_ERP_FAIL, erpResult.getStr("errMsg")); + } } // 删除动态条款信息 @@ -339,6 +369,8 @@ public class ContractApiImpl implements ContractApi { // 合同主信息表映射 ContractMainDO contractMainDO = new ContractMainDO(); + // 系统合同编号 + contractMainDO.setSystemContractNumber(contractService.generateSystemContractNumber("SAP02NCOZC")); // 合同编号 contractMainDO.setContractPaperNumber(reqVO.getContractCode()); // 合同名称 @@ -385,10 +417,6 @@ public class ContractApiImpl implements ContractApi { contractMainDO.setDirection(DictEnum.ERP_RCV_DLVY_EXPENSES.getCode()); // 是否框架合同 contractMainDO.setIsFramework(reqVO.getIsFramework()); - // 境内/境外 -> 客商信息:境内/外 - if (reqVO.getPartnerList() != null && !reqVO.getPartnerList().isEmpty()) { - contractMainDO.setIsDomestic(reqVO.getPartnerList().get(0).getDomesticOrOverseas()); - } // 建筑服务发生地 默认值:NULL // 达到收款条件金额 默认值:NULL // 是否有履约保证金 默认值:否 @@ -410,18 +438,6 @@ public class ContractApiImpl implements ContractApi { contractMainDO.setErpPurchaseCompanyName(""); // 甲方地址 默认值:NULL // 甲方法定代表人 默认值:NULL - // 乙方公司编号(销售方) -> 客商信息:供应商代码 - if (reqVO.getPartnerList() != null && !reqVO.getPartnerList().isEmpty()) { - contractMainDO.setSalesCompanyNumber(reqVO.getPartnerList().get(0).getPartnerCode()); - // ERP乙方公司编码 - contractMainDO.setErpSalesCompanyNumber(reqVO.getPartnerList().get(0).getPartnerCode()); - } - // 乙方公司名称 -> 客商信息:供应商名称 - if (reqVO.getPartnerList() != null && !reqVO.getPartnerList().isEmpty()) { - contractMainDO.setSalesCompanyName(reqVO.getPartnerList().get(0).getPartnerName()); - // ERP乙方公司名称 - contractMainDO.setErpSalesCompanyName(reqVO.getPartnerList().get(0).getPartnerName()); - } // 乙方地址 默认值:NULL // 乙方企业负责人 默认值:NULL 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 818c2a93..62286882 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 @@ -207,4 +207,6 @@ public interface ContractService { JSONObject sendToErp(ErpContractSaveReqVO erpContractVO); ErpContractSaveReqVO getErpContract(ContractMainDO contractMainDO); + + String generateSystemContractNumber(String category); } 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 26f48aa5..8d3b1eb3 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 @@ -1635,7 +1635,7 @@ public class ContractServiceImpl implements ContractService { operationId = "1"; } else { // 3、如果009接口返回值中“合同编号”字段不存在值,根据合同主键查询映射表中是否存在没有删除的数据,如果有,值为“1”,如果没有,值为“0” - ErpContractDO erpContract = erpContractService.getErpContractByMainId(contractMainDO.getId()); + ErpContractDO erpContract = erpContractService.getErpContractByPaperNumber(contractMainDO.getContractPaperNumber()); if (erpContract != null) { operationId = "1"; } else { @@ -1971,7 +1971,8 @@ public class ContractServiceImpl implements ContractService { * * @return 系统合同编号 */ - private String generateSystemContractNumber(String category) { + @Override + public String generateSystemContractNumber(String category) { // 单据名称(拼音) String documentName = "XTHT"; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java index dfd863ad..1da12148 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java @@ -55,12 +55,12 @@ public interface ErpContractService { ErpContractDO getErpContract(Long id); /** - * 获得ERP合同映射通过合同主信息主键 + * 获得ERP合同映射通过合同编号 * - * @param contractMainId 合同主信息主键 + * @param paperNumber 合同编号 * @return ERP合同映射 */ - ErpContractDO getErpContractByMainId(Long contractMainId); + ErpContractDO getErpContractByPaperNumber(String paperNumber); /** * 获得ERP合同映射分页 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 21f750c8..b3f15f8c 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 @@ -104,8 +104,8 @@ public class ErpContractServiceImpl implements ErpContractService { } @Override - public ErpContractDO getErpContractByMainId(Long contractMainId) { - return erpContractMapper.selectOne("CTRT_MAIN_ID", contractMainId); + public ErpContractDO getErpContractByPaperNumber(String paperNumber) { + return erpContractMapper.selectOne("CTRT_PPR_NUM", paperNumber); } @Override @@ -231,8 +231,8 @@ public class ErpContractServiceImpl implements ErpContractService { // 转换为DO ErpContractDO erpContract = BeanUtils.toBean(erpContractVO, ErpContractDO.class); - // 根据合同主信息ID查询合同映射 - ErpContractDO erpContractDO = getErpContractByMainId(erpContract.getContractMainId()); + // 根据合同编号查询合同映射 + ErpContractDO erpContractDO = getErpContractByPaperNumber(erpContract.getContractPaperNumber()); if (erpContractDO == null) { // 不存在映射表则新增 erpContract.setDeleted(false); From 4106f8910781d2e06d16922c36cf6738589bedcf Mon Sep 17 00:00:00 2001 From: guojunyun Date: Tue, 28 Oct 2025 17:43:50 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=9B=BD=E8=B4=B82.0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=90=88=E5=90=8C=E8=B0=83=E7=94=A8=E6=8E=A5=E5=8F=A3=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=86=85=E9=83=A8=E4=BE=9B=E5=BA=94=E9=93=BE=E7=9A=84?= =?UTF-8?q?=E5=90=88=E5=90=8C=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zt/plat/module/contractorder/api/ContractApiImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java index 5f4a4792..d463d8f0 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java @@ -182,6 +182,10 @@ public class ContractApiImpl implements ContractApi { if (systemRelativityDO == null || systemRelativityDO.getDownId() == null) throw exception(CONTRACT_NOT_EXISTS); contractId = systemRelativityDO.getDownId(); contractMainMapper.deleteById(contractId); + // 删除动态条款信息 + contractOtherFormMapper.delete("CTRT_MAIN_ID", contractId.toString()); + contractOtherFieldMapper.delete("CTRT_MAIN_ID", contractId.toString()); + return success(true); } else { throw exception(CONTRACT_UNKNOWN_OPERATE); } @@ -365,6 +369,7 @@ public class ContractApiImpl implements ContractApi { } return CommonResult.success(purchaseOrderDetails); } + private ContractMainDO getcontractMainDO(ContractRequest reqVO) { // 合同主信息表映射 From 475609b3b23250e1cecef6fac1617c261c90b501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Tue, 28 Oct 2025 17:52:42 +0800 Subject: [PATCH 3/6] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/controller/admin/templtp/vo/TmpItmPageReqVO.java | 3 +++ .../controller/admin/templtp/vo/TmplFldPageReqVO.java | 4 ++++ .../plat/module/base/dal/mysql/tmpltp/TmplItmMapper.java | 1 + .../module/base/dal/mysql/tmpltp/TmplTpFldMapper.java | 1 + .../plat/module/base/dal/mysql/tmpltp/TmplTpMapper.java | 1 + .../module/base/service/tmpltp/TmplTpServiceImpl.java | 4 ++-- .../src/main/resources/mapper/tmpltp/TmplTpMapper.xml | 2 ++ .../admin/purchaseorder/vo/PurchaseOrderSaveReqVO.java | 2 +- .../service/purchaseorder/PurchaseOrderServiceImpl.java | 8 ++++---- .../service/salesorder/SalesOrderServiceImpl.java | 6 +++--- 10 files changed, 22 insertions(+), 10 deletions(-) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmpItmPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmpItmPageReqVO.java index 527a46f9..4a374c45 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmpItmPageReqVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmpItmPageReqVO.java @@ -32,4 +32,7 @@ public class TmpItmPageReqVO extends PageParam { @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDate[] createTime; + + @Schema(description = "状态") + private String sts; } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmplFldPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmplFldPageReqVO.java index 82a9c553..814a4063 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmplFldPageReqVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TmplFldPageReqVO.java @@ -28,6 +28,10 @@ public class TmplFldPageReqVO extends PageParam { @Schema(description = "备注") private String rmk; + + @Schema(description = "状态") + private String sts; + @Schema(description = "是否必填") private String isMust; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplItmMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplItmMapper.java index 99b718e4..41faaae7 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplItmMapper.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplItmMapper.java @@ -15,6 +15,7 @@ public interface TmplItmMapper extends BaseMapperX { .likeIfPresent(TmplItmDO::getItmName, reqVO.getItmName()) .likeIfPresent(TmplItmDO::getItmNum, reqVO.getItmNum()) .eqIfPresent(TmplItmDO::getRmk, reqVO.getRmk()) + .eqIfPresent(TmplItmDO::getSts, reqVO.getSts()) .betweenIfPresent(TmplItmDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(TmplItmDO::getId)); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpFldMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpFldMapper.java index 920f4650..0a592231 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpFldMapper.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpFldMapper.java @@ -17,6 +17,7 @@ public interface TmplTpFldMapper extends BaseMapperX { .eqIfPresent(TmplTpFldDO::getFldDoc, reqVO.getFldDoc()) .eqIfPresent(TmplTpFldDO::getIsMust, reqVO.getIsMust()) .eqIfPresent(TmplTpFldDO::getDatTp, reqVO.getDatTp()) + .eqIfPresent(TmplTpFldDO::getSts, reqVO.getSts()) .betweenIfPresent(TmplTpFldDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(TmplTpFldDO::getId)); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpMapper.java index 746e4e36..9a5fb8bd 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpMapper.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/tmpltp/TmplTpMapper.java @@ -29,6 +29,7 @@ public interface TmplTpMapper extends BaseMapperX { .eqIfPresent(TmplTpDO::getPrnId, reqVO.getPrnId()) .eqIfPresent(TmplTpDO::getSrt, reqVO.getSrt()) .eqIfPresent(TmplTpDO::getSts, reqVO.getSts()) + .eqIfPresent(TmplTpDO::getSts, reqVO.getSts()) .betweenIfPresent(TmplTpDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(TmplTpDO::getId)); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java index 48191c2e..c5efe3cd 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TmplTpServiceImpl.java @@ -252,8 +252,8 @@ public class TmplTpServiceImpl extends ServiceImpl imple // 1. 根据条件查询匹配的节点 List matchedNodes = baseMapper.selectList(new LambdaQueryWrapper() - .eq(name != null && !name.isEmpty(), TmplTpDO::getName, name) - .eq(num != null && !num.isEmpty(), TmplTpDO::getNum, num)); + .like(name != null && !name.isEmpty(), TmplTpDO::getName, name) + .like(num != null && !num.isEmpty(), TmplTpDO::getNum, num)); if (matchedNodes.isEmpty()) { return new ArrayList<>(); diff --git a/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml b/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml index 36597586..6209a21e 100644 --- a/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml +++ b/zt-module-base/zt-module-base-server/src/main/resources/mapper/tmpltp/TmplTpMapper.xml @@ -21,6 +21,7 @@ AND rel.DELETED = 0 AND tp.DELETED = 0 AND tp.id = #{id} + and itm.sts=1 diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderSaveReqVO.java index 76ae5c99..eb7438e9 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderSaveReqVO.java @@ -30,7 +30,7 @@ public class PurchaseOrderSaveReqVO { @Schema(description = "公司编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "公司编码;推送ERP(必须)不能为空") - private String companyNumber; + private String cpNum; @Schema(description = "客商编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "客商编码;推送ERP(必须)不能为空") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java index 8ebb0121..8f95c9d5 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java @@ -555,6 +555,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { } @Override + @Transactional(rollbackFor=Exception.class) public boolean orderPassReject(PurchaseorderReqVO purchaseorderReqVO) { PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectById(purchaseorderReqVO.getId()); if (ObjectUtils.isEmpty(purchaseOrderDO)) { @@ -570,9 +571,9 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { badrDto.setTaskId(undoTask.getId()); // 当前审核任务节点id BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData(); //如果审核通过 - if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) { + if ("WAIT_PUSH".equals(purchaseorderReqVO.getStatus())) { purchaseOrderDO.setStatus(OrderStatusEnum.TO_SUBMIT_ERP.getCode()); - } else if (BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(approvalDetail.getStatus())) { + } else { //如果审核不通过 purchaseOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode()); } @@ -582,7 +583,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { purchaseOrderDO.setTaskId(undoTask.getId()); } purchaseOrderMapper.updateById(purchaseOrderDO); //更新状态 - // 需要调用bpm 审核接口更新审批中的状态 if (DictEnum.BSE_CTRT_STS_WAIT_PUSH.getCode().equals(purchaseorderReqVO.getStatus()) && ObjectUtils.isNotEmpty(undoTask)) { if (approvalDetail.getStatus().equals(BpmProcessInstanceStatusEnum.RUNNING.getStatus())) { @@ -599,7 +599,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { bpmProcessInstanceApi.rejectTask(btrrDto); } } - return false; + return true; } @Override diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java index f46abdd1..9348cdc4 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java @@ -328,9 +328,9 @@ public class SalesOrderServiceImpl implements SalesOrderService { badrDto.setTaskId(undoTask.getId()); // 当前审核任务节点id BpmApprovalDetailRespDTO approvalDetail = bpmProcessInstanceApi.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), badrDto).getData(); //如果审核通过 - if (BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(approvalDetail.getStatus())) { + if ("WAIT_PUSH".equals(salesOrderReviewReqVO.getStatus())) { salesOrderDO.setStatus(OrderStatusEnum.TO_SUBMIT_ERP.getCode()); - } else if (BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(approvalDetail.getStatus())) { + } else { //如果审核不通过 salesOrderDO.setStatus(OrderStatusEnum.DRAFT.getCode()); } @@ -357,7 +357,7 @@ public class SalesOrderServiceImpl implements SalesOrderService { bpmProcessInstanceApi.rejectTask(btrrDto); } } - return false; + return true; } @Override From d35da7d10fb3665fc7764d7e6b5376b50cd69804 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Wed, 29 Oct 2025 09:27:33 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=9B=BD=E8=B4=B82.0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=90=88=E5=90=8C=E8=B0=83=E7=94=A8=E6=8E=A5=E5=8F=A3=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=86=85=E9=83=A8=E4=BE=9B=E5=BA=94=E9=93=BE=E7=9A=84?= =?UTF-8?q?=E5=90=88=E5=90=8C=EF=BC=9A=E5=B8=B8=E9=87=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/contract/DictEnum.java | 8 ++++++++ .../contractorder/api/ContractApiImpl.java | 20 +++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java index c5ad9e48..8df642dc 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java @@ -8,6 +8,14 @@ import lombok.Getter; @Getter public enum DictEnum { + /** 业务类型 */ + BSN_TP_3("物流合同","3",null), + /** ERP合同类型编码 */ + ERP_CTRT_HTLXBH_SAP02NCOZC("SAP铜非施工合同支出类","SAP02NCOZC",null), + /** 交易方式 */ + HS_PYBL_TP_PRE_PAY("先款后货","PRE_PAY",null), + /** ERP合同类别 */ + ERP_CTRT_HTLB_1("购销合同","1",null), /** ERP请求状态 */ ERP_REQ_STS_RLBK("失败","RLBK",null), ERP_REQ_STS_RCVG("执行中","RCVG",null), diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java index d463d8f0..5395f2da 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java @@ -375,19 +375,19 @@ public class ContractApiImpl implements ContractApi { // 合同主信息表映射 ContractMainDO contractMainDO = new ContractMainDO(); // 系统合同编号 - contractMainDO.setSystemContractNumber(contractService.generateSystemContractNumber("SAP02NCOZC")); + contractMainDO.setSystemContractNumber(contractService.generateSystemContractNumber(DictEnum.ERP_CTRT_HTLXBH_SAP02NCOZC.getCode())); // 合同编号 contractMainDO.setContractPaperNumber(reqVO.getContractCode()); // 合同名称 contractMainDO.setContractName(reqVO.getContractName()); // 施工类型编号 默认值:SAP02NCOZC - contractMainDO.setConstructionTypeNumber("SAP02NCOZC"); + contractMainDO.setConstructionTypeNumber(DictEnum.ERP_CTRT_HTLXBH_SAP02NCOZC.getCode()); // 施工类型名称 默认值:铜非施工合同支出类 - contractMainDO.setConstructionTypeName("SAP铜非施工合同支出类"); + contractMainDO.setConstructionTypeName(DictEnum.ERP_CTRT_HTLXBH_SAP02NCOZC.getLabel()); // 类别 默认值:购销合同(1) - contractMainDO.setCategory("1"); + contractMainDO.setCategory(DictEnum.ERP_CTRT_HTLB_1.getCode()); // 是否虚拟合同 默认值:否(0) - contractMainDO.setContractVirtual("0"); + contractMainDO.setContractVirtual(DictEnum.ERP_CTRT_YN_NO.getCode()); // 代理方 默认值:NULL // 签署日期 -> 签约日期 (40-签约必填, 格式: yyyyMMdd) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); @@ -409,11 +409,11 @@ public class ContractApiImpl implements ContractApi { // 状态 默认值:正在执行(EF) 执行中 contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode()); // 是否有预付款 默认值:否 - contractMainDO.setHasPrepayment("0"); + contractMainDO.setHasPrepayment(DictEnum.ERP_CTRT_YN_NO.getCode()); // 预付款比例 默认值:NULL // 预付款金额 默认值:NULL // 是否有质保金 默认值:否 - contractMainDO.setHasQualityAmount("0"); + contractMainDO.setHasQualityAmount(DictEnum.ERP_CTRT_YN_NO.getCode()); // 质保金比例 默认值:NULL // 质保金金额 默认值:NULL // 是否内部企业 @@ -425,13 +425,13 @@ public class ContractApiImpl implements ContractApi { // 建筑服务发生地 默认值:NULL // 达到收款条件金额 默认值:NULL // 是否有履约保证金 默认值:否 - contractMainDO.setHasDeposit("0"); + contractMainDO.setHasDeposit(DictEnum.ERP_CTRT_YN_NO.getCode()); // 原币履约保证金 默认值:NULL // 本币履约保证金 默认值:NULL // 交易方式 默认值:先款后货 - contractMainDO.setHasPayable("PRE_PAY"); + contractMainDO.setHasPayable(DictEnum.HS_PYBL_TP_PRE_PAY.getCode()); // 合同类型 默认值:物流合同 - contractMainDO.setContractType("3"); + contractMainDO.setContractType(DictEnum.BSN_TP_3.getCode()); // 签署地 -> 签约地 (40-签约必填) contractMainDO.setSignPlace(reqVO.getSignSite()); // 甲方公司编号(采购方) -> 账套代码 From 8edd99e0bed2e48d7d9586aefdedaea5ba940065 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Wed, 29 Oct 2025 09:36:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=90=88=E5=90=8C?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=97=B6erp=E5=85=AC=E5=8F=B8=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/contract/ContractServiceImpl.java | 68 ++++++------------- 1 file changed, 20 insertions(+), 48 deletions(-) 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 8d3b1eb3..2dfb4f83 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 @@ -26,11 +26,13 @@ import com.zt.plat.module.contractorder.api.dto.contract.*; import com.zt.plat.module.contractorder.api.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.*; +import com.zt.plat.module.contractorder.enums.DateConstants; +import com.zt.plat.module.contractorder.enums.DictTypeConstants; +import com.zt.plat.module.contractorder.enums.ProcessConstants; +import com.zt.plat.module.contractorder.enums.TableFieldConstants; 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; @@ -145,30 +147,14 @@ 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())) { - 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())) { - 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()); - } - } - } - - + // ERP甲方公司编号 + contractMainDO.setErpPurchaseCompanyNumber(reqVO.getPurchaseCompanyNumber()); + // ERP甲方公司名称 + contractMainDO.setErpPurchaseCompanyName(reqVO.getPurchaseCompanyName()); + // ERP乙方公司编码 + contractMainDO.setErpSalesCompanyNumber(reqVO.getSalesCompanyNumber()); + // ERP乙方公司名称 + contractMainDO.setErpSalesCompanyName(reqVO.getSalesCompanyName()); // 合同状态保存为草稿 contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_DRAFT.getCode()); // 生成系统合同编号 @@ -731,28 +717,14 @@ public class ContractServiceImpl implements ContractService { // 请求更新的合同信息 ContractMainDO newContractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class); - // 校验ERP的公司 - if (StringUtils.isNotEmpty(reqVO.getPurchaseCompanyNumber()) - || StringUtils.isNotEmpty(reqVO.getSalesCompanyNumber())) { - if (StringUtils.isNotEmpty(reqVO.getPurchaseCompanyNumber())) { - ErpCompanyDO erpCompany = erpCompanyService.getErpCompanyByNumber(reqVO.getPurchaseCompanyNumber()); - if (erpCompany == null) { - throw exception(CONTRACT_ERP_COMPANY_PLEASE_BIND, ApiConstants.PURCHASE); - } else { - newContractMainDO.setErpPurchaseCompanyNumber(erpCompany.getNumber()); - newContractMainDO.setErpPurchaseCompanyName(erpCompany.getName()); - } - } - if (StringUtils.isNotEmpty(reqVO.getSalesCompanyNumber())) { - ErpCompanyDO erpCompany = erpCompanyService.getErpCompanyByNumber(reqVO.getSalesCompanyNumber()); - if (erpCompany == null) { - throw exception(CONTRACT_ERP_COMPANY_PLEASE_BIND, ApiConstants.SALES); - } else { - newContractMainDO.setErpSalesCompanyNumber(erpCompany.getNumber()); - newContractMainDO.setErpSalesCompanyName(erpCompany.getName()); - } - } - } + // ERP甲方公司编号 + newContractMainDO.setErpPurchaseCompanyNumber(reqVO.getPurchaseCompanyNumber()); + // ERP甲方公司名称 + newContractMainDO.setErpPurchaseCompanyName(reqVO.getPurchaseCompanyName()); + // ERP乙方公司编码 + newContractMainDO.setErpSalesCompanyNumber(reqVO.getSalesCompanyNumber()); + // ERP乙方公司名称 + newContractMainDO.setErpSalesCompanyName(reqVO.getSalesCompanyName()); // 删除关联信息 // 查询合同明细 From 3ef662e1ec4cd17214ad22e3e24c368ed49d5473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Wed, 29 Oct 2025 10:17:34 +0800 Subject: [PATCH 6/6] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/purchaseorder/vo/PrchOrdDtlSaveReqVO.java | 2 +- .../admin/salesorder/vo/SalesOrderDetailSaveReqVO.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PrchOrdDtlSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PrchOrdDtlSaveReqVO.java index a68502b1..9bea3a39 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PrchOrdDtlSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PrchOrdDtlSaveReqVO.java @@ -150,7 +150,7 @@ public class PrchOrdDtlSaveReqVO { private String isEnb; @Schema(description = "科目分配详情;科目分配类别为K或P时使用(JSON)") - private JSONObject actsCtgrDtl; + private String actsCtgrDtl; @Schema(description = "委托加工详情;委托加工订单使用(JSON)") private String enttDtl; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java index bb9301fb..499eadcd 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/vo/SalesOrderDetailSaveReqVO.java @@ -19,7 +19,7 @@ public class SalesOrderDetailSaveReqVO { @Schema(description = "行项目;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "行项目;推送ERP(必须)不能为空") - private Long lineNumber; + private Long lineNumber; @Schema(description = "物料名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") @NotEmpty(message = "物料名称不能为空") @@ -47,7 +47,7 @@ public class SalesOrderDetailSaveReqVO { @Schema(description = "计量单位;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "计量单位;推送ERP(必须)不能为空") - private String unit; + private String unt; @Schema(description = "开票类型;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @NotEmpty(message = "开票类型;推送ERP(必须)不能为空")