From f16a1f270781a2bcbd76b173b98c2c5bcd2b9b21 Mon Sep 17 00:00:00 2001 From: yinq Date: Tue, 9 Jun 2026 14:24:44 +0800 Subject: [PATCH] =?UTF-8?q?1.1.66=20=E8=AE=A2=E5=8D=95=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E6=97=B6=E6=A0=A1=E9=AA=8C=E7=94=B2=E6=96=B9=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ErpContractOrderController.java | 12 ++++ .../vo/ErpPartyACustomerValidateVo.java | 58 ++++++++++++++++ .../erp/service/IErpContractOrderService.java | 9 +++ .../impl/ErpContractOrderServiceImpl.java | 67 ++++++++++++++++--- 4 files changed, 136 insertions(+), 10 deletions(-) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpPartyACustomerValidateVo.java diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java index 335b0d6c..fc708888 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java @@ -12,6 +12,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.web.core.BaseController; import org.dromara.oa.erp.domain.bo.ErpProjectInfoBo; import org.dromara.oa.erp.domain.vo.ErpContractOrderPurchaseMaterialVo; +import org.dromara.oa.erp.domain.vo.ErpPartyACustomerValidateVo; import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo; import org.dromara.oa.erp.service.IErpContractOrderService; import org.dromara.common.mybatis.core.page.PageQuery; @@ -108,5 +109,16 @@ public class ErpContractOrderController extends BaseController { @PathVariable("projectId") Long projectId) { return R.ok(erpContractOrderService.queryPurchaseMaterialList(projectId)); } + + /** + * 订单激活时校验甲方客户基础信息(附件、税号、开户银行、银行账号不能为空) + * + * @param contractId 合同ID + */ + @GetMapping("/validPartyACustomer/{contractId}") + public R validPartyACustomerForOrderActivate(@NotNull(message = "合同ID不能为空") + @PathVariable("contractId") Long contractId) { + return R.ok(erpContractOrderService.checkPartyACustomerForOrderActivate(contractId)); + } } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpPartyACustomerValidateVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpPartyACustomerValidateVo.java new file mode 100644 index 00000000..9c65b48f --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpPartyACustomerValidateVo.java @@ -0,0 +1,58 @@ +package org.dromara.oa.erp.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 订单激活甲方客户信息校验结果 + * + * @author Cursor + */ +@Data +public class ErpPartyACustomerValidateVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 是否校验通过 + */ + private Boolean valid; + + /** + * 甲方客户ID + */ + private Long oneCustomerId; + + /** + * 甲方客户名称 + */ + private String customerName; + + /** + * 附件是否缺失 + */ + private Boolean ossIdMissing; + + /** + * 税号是否缺失 + */ + private Boolean taxNumberMissing; + + /** + * 开户银行是否缺失 + */ + private Boolean bankAccountOpeningMissing; + + /** + * 银行账号是否缺失 + */ + private Boolean bankNumberMissing; + + /** + * 校验提示信息 + */ + private String message; +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java index 95d77541..a83c37cf 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java @@ -2,6 +2,7 @@ package org.dromara.oa.erp.service; import org.dromara.oa.erp.domain.bo.ErpProjectInfoBo; import org.dromara.oa.erp.domain.vo.ErpContractOrderPurchaseMaterialVo; +import org.dromara.oa.erp.domain.vo.ErpPartyACustomerValidateVo; import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -97,5 +98,13 @@ public interface IErpContractOrderService { * @return 合同ID */ Long resolveContractIdByProjectId(Long projectId); + + /** + * 订单激活时校验甲方客户基础信息(附件、税号、开户银行、银行账号不能为空) + * + * @param contractId 合同ID + * @return 校验结果 + */ + ErpPartyACustomerValidateVo checkPartyACustomerForOrderActivate(Long contractId); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java index 13d2059f..81506890 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java @@ -30,6 +30,7 @@ import org.dromara.oa.erp.domain.bo.ErpProjectContractsBo; import org.dromara.oa.erp.domain.bo.ErpProjectPlanStageBo; import org.dromara.oa.erp.domain.vo.ErpContractInfoVo; import org.dromara.oa.erp.domain.vo.ErpContractOrderPurchaseMaterialVo; +import org.dromara.oa.erp.domain.vo.ErpPartyACustomerValidateVo; import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo; import org.dromara.oa.erp.mapper.ErpContractInfoMapper; import org.dromara.oa.erp.mapper.ErpContractMaterialMapper; @@ -703,24 +704,70 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { /** * 订单激活时校验甲方客户基础信息(附件、税号、开户银行、银行账号不能为空) * - * @param oneCustomerId 甲方客户ID + * @param contractId 合同ID + * @return 校验结果 */ - private void validPartyACustomerForOrderActivate(Long oneCustomerId) { - if (oneCustomerId == null) { - return; + @Override + public ErpPartyACustomerValidateVo checkPartyACustomerForOrderActivate(Long contractId) { + if (contractId == null) { + ErpPartyACustomerValidateVo result = new ErpPartyACustomerValidateVo(); + result.setValid(true); + return result; } + ErpContractInfoVo contractInfoVo = contractInfoMapper.selectVoById(contractId); + if (contractInfoVo == null) { + throw new ServiceException("合同信息不存在"); + } + return buildPartyACustomerValidateResult(contractInfoVo.getOneCustomerId()); + } + + /** + * 构建甲方客户校验结果 + * + * @param oneCustomerId 甲方客户ID + * @return 校验结果 + */ + private ErpPartyACustomerValidateVo buildPartyACustomerValidateResult(Long oneCustomerId) { + ErpPartyACustomerValidateVo result = new ErpPartyACustomerValidateVo(); + result.setValid(true); + if (oneCustomerId == null) { + return result; + } + result.setOneCustomerId(oneCustomerId); CrmCustomerInfoVo customerInfo = crmCustomerInfoService.queryById(oneCustomerId); if (customerInfo == null) { - throw new ServiceException("合同甲方客户信息不存在,请先在客户管理中维护客户信息"); + result.setValid(false); + result.setMessage("合同甲方客户信息不存在,请先在客户管理中维护客户信息"); + return result; } - if (StringUtils.isBlank(customerInfo.getOssId()) - || StringUtils.isBlank(customerInfo.getTaxNumber()) - || StringUtils.isBlank(customerInfo.getBankAccountOpening()) - || StringUtils.isBlank(customerInfo.getBankNumber())) { + result.setCustomerName(customerInfo.getCustomerName()); + boolean ossIdMissing = StringUtils.isBlank(customerInfo.getOssId()); + boolean taxNumberMissing = StringUtils.isBlank(customerInfo.getTaxNumber()); + boolean bankAccountOpeningMissing = StringUtils.isBlank(customerInfo.getBankAccountOpening()); + boolean bankNumberMissing = StringUtils.isBlank(customerInfo.getBankNumber()); + result.setOssIdMissing(ossIdMissing); + result.setTaxNumberMissing(taxNumberMissing); + result.setBankAccountOpeningMissing(bankAccountOpeningMissing); + result.setBankNumberMissing(bankNumberMissing); + if (ossIdMissing || taxNumberMissing || bankAccountOpeningMissing || bankNumberMissing) { + result.setValid(false); String customerName = StringUtils.isNotBlank(customerInfo.getCustomerName()) ? customerInfo.getCustomerName() : String.valueOf(oneCustomerId); - throw new ServiceException("客户【" + customerName + "】的附件、税号、开户银行、银行账号不能为空,请先在客户管理中完善!"); + result.setMessage("客户【" + customerName + "】的附件、税号、开户银行、银行账号不能为空,请完善客户信息"); + } + return result; + } + + /** + * 订单激活保存前校验甲方客户基础信息 + * + * @param oneCustomerId 甲方客户ID + */ + private void validPartyACustomerForOrderActivate(Long oneCustomerId) { + ErpPartyACustomerValidateVo result = buildPartyACustomerValidateResult(oneCustomerId); + if (!Boolean.TRUE.equals(result.getValid())) { + throw new ServiceException(result.getMessage()); } }