Kaynağa Gözat

1、销售合同列表接口
2、合同编号、名称唯一校验

dongpo 6 ay önce
ebeveyn
işleme
5a69579cc9
14 değiştirilmiş dosya ile 286 ekleme ve 14 silme
  1. 10 0
      yudao-module-finance/yudao-module-cash-biz/pom.xml
  2. 43 0
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/RefundInfoController.java
  3. 2 2
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoPageReqVO.java
  4. 0 1
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoSaveReqVO.java
  5. 14 10
      yudao-module-finance/yudao-module-cash-biz/src/main/resources/mapper/refundinfo/RefundInfoMapper.xml
  6. 14 0
      yudao-module-finance/yudao-module-contract-api/src/main/java/cn/iocoder/yudao/module/contract/api/customercontract/CustomerContractApi.java
  7. 62 0
      yudao-module-finance/yudao-module-contract-api/src/main/java/cn/iocoder/yudao/module/contract/api/customercontract/dto/CustomerContractDTO.java
  8. 2 0
      yudao-module-finance/yudao-module-contract-api/src/main/java/cn/iocoder/yudao/module/contract/enums/ErrorCodeConstants.java
  9. 22 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/api/customercontract/CustomerContractApiImpl.java
  10. 10 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/CustomerContractController.java
  11. 30 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractListVO.java
  12. 16 1
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/customercontract/CustomerContractService.java
  13. 41 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/customercontract/CustomerContractServiceImpl.java
  14. 20 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/suppliercontract/SupplierContractServiceImpl.java

+ 10 - 0
yudao-module-finance/yudao-module-cash-biz/pom.xml

@@ -37,6 +37,16 @@
             <artifactId>yudao-module-employee-api</artifactId>
             <version>${revision}</version>
         </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-module-customer-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-module-contract-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
 
         <!-- 业务组件 -->
         <dependency>

+ 43 - 0
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/RefundInfoController.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo;
 
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -11,6 +12,12 @@ import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoRes
 import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoSaveReqVO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import cn.iocoder.yudao.module.cash.service.refundinfo.RefundInfoService;
