diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index c1d7cda8a..770384fcb 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -440,6 +440,8 @@ public class ErrorCodeConstants { public static final ErrorCode INVOICE_TITLE_NOT_EXISTS_ERROR = new ErrorCode(1_002_043_028, "发票抬头不存在,请先创建发票抬头"); public static final ErrorCode ORG_INVOICE_PURCHASE_RECORD_UPDATE_NUM_NOT_MATCH_ERROR = new ErrorCode(1_002_043_029, "当前勾选的购买记录中部分可能已开票,请查询后重新勾选提交开票"); public static final ErrorCode ORG_INVOICE_AGREE_FILE_NULL_ERROR = new ErrorCode(1_002_043_030, "确认开票发票附件不能为空,请上传后再提交"); + public static final ErrorCode INVOICE_TITLE_ORG_EXISTS_ERROR = new ErrorCode(1_002_043_031, "组织下已存在发票抬头,请刷新后编辑抬头内容"); + public static final ErrorCode INVOICE_TITLE_TAXPAYERID_EXISTS_ERROR = new ErrorCode(1_002_043_032, "纳税人识别号已存在,请检查"); //=========== 支付相关 1-002-048-000 ============ public static final ErrorCode PAY_CHANNEL_NOT_SUPPORT = new ErrorCode(1_002_048_000, "暂不支持的支付渠道,请使用其他支付渠道"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java index 2ac7b8524..72f4d9394 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java @@ -12,6 +12,7 @@ import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.date.LocalDateTimeUtils; import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.infra.api.file.FileApi; @@ -56,6 +57,8 @@ import static com.cf.imes.framework.common.util.json.JsonUtils.zipString; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICE_NO_EXIST; import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICE_TITLE_NOT_EXISTS_ERROR; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICE_TITLE_ORG_EXISTS_ERROR; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICE_TITLE_TAXPAYERID_EXISTS_ERROR; import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICING_REJECT_REASON; import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORG_INVOICE_AGREE_FILE_NULL_ERROR; import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORG_INVOICE_PURCHASE_RECORD_UPDATE_NUM_NOT_MATCH_ERROR; @@ -96,8 +99,14 @@ public class InvoiceServiceImpl implements InvoiceService { @Override public void insetInvoiceTitle(InvoiceTitleSaveReqVO reqVO) { Long organId = SecurityFrameworkUtils.getUserOrganId(); - if (reqVO.getId() != null) { - validTitleOrg(reqVO.getId(), organId); + + Long id = reqVO.getId(); + + // 校验纳税人识别号和组织id是否唯一 + validOrgAndTaxpayerNo(id, organId, reqVO.getTaxpayerId()); + + if (id != null) { + validTitleOrg(id, organId); // 更新抬头 InvoiceTitleInfoDO titleInfoDO = BeanUtils.toBean(reqVO, InvoiceTitleInfoDO.class); invoiceTitleInfoMapper.updateById(titleInfoDO); @@ -119,6 +128,29 @@ public class InvoiceServiceImpl implements InvoiceService { .build()); } + /** + * 校验组织和纳税人识别号唯一 + * + * @param id 发票抬头id + * @param organId 组织id + * @param taxpayerId 纳税人识别号 + */ + private void validOrgAndTaxpayerNo(Long id, Long organId, String taxpayerId) { + InvoiceTitleInfoDO exist = invoiceTitleInfoMapper.selectOne(new LambdaQueryWrapperX() + .neIfPresent(InvoiceTitleInfoDO::getId, id) + .eq(InvoiceTitleInfoDO::getOrganId, organId)); + + if (ObjectUtil.isNotNull(exist)) { + throw new ServiceException(INVOICE_TITLE_ORG_EXISTS_ERROR); + } + exist = invoiceTitleInfoMapper.selectOne(new LambdaQueryWrapperX() + .neIfPresent(InvoiceTitleInfoDO::getId, id) + .eq(InvoiceTitleInfoDO::getTaxpayerId, taxpayerId)); + if (ObjectUtil.isNotNull(exist)) { + throw new ServiceException(INVOICE_TITLE_TAXPAYERID_EXISTS_ERROR); + } + } + /** * 校验抬头组织 *