+import cn.iocoder.yudao.module.contract.api.customercontract.CustomerContractApi;
+import cn.iocoder.yudao.module.contract.api.customercontract.dto.CustomerContractDTO;
+import cn.iocoder.yudao.module.customer.api.info.CustomerInfoApi;
+import cn.iocoder.yudao.module.customer.api.info.dto.CustomerInfoDTO;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -42,6 +49,15 @@ public class RefundInfoController {
     @Resource
     private FileApi fileApi;
 
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private CustomerInfoApi customerInfoApi;
+
+    @Resource
+    private CustomerContractApi customerContractApi;
+
     @PostMapping("/create")
     @Operation(summary = "创建回款信息")
     @ApiOperationSupport(order = 1)
@@ -78,6 +94,33 @@ public class RefundInfoController {
         RefundInfoDO refundInfo = refundInfoService.getRefundInfo(id);
         RefundInfoRespVO refundInfoRespVO = BeanUtils.toBean(refundInfo, RefundInfoRespVO.class);
 
+        // 客户名称
+        Long customerId = refundInfo.getCustomerId();
+        if (customerId != null) {
+            CustomerInfoDTO customerInfo = customerInfoApi.getCustomerInfo(customerId);
+            if (customerInfo != null) {
+                refundInfoRespVO.setCustomerName(customerInfo.getCustomerName());
+                refundInfoRespVO.setCustomerCode(customerInfo.getCustomerCode());
+            }
+        }
+
+        // 合同名称
+        Long contractId = refundInfo.getContractId();
+        if (contractId != null) {
+            CustomerContractDTO customerContract = customerContractApi.getCustomerContract(contractId);
+            if (customerContract != null) {
+                refundInfoRespVO.setContractName(customerContract.getCustomerContractName());
+                refundInfoRespVO.setContractCode(customerContract.getCustomerContractCode());
+            }
+        }
+
+        // 创建人姓名
+        String creator = refundInfo.getCreator();
+        if (StrUtil.isNotBlank(creator)) {
+            EmployeeRespDTO creatorName = employeeApi.getEmployeeById(Long.valueOf(creator));
+            refundInfoRespVO.setCreatorName(creatorName.getName());
+        }
+
         // 附件列表
         List<FileDTO> fileList = fileApi.getFileDTOListByBiz(refundInfoRespVO.getRefundInfoUuid());
         refundInfoRespVO.setFileList(fileList);

+ 2 - 2
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoPageReqVO.java

@@ -21,8 +21,8 @@ public class RefundInfoPageReqVO extends PageParam {
     @Schema(description = "回款编号:年月日+uuid")
     private String refundInfoUuid;
 
-    @Schema(description = "客户名称")
-    private String customerName;
+    @Schema(description = "客户id")
+    private Long customerId;
 
     @Schema(description = "合同名称")
     private Long contractName;

+ 0 - 1
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoSaveReqVO.java

@@ -25,7 +25,6 @@ public class RefundInfoSaveReqVO {
     private Long customerId;
 
     @Schema(description = "合同id", example = "1")
-    @NotNull(message = "合同id不能为空")
     private Long contractId;
 
     @Schema(description = "回款日期", example = "2024-08-07")

+ 14 - 10
yudao-module-finance/yudao-module-cash-biz/src/main/resources/mapper/refundinfo/RefundInfoMapper.xml

@@ -15,6 +15,8 @@
         FROM
             finance_refund_info fri
         LEFT JOIN employee_info ei ON fri.creator = ei.id AND ei.deleted = 0
+        LEFT JOIN customer_info ci ON fri.customer_id = ci.id AND ci.deleted = 0
+        LEFT JOIN finance_customer_contract fcc ON fri.contract_id = fcc.id AND fcc.deleted = 0
         WHERE
             fri.deleted = 0
         <if test="page.refundTitle != null and page.refundTitle != ''">
@@ -23,11 +25,11 @@
         <if test="page.refundInfoUuid != null and page.refundInfoUuid != ''">
             AND fri.refund_info_uuid like concat('%',#{page.refundInfoUuid},'%')
         </if>
-        <if test="page.customerName != null and page.customerName != ''">
-            AND fri.customer_id like concat('%',#{page.customerName},'%')
+        <if test="page.customerId != null">
+            AND fri.customer_id like concat('%',#{page.customerId},'%')
         </if>
         <if test="page.contractName != null and page.contractName != ''">
-            AND fri.contract_id like concat('%',#{page.contractName},'%')
+            AND fcc.customer_contract_name like concat('%',#{page.contractName},'%')
         </if>
         <if test="page.refundDate != null and page.refundDate.length > 0">
             AND fri.refund_date BETWEEN #{page.refundDate[0]} AND #{page.refundDate[1]}
@@ -45,11 +47,11 @@
             fri.refund_info_uuid,
             fri.refund_title,
             fri.customer_id,
-           '客户名称' customerName,
-           '客户编码' customerCode,
+            ci.customer_name customerName,
+            ci.customer_code customerCode,
             fri.contract_id,
-           '合同名称' contractName,
-           '合同编码' contractCode,
+            fcc.customer_contract_name contractName,
+            fcc.customer_contract_code contractCode,
             fri.refund_date,
             fri.refund_money,
             fri.refund_cycle,
@@ -69,6 +71,8 @@
         FROM
             finance_refund_info fri
                 LEFT JOIN employee_info ei ON fri.creator = ei.id AND ei.deleted = 0
+                LEFT JOIN customer_info ci ON fri.customer_id = ci.id AND ci.deleted = 0
+                LEFT JOIN finance_customer_contract fcc ON fri.contract_id = fcc.id AND fcc.deleted = 0
         WHERE
             fri.deleted = 0
         <if test="page.refundTitle != null and page.refundTitle != ''">
@@ -77,11 +81,11 @@
         <if test="page.refundInfoUuid != null and page.refundInfoUuid != ''">
             AND fri.refund_info_uuid like concat('%',#{page.refundInfoUuid},'%')
         </if>
-        <if test="page.customerName != null and page.customerName != ''">
-            AND fri.customer_id like concat('%',#{page.customerName},'%')
+        <if test="page.customerId != null">
+            AND fri.customer_id like concat('%',#{page.customerId},'%')
         </if>
         <if test="page.contractName != null and page.contractName != ''">
-            AND fri.contract_id like concat('%',#{page.contractName},'%')
+            AND fcc.customer_contract_name like concat('%',#{page.contractName},'%')
         </if>
         <if test="page.refundDate != null and page.refundDate.length > 0">
             AND fri.refund_date BETWEEN #{page.refundDate[0]} AND #{page.refundDate[1]}

+ 14 - 0
yudao-module-finance/yudao-module-contract-api/src/main/java/cn/iocoder/yudao/module/contract/api/customercontract/CustomerContractApi.java

@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.contract.api.customercontract;
+
+import cn.iocoder.yudao.module.contract.api.customercontract.dto.CustomerContractDTO;
+
+public interface CustomerContractApi {
+
+    /**
+     * 获得销售合同信息
+     *
+     * @param id 主键id
+     * @return 销售合同信息
+     */
+    CustomerContractDTO getCustomerContract(Long id);
+}

+ 62 - 0
yudao-module-finance/yudao-module-contract-api/src/main/java/cn/iocoder/yudao/module/contract/api/customercontract/dto/CustomerContractDTO.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.contract.api.customercontract.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CustomerContractDTO {
+
+    /**
+     * 主键id
+     */
+    private Long id;
+    /**
+     * uuid
+     */
+    private String customerContractUuid;
+    /**
+     * 合同编号,年月日+uuid
+     */
+    private String customerContractCode;
+    /**
+     * 合同名称
+     */
+    private String customerContractName;
+    /**
+     * 客户id
+     */
+    private Long customerId;
+    /**
+     * 合同开始日期
+     */
+    private String startDate;
+    /**
+     * 合同结束日期
+     */
+    private String endDate;
+    /**
+     * 合同金额
+     */
+    private BigDecimal money;
+    /**
+     * 合同负责人
+     */
+    private Long ownerEmployeeId;
+    /**
+     * 负责人部门
+     */
+    private Long deptId;
+    /**
+     * 合同状态:0、未归档;1、已归档;2、已完结
+     */
+    private String contractStatus;
+    /**
+     * 是否关闭 0开启 1关闭
+     */
+    private Integer closed;
+    /**
+     * 是否终止 0否 1是
+     */
+    private Integer terminate;
+}

+ 2 - 0
yudao-module-finance/yudao-module-contract-api/src/main/java/cn/iocoder/yudao/module/contract/enums/ErrorCodeConstants.java

@@ -7,6 +7,7 @@ public interface ErrorCodeConstants {
     ErrorCode SUPPLIER_CONTRACT_NOT_EXISTS = new ErrorCode(1_052_000_001, "采购合同信息不存在");
     ErrorCode SUPPLIER_CONTRACT_NOT_CLOSED = new ErrorCode(1_052_000_002, "采购合同已经是开启状态");
     ErrorCode SUPPLIER_CONTRACT_CODE_EXISTS = new ErrorCode(1_052_000_003, "采购合同编号已存在");
+    ErrorCode SUPPLIER_CONTRACT_NAME_EXISTS = new ErrorCode(1_052_000_004, "采购合同名称已存在");
     // ========== 采购合同历史信息 1_052_001_001 ==========
     ErrorCode SUPPLIER_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(1_052_001_001, "采购合同历史信息不存在");
 
@@ -14,6 +15,7 @@ public interface ErrorCodeConstants {
     ErrorCode CUSTOMER_CONTRACT_NOT_EXISTS = new ErrorCode(1_052_002_001, "销售合同信息不存在");
     ErrorCode CUSTOMER_CONTRACT_NOT_CLOSED = new ErrorCode(1_052_002_002, "销售合同已经是开启状态");
     ErrorCode CUSTOMER_CONTRACT_CODE_EXISTS = new ErrorCode(1_052_002_003, "销售合同编号已存在");
+    ErrorCode CUSTOMER_CONTRACT_NAME_EXISTS = new ErrorCode(1_052_002_004, "销售合同名称已存在");
     // ========== 销售合同历史信息 1_052_003_001 ==========
     ErrorCode CUSTOMER_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(1_052_003_001, "销售合同历史信息不存在");
 

+ 22 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/api/customercontract/CustomerContractApiImpl.java

@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.contract.api.customercontract;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.contract.api.customercontract.dto.CustomerContractDTO;
+import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractDO;
+import cn.iocoder.yudao.module.contract.service.customercontract.CustomerContractService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class CustomerContractApiImpl implements CustomerContractApi {
+
+    @Resource
+    private CustomerContractService customerContractService;
+
+    @Override
+    public CustomerContractDTO getCustomerContract(Long id) {
+        CustomerContractDO customerContract = customerContractService.getCustomerContract(id);
+        return BeanUtils.toBean(customerContract, CustomerContractDTO.class);
+    }
+}

+ 10 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/CustomerContractController.java

@@ -160,6 +160,16 @@ public class CustomerContractController {
         return success(pageResult);
     }
 
+    @GetMapping("/list")
+    @Operation(summary = "获得销售合同信息列表,closed:0开启1关闭")
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
+    public CommonResult<List<CustomerContractListVO>> getCustomerContractList(@Valid @ParameterObject CustomerContractListVO listVO) {
+        List<CustomerContractDO> listResult = customerContractService.getCustomerContractList(listVO);
+        List<CustomerContractListVO> listVOList = BeanUtils.toBean(listResult, CustomerContractListVO.class);
+        return success(listVOList);
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出销售合同信息 Excel")
     @ApiOperationSupport(order = 7)

+ 30 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractListVO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "销售合同信息列表 Request VO")
+@Data
+public class CustomerContractListVO {
+
+    @Schema(description = "主键id")
+    private Long id;
+
+    @Schema(description = "合同编号,年月日+uuid")
+    private String customerContractCode;
+
+    @Schema(description = "合同名称")
+    private String customerContractName;
+
+    @Schema(description = "客户id,不传客户id返回空列表")
+    private Long customerId;
+
+    @Schema(description = "合同开始日期")
+    private String startDate;
+
+    @Schema(description = "合同结束日期")
+    private String endDate;
+
+    @Schema(description = "是否关闭 0开启 1关闭")
+    private Integer closed;
+}

+ 16 - 1
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/customercontract/CustomerContractService.java

@@ -2,11 +2,18 @@ package cn.iocoder.yudao.module.contract.service.customercontract;
 
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.*;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractCloseReqVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractListVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractPageReqVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractRespVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractSaveReqVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractStatusReqVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractTerminatedReqVO;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractDO;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractHistoryDO;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 销售合同信息 Service 接口
@@ -61,6 +68,14 @@ public interface CustomerContractService {
      */
     PageResult<CustomerContractRespVO> getCustomerContractPage(CustomerContractPageReqVO pageReqVO);
 
+    /**
+     * 获得销售合同信息列表
+     *
+     * @param listVO 列表查询
+     * @return 销售合同信息列表
+     */
+    List<CustomerContractDO> getCustomerContractList(CustomerContractListVO listVO);
+
     /**
      * 开启销售合同
      *

+ 41 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/customercontract/CustomerContractServiceImpl.java

@@ -18,13 +18,16 @@ import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
+import org.w3c.dom.ls.LSException;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Collections;
 import java.util.ConcurrentModificationException;
 import java.util.List;
 import java.util.Objects;
@@ -74,6 +77,10 @@ public class CustomerContractServiceImpl implements CustomerContractService {
         if (StrUtil.isNotBlank(customerContractCode)) {
             validateCustomerContractCode(customerContractCode);
         }
+        String customerContractName = createReqVO.getCustomerContractName();
+        if (StrUtil.isNotBlank(customerContractName)) {
+            validateCustomerContractName(customerContractName, createReqVO.getId());
+        }
         // 插入
         CustomerContractDO customerContract = BeanUtils.toBean(createReqVO, CustomerContractDO.class);
         // uuid
@@ -111,6 +118,17 @@ public class CustomerContractServiceImpl implements CustomerContractService {
         return customerContract.getId();
     }
 
+    private void validateCustomerContractName(String customerContractName, Long id) {
+        LambdaQueryWrapper<CustomerContractDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(CustomerContractDO::getCustomerContractName, customerContractName);
+        if (Objects.nonNull(id)) {
+            lambdaQueryWrapper.ne(CustomerContractDO::getId, id);
+        }
+        if (customerContractMapper.selectCount(lambdaQueryWrapper) > 0) {
+            throw exception(CUSTOMER_CONTRACT_NAME_EXISTS);
+        }
+    }
+
     private void validateCustomerContractCode(String customerContractCode) {
         Long aLong = customerContractMapper.selectCount(CustomerContractDO::getCustomerContractCode, customerContractCode);
         if (aLong > 0) {
@@ -122,6 +140,10 @@ public class CustomerContractServiceImpl implements CustomerContractService {
     public void updateCustomerContract(CustomerContractSaveReqVO updateReqVO) {
         // 校验存在
         CustomerContractDO customerContractDO = validateCustomerContractExists(updateReqVO.getId());
+        String customerContractName = updateReqVO.getCustomerContractName();
+        if (StrUtil.isNotBlank(customerContractName)) {
+            validateCustomerContractName(customerContractName, updateReqVO.getId());
+        }
         // 更新
         CustomerContractDO updateObj = BeanUtils.toBean(updateReqVO, CustomerContractDO.class);
         // 负责人及部门
@@ -190,6 +212,25 @@ public class CustomerContractServiceImpl implements CustomerContractService {
         return new PageResult<>(pageList, pageCount);
     }
 
+    @Override
+    public List<CustomerContractDO> getCustomerContractList(CustomerContractListVO listVO) {
+        // Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // if (loginEmployee == null || loginEmployee.getDeptId() == null) {
+        //     // 没有员工信息或部门信息,返回空集合
+        //     return Collections.emptyList();
+        // }
+        if (listVO.getCustomerId() == null) {
+            // 没有客户id,返回空集合
+            return Collections.emptyList();
+        }
+        LambdaQueryWrapper<CustomerContractDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(CustomerContractDO::getCustomerId, listVO.getCustomerId())
+                .eq(listVO.getClosed() != null, CustomerContractDO::getClosed, listVO.getClosed());
+        return customerContractMapper.selectList(lambdaQueryWrapper);
+
+    }
+
     @Override
     public Integer openCustomerContract(Long id) {
         CustomerContractDO customerContractDO = validateCustomerContractExists(id);

+ 20 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/suppliercontract/SupplierContractServiceImpl.java

@@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -73,6 +74,10 @@ public class SupplierContractServiceImpl implements SupplierContractService {
         if (StrUtil.isNotBlank(supplierContractCode)) {
             validateSupplierContractCode(supplierContractCode);
         }
+        String supplierContractName = createReqVO.getSupplierContractName();
+        if (StrUtil.isNotBlank(supplierContractName)) {
+            validateSupplierContractName(supplierContractName, createReqVO.getId());
+        }
         // 插入
         SupplierContractDO supplierContract = BeanUtils.toBean(createReqVO, SupplierContractDO.class);
         // uuid
@@ -110,6 +115,17 @@ public class SupplierContractServiceImpl implements SupplierContractService {
         return supplierContract.getId();
     }
 
+    private void validateSupplierContractName(String supplierContractName, Long id) {
+        LambdaQueryWrapper<SupplierContractDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(SupplierContractDO::getSupplierContractName, supplierContractName);
+        if (Objects.nonNull(id)) {
+            lambdaQueryWrapper.ne(SupplierContractDO::getId, id);
+        }
+        if (supplierContractMapper.selectCount(lambdaQueryWrapper) > 0) {
+            throw exception(SUPPLIER_CONTRACT_NAME_EXISTS);
+        }
+    }
+
     private void validateSupplierContractCode(String supplierContractCode) {
         Long aLong = supplierContractMapper.selectCount(SupplierContractDO::getSupplierContractCode, supplierContractCode);
         if (aLong > 0) {
@@ -121,6 +137,10 @@ public class SupplierContractServiceImpl implements SupplierContractService {
     public void updateSupplierContract(SupplierContractSaveReqVO updateReqVO) {
         // 校验存在
         SupplierContractDO supplierContractDO = validateSupplierContractExists(updateReqVO.getId());
+        String supplierContractName = updateReqVO.getSupplierContractName();
+        if (StrUtil.isNotBlank(supplierContractName)) {
+            validateSupplierContractName(supplierContractName, updateReqVO.getId());
+        }
         // 更新
         SupplierContractDO updateObj = BeanUtils.toBean(updateReqVO, SupplierContractDO.class);
         // 负责人及部门