Browse Source

1、销售合同管理接口完善

dongpo 7 months ago
parent
commit
61d232c2d0
18 changed files with 1006 additions and 269 deletions
  1. 6 6
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/GeneralStatusEnum.java
  2. 203 51
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/CustomerContractController.java
  3. 21 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractCloseReqVO.java
  4. 17 47
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractPageReqVO.java
  5. 56 20
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractRespVO.java
  6. 30 44
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractSaveReqVO.java
  7. 21 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractStatusReqVO.java
  8. 25 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractTerminatedReqVO.java
  9. 6 0
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/suppliercontract/SupplierContractController.java
  10. 1 1
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/suppliercontract/vo/SupplierContractCloseReqVO.java
  11. 9 2
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/dal/mysql/customercontract/CustomerContractHistoryMapper.java
  12. 31 14
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/dal/mysql/customercontract/CustomerContractMapper.java
  13. 78 16
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/customercontract/CustomerContractService.java
  14. 224 30
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/customercontract/CustomerContractServiceImpl.java
  15. 13 13
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/suppliercontract/SupplierContractService.java
  16. 25 25
      yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/suppliercontract/SupplierContractServiceImpl.java
  17. 91 0
      yudao-module-finance/yudao-module-contract-biz/src/main/resources/mapper/customercontract/CustomerContractHistoryMapper.xml
  18. 149 0
      yudao-module-finance/yudao-module-contract-biz/src/main/resources/mapper/customercontract/CustomerContractMapper.xml

+ 6 - 6
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/GeneralStatusEnum.java

@@ -7,11 +7,11 @@ public enum GeneralStatusEnum {
     /**
      * 0否
      */
-    DISABLE(0, "否"),
+    NO(0, "否"),
     /**
      * 1是
      */
-    ENABLE(1, "是");
+    YES(1, "是");
 
     private final Integer status;
     private final String statusDesc;
@@ -29,11 +29,11 @@ public enum GeneralStatusEnum {
         return statusDesc;
     }
 
-    public static boolean isDisable(Integer status) {
-        return DISABLE.getStatus().equals(status);
+    public static boolean isNo(Integer status) {
+        return NO.getStatus().equals(status);
     }
 
-    public static boolean isEnable(Integer status) {
-        return ENABLE.getStatus().equals(status);
+    public static boolean isYes(Integer status) {
+        return YES.getStatus().equals(status);
     }
 }

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

@@ -1,21 +1,28 @@
 package cn.iocoder.yudao.module.contract.controller.admin.customercontract;
 
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.enums.GeneralStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-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.*;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractDO;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractHistoryDO;
+import cn.iocoder.yudao.module.contract.enums.ContractStatusEnum;
 import cn.iocoder.yudao.module.contract.service.customercontract.CustomerContractService;
+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 cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
+import org.springdoc.api.annotations.ParameterObject;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -23,7 +30,11 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -37,16 +48,37 @@ public class CustomerContractController {
     @Resource
     private CustomerContractService customerContractService;
 
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private DeptApi deptApi;
+
+    @Resource
+    private FileApi fileApi;
+
+
+    @GetMapping("/getCustomerContractCode")
+    @Operation(summary = "获取销售合同编号")
+    @ApiOperationSupport(order = 1)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:create')")
+    public CommonResult<String> getCustomerContractCode() {
+        return success(customerContractService.getCustomerContractCode());
+    }
+
+
     @PostMapping("/create")
     @Operation(summary = "创建销售合同信息")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:create')")
+    @ApiOperationSupport(order = 2)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:create')")
     public CommonResult<Long> createCustomerContract(@Valid @RequestBody CustomerContractSaveReqVO createReqVO) {
         return success(customerContractService.createCustomerContract(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新销售合同信息")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    @ApiOperationSupport(order = 3)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
     public CommonResult<Boolean> updateCustomerContract(@Valid @RequestBody CustomerContractSaveReqVO updateReqVO) {
         customerContractService.updateCustomerContract(updateReqVO);
         return success(true);
@@ -54,8 +86,9 @@ public class CustomerContractController {
 
     @DeleteMapping("/delete")
     @Operation(summary = "删除销售合同信息")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:delete')")
+    @ApiOperationSupport(order = 4)
+    @Parameter(name = "id", description = "主键id", required = true)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:delete')")
     public CommonResult<Boolean> deleteCustomerContract(@RequestParam("id") Long id) {
         customerContractService.deleteCustomerContract(id);
         return success(true);
@@ -63,75 +96,194 @@ public class CustomerContractController {
 
     @GetMapping("/get")
     @Operation(summary = "获得销售合同信息")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
+    @ApiOperationSupport(order = 5)
+    @Parameter(name = "id", description = "主键id", required = true, example = "1")
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
     public CommonResult<CustomerContractRespVO> getCustomerContract(@RequestParam("id") Long id) {
         CustomerContractDO customerContract = customerContractService.getCustomerContract(id);
-        return success(BeanUtils.toBean(customerContract, CustomerContractRespVO.class));
+        if (Objects.isNull(customerContract)) {
+            return success(null);
+        }
+        CustomerContractRespVO customerContractRespVO = BeanUtils.toBean(customerContract, CustomerContractRespVO.class);
+        // 是否描述集合
+        Map<Integer, String> generalStatusMap = Arrays.stream(GeneralStatusEnum.values())
+                .collect(Collectors.toMap(GeneralStatusEnum::getStatus, GeneralStatusEnum::getName));
+        // 是否框架合同
+        customerContractRespVO.setIsFrameContractDesc(generalStatusMap.getOrDefault(customerContract.getIsFrameContract(), "未知"));
+        // 负责人名称
+        EmployeeRespDTO ownerEmployee = employeeApi.getEmployeeById(customerContract.getOwnerEmployeeId());
+        if (Objects.nonNull(ownerEmployee)) {
+            customerContractRespVO.setOwnerEmployeeName(ownerEmployee.getName());
+        }
+        // 部门名称
+        DeptRespDTO ownerDept = deptApi.getDept(customerContract.getDeptId());
+        if (Objects.nonNull(ownerDept)) {
+            customerContractRespVO.setDeptName(ownerDept.getName());
+        }
+        // 合同状态描述
+        Map<String, String> contractStatusMap = Arrays.stream(ContractStatusEnum.values())
+                .collect(Collectors.toMap(ContractStatusEnum::getStatus, ContractStatusEnum::getDesc));
+        customerContractRespVO.setContractStatusDesc(contractStatusMap.getOrDefault(customerContract.getContractStatus(), "未知"));
+        // 是否关闭
+        customerContractRespVO.setClosedDesc(generalStatusMap.getOrDefault(customerContract.getClosed(), "未知"));
+        // 是否终止
+        customerContractRespVO.setTerminateDesc(generalStatusMap.getOrDefault(customerContract.getTerminate(), "未知"));
+
+        // 附件
+        List<FileDTO> fileDTOList = fileApi.getFileDTOListByBiz(customerContract.getCustomerContractUuid());
+        customerContractRespVO.setFileList(fileDTOList);
+
+        return success(customerContractRespVO);
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得销售合同信息分页")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
-    public CommonResult<PageResult<CustomerContractRespVO>> getCustomerContractPage(@Valid CustomerContractPageReqVO pageReqVO) {
-        PageResult<CustomerContractDO> pageResult = customerContractService.getCustomerContractPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, CustomerContractRespVO.class));
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
+    public CommonResult<PageResult<CustomerContractRespVO>> getCustomerContractPage(@Valid @ParameterObject CustomerContractPageReqVO pageReqVO) {
+        PageResult<CustomerContractRespVO> pageResult = customerContractService.getCustomerContractPage(pageReqVO);
+
+        return success(pageResult);
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出销售合同信息 Excel")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:export')")
+    @ApiOperationSupport(order = 7)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:export')")
     @ApiAccessLog(operateType = EXPORT)
-    public void exportCustomerContractExcel(@Valid CustomerContractPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
+    public void exportCustomerContractExcel(@ParameterObject CustomerContractPageReqVO pageReqVO,
+                                            HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<CustomerContractDO> list = customerContractService.getCustomerContractPage(pageReqVO).getList();
+        List<CustomerContractRespVO> list = customerContractService.getCustomerContractPage(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "销售合同信息.xls", "数据", CustomerContractRespVO.class,
-                        BeanUtils.toBean(list, CustomerContractRespVO.class));
+                list);
     }
 
-    // ==================== 子表(销售合同历史信息) ====================
+    @PutMapping("/open")
+    @Operation(summary = "开启销售合同")
+    @ApiOperationSupport(order = 8)
+    @Parameter(name = "id", description = "主键id", required = true, example = "1")
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    public CommonResult<Boolean> openCustomerContract(@RequestParam("id") Long id) {
+        customerContractService.openCustomerContract(id);
+        return success(true);
+    }
 
-    @GetMapping("/customer-contract-history/page")
-    @Operation(summary = "获得销售合同历史信息分页")
-    @Parameter(name = "customerContractCode", description = "合同编号,年月日+uuid")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
-    public CommonResult<PageResult<CustomerContractHistoryDO>> getCustomerContractHistoryPage(PageParam pageReqVO,
-                                                                                        @RequestParam("customerContractCode") String customerContractCode) {
-        return success(customerContractService.getCustomerContractHistoryPage(pageReqVO, customerContractCode));
+    @PutMapping("/close")
+    @Operation(summary = "关闭销售合同")
+    @ApiOperationSupport(order = 9)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    public CommonResult<Boolean> closeCustomerContract(@Valid @RequestBody CustomerContractCloseReqVO closeReqVO) {
+        customerContractService.closeCustomerContract(closeReqVO);
+        return success(true);
     }
 
-    @PostMapping("/customer-contract-history/create")
-    @Operation(summary = "创建销售合同历史信息")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:create')")
-    public CommonResult<Long> createCustomerContractHistory(@Valid @RequestBody CustomerContractHistoryDO customerContractHistory) {
-        return success(customerContractService.createCustomerContractHistory(customerContractHistory));
+    @PutMapping("/terminate")
+    @Operation(summary = "终止销售合同")
+    @ApiOperationSupport(order = 10)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    public CommonResult<Boolean> terminateCustomerContract(@Valid @RequestBody CustomerContractTerminatedReqVO terminatedReqVO) {
+        customerContractService.terminateCustomerContract(terminatedReqVO);
+        return success(true);
     }
 
-    @PutMapping("/customer-contract-history/update")
-    @Operation(summary = "更新销售合同历史信息")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
-    public CommonResult<Boolean> updateCustomerContractHistory(@Valid @RequestBody CustomerContractHistoryDO customerContractHistory) {
-        customerContractService.updateCustomerContractHistory(customerContractHistory);
+    @PutMapping("/editCustomerStatus")
+    @Operation(summary = "修改销售合同状态")
+    @ApiOperationSupport(order = 11)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    public CommonResult<Boolean> editCustomerStatus(@Valid @RequestBody CustomerContractStatusReqVO statusReqVO) {
+        customerContractService.editCustomerStatus(statusReqVO);
         return success(true);
     }
 
-    @DeleteMapping("/customer-contract-history/delete")
-    @Parameter(name = "id", description = "编号", required = true)
-    @Operation(summary = "删除销售合同历史信息")
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:delete')")
-    public CommonResult<Boolean> deleteCustomerContractHistory(@RequestParam("id") Long id) {
-        customerContractService.deleteCustomerContractHistory(id);
+    @PutMapping("/alter")
+    @Operation(summary = "变更销售合同信息")
+    @ApiOperationSupport(order = 12)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    public CommonResult<Boolean> alterCustomerContract(@Valid @RequestBody CustomerContractSaveReqVO updateReqVO) {
+        customerContractService.alterCustomerContract(updateReqVO);
         return success(true);
     }
 
-	@GetMapping("/customer-contract-history/get")
-	@Operation(summary = "获得销售合同历史信息")
-	@Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
-	public CommonResult<CustomerContractHistoryDO> getCustomerContractHistory(@RequestParam("id") Long id) {
-	    return success(customerContractService.getCustomerContractHistory(id));
-	}
+
+    // ==================== 子表(销售合同历史信息) ====================
+
+    @GetMapping("/customer-contract-history/page")
+    @Operation(summary = "获得销售合同历史信息分页")
+    @ApiOperationSupport(order = 13)
+    @Parameter(name = "code", description = "合同编号,年月日+uuid")
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
+    public CommonResult<PageResult<CustomerContractHistoryDO>> getCustomerContractHistoryPage(PageParam pageReqVO,
+                                                                                              @RequestParam("code") String code) {
+        return success(customerContractService.getCustomerContractHistoryPage(pageReqVO, code));
+    }
+
+    // @PostMapping("/customer-contract-history/create")
+    // @Operation(summary = "创建销售合同历史信息")
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:create')")
+    // public CommonResult<Long> createCustomerContractHistory(@Valid @RequestBody CustomerContractHistoryDO customerContractHistory) {
+    //     return success(customerContractService.createCustomerContractHistory(customerContractHistory));
+    // }
+
+    // @PutMapping("/customer-contract-history/update")
+    // @Operation(summary = "更新销售合同历史信息")
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:update')")
+    // public CommonResult<Boolean> updateCustomerContractHistory(@Valid @RequestBody CustomerContractHistoryDO customerContractHistory) {
+    //     customerContractService.updateCustomerContractHistory(customerContractHistory);
+    //     return success(true);
+    // }
+
+    // @DeleteMapping("/customer-contract-history/delete")
+    // @Parameter(name = "id", description = "编号", required = true)
+    // @Operation(summary = "删除销售合同历史信息")
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:delete')")
+    // public CommonResult<Boolean> deleteCustomerContractHistory(@RequestParam("id") Long id) {
+    //     customerContractService.deleteCustomerContractHistory(id);
+    //     return success(true);
+    // }
+
+    @GetMapping("/customer-contract-history/get")
+    @Operation(summary = "获得销售合同历史信息")
+    @ApiOperationSupport(order = 14)
+    @Parameter(name = "id", description = "主键id", required = true)
+    // @PreAuthorize("@ss.hasPermission('contract:customer-contract:query')")
+    public CommonResult<CustomerContractRespVO> getCustomerContractHistory(@RequestParam("id") Long id) {
+        CustomerContractHistoryDO customerContractHistory = customerContractService.getCustomerContractHistory(id);
+        if (Objects.isNull(customerContractHistory)) {
+            return success(null);
+        }
+        CustomerContractRespVO customerContractRespVO = BeanUtils.toBean(customerContractHistory, CustomerContractRespVO.class);
+
+        // 是否描述集合
+        Map<Integer, String> generalStatusMap = Arrays.stream(GeneralStatusEnum.values())
+                .collect(Collectors.toMap(GeneralStatusEnum::getStatus, GeneralStatusEnum::getName));
+        // 是否框架合同
+        customerContractRespVO.setIsFrameContractDesc(generalStatusMap.getOrDefault(customerContractHistory.getIsFrameContract(), "未知"));
+        // 负责人名称
+        EmployeeRespDTO ownerEmployee = employeeApi.getEmployeeById(customerContractHistory.getOwnerEmployeeId());
+        if (Objects.nonNull(ownerEmployee)) {
+            customerContractRespVO.setOwnerEmployeeName(ownerEmployee.getName());
+        }
+        // 部门名称
+        DeptRespDTO ownerDept = deptApi.getDept(customerContractHistory.getDeptId());
+        if (Objects.nonNull(ownerDept)) {
+            customerContractRespVO.setDeptName(ownerDept.getName());
+        }
+        // 合同状态描述
+        Map<String, String> contractStatusMap = Arrays.stream(ContractStatusEnum.values())
+                .collect(Collectors.toMap(ContractStatusEnum::getStatus, ContractStatusEnum::getDesc));
+        customerContractRespVO.setContractStatusDesc(contractStatusMap.getOrDefault(customerContractHistory.getContractStatus(), "未知"));
+        // 是否关闭
+        customerContractRespVO.setClosedDesc(generalStatusMap.getOrDefault(customerContractHistory.getClosed(), "未知"));
+        // 是否终止
+        customerContractRespVO.setTerminateDesc(generalStatusMap.getOrDefault(customerContractHistory.getTerminate(), "未知"));
+
+        // 附件
+        List<FileDTO> fileDTOList = fileApi.getFileDTOListByBiz(customerContractHistory.getCustomerContractUuid());
+        customerContractRespVO.setFileList(fileDTOList);
+
+        return success(customerContractRespVO);
+    }
 
 }

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

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 销售合同关闭 Request VO")
+@Data
+public class CustomerContractCloseReqVO {
+
+    @Schema(description = "主键id")
+    @NotNull(message = "主键id不能为空")
+    private Long id;
+
+    @Schema(description = "关闭原因", example = "不喜欢")
+    @NotBlank(message = "关闭原因不能为空")
+    private String closeReason;
+
+}

+ 17 - 47
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractPageReqVO.java

@@ -1,14 +1,13 @@
 package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import java.math.BigDecimal;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
 
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
 
 @Schema(description = "管理后台 - 销售合同信息分页 Request VO")
 @Data
@@ -16,68 +15,39 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class CustomerContractPageReqVO extends PageParam {
 
-    @Schema(description = "uuid", example = "22528")
-    private String customerContractUuid;
-
     @Schema(description = "合同编号,年月日+uuid")
     private String customerContractCode;
 
-    @Schema(description = "合同名称", example = "芋艿")
+    @Schema(description = "合同名称", example = "合同名称")
     private String customerContractName;
 
-    @Schema(description = "是否为框架合同 0否 1是")
+    @Schema(description = "是否为框架合同 0否 1是", example = "0")
     private Integer isFrameContract;
 
-    @Schema(description = "客户id", example = "14976")
-    private Long customerId;
+    @Schema(description = "客户id", example = "客户id")
+    private String customerId;
 
-    @Schema(description = "客户名称", example = "李四")
-    private String customerName;
-
-    @Schema(description = "合同开始日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @Schema(description = "合同开始日期", example = "2024-08-12,2024-08-12")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private String[] startDate;
 
-    @Schema(description = "合同结束日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @Schema(description = "合同结束日期", example = "2024-08-12,2024-08-12")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private String[] endDate;
 
-    @Schema(description = "合同金额")
-    private BigDecimal money;
-
-    @Schema(description = "合同负责人", example = "4502")
-    private Long ownerEmployeeId;
+    @Schema(description = "合同负责人", example = "5122")
+    private String ownerEmployeeName;
 
-    @Schema(description = "负责人部门", example = "14715")
+    @Schema(description = "负责人部门", example = "29650")
     private Long deptId;
 
-    @Schema(description = "合同状态:0、未归档;1、已归档;2、已完结", example = "1")
+    @Schema(description = "合同状态:0、未归档;1、已归档;2、已完结", example = "2")
     private String contractStatus;
 
     @Schema(description = "是否关闭 0开启 1关闭")
     private Integer closed;
 
-    @Schema(description = "关闭原因", example = "不香")
-    private String closeReason;
-
     @Schema(description = "是否终止 0否 1是")
     private Integer terminate;
 
-    @Schema(description = "终止日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private String[] terminateDate;
-
-    @Schema(description = "终止原因", example = "不香")
-    private String terminateReason;
-
-    @Schema(description = "是否变更 0否 1是")
-    private Integer isChange;
-
-    @Schema(description = "备注")
-    private String remarks;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
 }

+ 56 - 20
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/customercontract/vo/CustomerContractRespVO.java

@@ -1,44 +1,49 @@
 package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
 
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.util.*;
+import lombok.Data;
+
 import java.math.BigDecimal;
-import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
+import java.util.List;
 
 @Schema(description = "管理后台 - 销售合同信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
 public class CustomerContractRespVO {
 
-    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3408")
+    @Schema(description = "主键id")
     @ExcelProperty("主键id")
     private Long id;
 
-    @Schema(description = "uuid", example = "22528")
-    @ExcelProperty("uuid")
+    @Schema(description = "合同uuid")
+    @ExcelProperty("合同uuid")
     private String customerContractUuid;
 
     @Schema(description = "合同编号,年月日+uuid")
     @ExcelProperty("合同编号,年月日+uuid")
     private String customerContractCode;
 
-    @Schema(description = "合同名称", example = "芋艿")
+    @Schema(description = "合同名称")
     @ExcelProperty("合同名称")
     private String customerContractName;
 
-    @Schema(description = "是否为框架合同 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "是否为框架合同 0否 1是")
     @ExcelProperty("是否为框架合同 0否 1是")
     private Integer isFrameContract;
 
-    @Schema(description = "客户id", example = "14976")
+    @Schema(description = "是否为框架合同描述 0否 1是")
+    @ExcelProperty("是否为框架合同描述 0否 1是")
+    private String isFrameContractDesc;
+
+    @Schema(description = "客户id", example = "4213")
     @ExcelProperty("客户id")
     private Long customerId;
 
-    @Schema(description = "客户名称", example = "李四")
+    @Schema(description = "客户名称", example = "王五")
     @ExcelProperty("客户名称")
     private String customerName;
 
@@ -54,39 +59,59 @@ public class CustomerContractRespVO {
     @ExcelProperty("合同金额")
     private BigDecimal money;
 
-    @Schema(description = "合同负责人", example = "4502")
+    @Schema(description = "合同负责人")
     @ExcelProperty("合同负责人")
     private Long ownerEmployeeId;
 
-    @Schema(description = "负责人部门", example = "14715")
+    @Schema(description = "合同负责人")
+    @ExcelProperty("合同负责人")
+    private String ownerEmployeeName;
+
+    @Schema(description = "负责人部门")
     @ExcelProperty("负责人部门")
     private Long deptId;
 
-    @Schema(description = "合同状态:0、未归档;1、已归档;2、已完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @Schema(description = "负责人部门名称")
+    @ExcelProperty("负责人部门名称")
+    private String deptName;
+
+    @Schema(description = "合同状态:0、未归档;1、已归档;2、已完结")
     @ExcelProperty("合同状态:0、未归档;1、已归档;2、已完结")
     private String contractStatus;
 
-    @Schema(description = "是否关闭 0开启 1关闭", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "合同状态描述:0、未归档;1、已归档;2、已完结")
+    @ExcelProperty("合同状态描述:0、未归档;1、已归档;2、已完结")
+    private String contractStatusDesc;
+
+    @Schema(description = "是否关闭 0开启 1关闭")
     @ExcelProperty("是否关闭 0开启 1关闭")
     private Integer closed;
 
-    @Schema(description = "关闭原因", example = "不香")
+    @Schema(description = "是否关闭 0开启 1关闭")
+    @ExcelProperty("是否关闭 0开启 1关闭")
+    private String closedDesc;
+
+    @Schema(description = "关闭原因")
     @ExcelProperty("关闭原因")
     private String closeReason;
 
-    @Schema(description = "是否终止 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "是否终止 0否 1是")
     @ExcelProperty("是否终止 0否 1是")
     private Integer terminate;
 
+    @Schema(description = "是否终止 0否 1是")
+    @ExcelProperty("是否终止 0否 1是")
+    private String terminateDesc;
+
     @Schema(description = "终止日期")
     @ExcelProperty("终止日期")
     private String terminateDate;
 
-    @Schema(description = "终止原因", example = "不香")
+    @Schema(description = "终止原因")
     @ExcelProperty("终止原因")
     private String terminateReason;
 
-    @Schema(description = "是否变更 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "是否变更 0否 1是")
     @ExcelProperty("是否变更 0否 1是")
     private Integer isChange;
 
@@ -94,8 +119,19 @@ public class CustomerContractRespVO {
     @ExcelProperty("备注")
     private String remarks;
 
+    @Schema(description = "创建者id")
+    @ExcelProperty("创建者id")
+    private String creator;
+
+    @Schema(description = "创建者名称")
+    @ExcelProperty("创建者名称")
+    private String creatorName;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
+
 }

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

@@ -1,80 +1,66 @@
 package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import javax.validation.constraints.*;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
-import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractHistoryDO;
+import java.util.List;
 
 @Schema(description = "管理后台 - 销售合同信息新增/修改 Request VO")
 @Data
 public class CustomerContractSaveReqVO {
 
-    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3408")
-    private Long id;
 
-    @Schema(description = "uuid", example = "22528")
-    private String customerContractUuid;
+    @Schema(description = "主键id")
+    private Long id;
 
-    @Schema(description = "合同编号,年月日+uuid")
+    @Schema(description = "合同编号,年月日+uuid", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024080965a74fe2f33c4273803d08d2b5e4aefb")
+    @NotBlank(message = "合同编号不能为空")
     private String customerContractCode;
 
-    @Schema(description = "合同名称", example = "芋艿")
+    @Schema(description = "合同名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "合同名称不能为空")
+    @NotBlank(message = "合同名称不能为空")
     private String customerContractName;
 
-    @Schema(description = "是否为框架合同 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "是否为框架合同 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
     @NotNull(message = "是否为框架合同 0否 1是不能为空")
     private Integer isFrameContract;
 
-    @Schema(description = "客户id", example = "14976")
+    @Schema(description = "客户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "客户id不能为空")
     private Long customerId;
 
-    @Schema(description = "客户名称", example = "李四")
+    @Schema(description = "客户名称")
     private String customerName;
 
-    @Schema(description = "合同开始日期")
+    @Schema(description = "合同开始日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-08-09")
+    @NotBlank(message = "合同开始日期不能为空")
     private String startDate;
 
-    @Schema(description = "合同结束日期")
+    @Schema(description = "合同结束日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-08-09")
+    @NotBlank(message = "合同结束日期不能为空")
     private String endDate;
 
-    @Schema(description = "合同金额", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "合同金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.00")
     @NotNull(message = "合同金额不能为空")
+    @Min(value = 0, message = "合同金额不能小于0")
     private BigDecimal money;
 
-    @Schema(description = "合同负责人", example = "4502")
+    @Schema(description = "合同负责人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Long ownerEmployeeId;
 
-    @Schema(description = "负责人部门", example = "14715")
-    private Long deptId;
-
-    @Schema(description = "合同状态:0、未归档;1、已归档;2、已完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotEmpty(message = "合同状态:0、未归档;1、已归档;2、已完结不能为空")
-    private String contractStatus;
-
-    @Schema(description = "是否关闭 0开启 1关闭", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "是否关闭 0开启 1关闭不能为空")
-    private Integer closed;
-
-    @Schema(description = "关闭原因", example = "不香")
-    private String closeReason;
-
-    @Schema(description = "是否终止 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "是否终止 0否 1是不能为空")
-    private Integer terminate;
-
-    @Schema(description = "终止日期")
-    private String terminateDate;
+    @Schema(description = "备注", example = "备注可以为空")
+    private String remarks;
 
-    @Schema(description = "终止原因", example = "不香")
-    private String terminateReason;
+    @Schema(description = "附件主键id", example = "[]")
+    private List<Long> fileIdList;
 
-    @Schema(description = "是否变更 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "是否变更 0否 1是不能为空")
+    @Schema(description = "是否变更 0否 1是,无需传递该参数", example = "0")
+    @JsonIgnore
     private Integer isChange;
 
-    @Schema(description = "备注")
-    private String remarks;
-
 }

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

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 销售合同修改状态 Request VO")
+@Data
+public class CustomerContractStatusReqVO {
+
+    @Schema(description = "主键id")
+    @NotNull(message = "主键id不能为空")
+    private Long id;
+
+    @Schema(description = "合同状态:0、未归档;1、已归档;2、已完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotBlank(message = "合同状态:0、未归档;1、已归档;2、已完结不能为空")
+    private String contractStatus;
+
+}

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

@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 销售合同终止 Request VO")
+@Data
+public class CustomerContractTerminatedReqVO {
+
+    @Schema(description = "主键id")
+    @NotNull(message = "主键id不能为空")
+    private Long id;
+
+    @Schema(description = "终止日期")
+    @NotBlank(message = "终止日期不能为空")
+    private String terminateDate;
+
+    @Schema(description = "终止原因", example = "不对")
+    @NotBlank(message = "终止原因不能为空")
+    private String terminateReason;
+
+}

+ 6 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/suppliercontract/SupplierContractController.java

@@ -99,6 +99,9 @@ public class SupplierContractController {
     // @PreAuthorize("@ss.hasPermission('contract:supplier-contract:query')")
     public CommonResult<SupplierContractRespVO> getSupplierContract(@RequestParam("id") Long id) {
         SupplierContractDO supplierContract = supplierContractService.getSupplierContract(id);
+        if (Objects.isNull(supplierContract)) {
+            return success(null);
+        }
         SupplierContractRespVO supplierContractRespVO = BeanUtils.toBean(supplierContract, SupplierContractRespVO.class);
         // 是否描述集合
         Map<Integer, String> generalStatusMap = Arrays.stream(GeneralStatusEnum.values())
@@ -245,6 +248,9 @@ public class SupplierContractController {
     // @PreAuthorize("@ss.hasPermission('contract:supplier-contract:query')")
 	public CommonResult<SupplierContractRespVO> getSupplierContractHistory(@RequestParam("id") Long id) {
         SupplierContractHistoryDO supplierContractHistory = supplierContractService.getSupplierContractHistory(id);
+        if (Objects.isNull(supplierContractHistory)) {
+            return CommonResult.success(null);
+        }
         SupplierContractRespVO supplierContractRespVO = BeanUtils.toBean(supplierContractHistory, SupplierContractRespVO.class);
 
         // 是否描述集合

+ 1 - 1
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/controller/admin/suppliercontract/vo/SupplierContractCloseReqVO.java

@@ -6,7 +6,7 @@ import lombok.Data;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
-@Schema(description = "管理后台 - 采购合同开启/关闭 Request VO")
+@Schema(description = "管理后台 - 采购合同关闭 Request VO")
 @Data
 public class SupplierContractCloseReqVO {
 

+ 9 - 2
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/dal/mysql/customercontract/CustomerContractHistoryMapper.java

@@ -6,6 +6,9 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractHistoryDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 销售合同历史信息 Mapper
@@ -21,8 +24,12 @@ public interface CustomerContractHistoryMapper extends BaseMapperX<CustomerContr
             .orderByDesc(CustomerContractHistoryDO::getId));
     }
 
-    default int deleteByCustomerContractCode(String customerContractCode) {
-        return delete(CustomerContractHistoryDO::getCustomerContractCode, customerContractCode);
+    default int deleteByCode(String code) {
+        return delete(CustomerContractHistoryDO::getCustomerContractCode, code);
     }
 
+    long getPageCount(@Param("page") PageParam pageReqVO, @Param("code") String code);
+
+    List<CustomerContractHistoryDO> getPageList(@Param("page") PageParam pageReqVO, @Param("code") String code);
+
 }

+ 31 - 14
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/dal/mysql/customercontract/CustomerContractMapper.java

@@ -1,13 +1,15 @@
 package cn.iocoder.yudao.module.contract.dal.mysql.customercontract;
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+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.dal.dataobject.customercontract.CustomerContractDO;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 销售合同信息 Mapper
@@ -19,27 +21,42 @@ public interface CustomerContractMapper extends BaseMapperX<CustomerContractDO>
 
     default PageResult<CustomerContractDO> selectPage(CustomerContractPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<CustomerContractDO>()
-                .eqIfPresent(CustomerContractDO::getCustomerContractUuid, reqVO.getCustomerContractUuid())
                 .eqIfPresent(CustomerContractDO::getCustomerContractCode, reqVO.getCustomerContractCode())
                 .likeIfPresent(CustomerContractDO::getCustomerContractName, reqVO.getCustomerContractName())
                 .eqIfPresent(CustomerContractDO::getIsFrameContract, reqVO.getIsFrameContract())
                 .eqIfPresent(CustomerContractDO::getCustomerId, reqVO.getCustomerId())
-                .likeIfPresent(CustomerContractDO::getCustomerName, reqVO.getCustomerName())
                 .betweenIfPresent(CustomerContractDO::getStartDate, reqVO.getStartDate())
                 .betweenIfPresent(CustomerContractDO::getEndDate, reqVO.getEndDate())
-                .eqIfPresent(CustomerContractDO::getMoney, reqVO.getMoney())
-                .eqIfPresent(CustomerContractDO::getOwnerEmployeeId, reqVO.getOwnerEmployeeId())
                 .eqIfPresent(CustomerContractDO::getDeptId, reqVO.getDeptId())
                 .eqIfPresent(CustomerContractDO::getContractStatus, reqVO.getContractStatus())
                 .eqIfPresent(CustomerContractDO::getClosed, reqVO.getClosed())
-                .eqIfPresent(CustomerContractDO::getCloseReason, reqVO.getCloseReason())
                 .eqIfPresent(CustomerContractDO::getTerminate, reqVO.getTerminate())
-                .betweenIfPresent(CustomerContractDO::getTerminateDate, reqVO.getTerminateDate())
-                .eqIfPresent(CustomerContractDO::getTerminateReason, reqVO.getTerminateReason())
-                .eqIfPresent(CustomerContractDO::getIsChange, reqVO.getIsChange())
-                .eqIfPresent(CustomerContractDO::getRemarks, reqVO.getRemarks())
-                .betweenIfPresent(CustomerContractDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(CustomerContractDO::getId));
     }
 
+
+    /**
+     * 获取销售合同信息总数量
+     *
+     * @param pageReqVO 分页参数
+     * @return 销售合同信息分页总数量
+     */
+    long getPageCount(@Param("page") CustomerContractPageReqVO pageReqVO);
+
+    /**
+     * 获取销售合同信息分页列表
+     *
+     * @param pageReqVO 分页参数
+     * @return 销售合同信息分页列表
+     */
+    List<CustomerContractRespVO> getPageList(@Param("page") CustomerContractPageReqVO pageReqVO);
+
+    /**
+     * 物理删除销售合同信息
+     *
+     * @param id 编号
+     * @return 是否删除成功
+     */
+    Integer deleteCustomerContractOriginal(Long id);
+
 }

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

@@ -2,8 +2,7 @@ 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.CustomerContractPageReqVO;
-import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractSaveReqVO;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.*;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractDO;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractHistoryDO;
 
@@ -16,6 +15,14 @@ import javax.validation.Valid;
  */
 public interface CustomerContractService {
 
+    /**
+     * 获取供应商合同编号
+     * 供应商合同编号是标识供应商合同的唯一代码
+     *
+     * @return 供应商合同编号
+     */
+    String getCustomerContractCode();
+
     /**
      * 创建销售合同信息
      *
@@ -52,7 +59,45 @@ public interface CustomerContractService {
      * @param pageReqVO 分页查询
      * @return 销售合同信息分页
      */
-    PageResult<CustomerContractDO> getCustomerContractPage(CustomerContractPageReqVO pageReqVO);
+    PageResult<CustomerContractRespVO> getCustomerContractPage(CustomerContractPageReqVO pageReqVO);
+
+    /**
+     * 开启销售合同
+     *
+     * @param id 销售合同id
+     * @return 影响行数
+     */
+    Integer openCustomerContract(Long id);
+
+
+    /**
+     * 关闭销售合同
+     *
+     * @param closeReqVO 关闭请求对象,包含关闭所需的必要信息
+     *                   如合同ID、关闭原因等
+     * @return 返回操作结果,通常是一个标识操作成功与否的整数
+     * 比如:1表示成功,0表示失败
+     */
+    Integer closeCustomerContract(CustomerContractCloseReqVO closeReqVO);
+
+    /**
+     * 终止销售合同
+     *
+     * @param terminatedReqVO 终止请求对象,包含了终止合同所需的各种信息,如合同ID、终止原因等
+     * @return 返回处理结果,通常是处理状态(如成功或失败)的标识,或者处理后的结果数据
+     */
+    Integer terminateCustomerContract(CustomerContractTerminatedReqVO terminatedReqVO);
+
+    /**
+     * 修改合同状态
+     *
+     * @param statusReqVO 供应商合同状态请求对象,包含要更新的状态信息
+     * @return 更新操作的状态码,表示成功与否
+     */
+    Integer editCustomerStatus(CustomerContractStatusReqVO statusReqVO);
+
+
+    CustomerContractDO getCustomerContractByCode(String customerContractCode);
 
     // ==================== 子表(销售合同历史信息) ====================
 
@@ -60,10 +105,10 @@ public interface CustomerContractService {
      * 获得销售合同历史信息分页
      *
      * @param pageReqVO 分页查询
-     * @param customerContractCode 合同编号,年月日+uuid
+     * @param code 合同编号,年月日+uuid
      * @return 销售合同历史信息分页
      */
-    PageResult<CustomerContractHistoryDO> getCustomerContractHistoryPage(PageParam pageReqVO, String customerContractCode);
+    PageResult<CustomerContractHistoryDO> getCustomerContractHistoryPage(PageParam pageReqVO, String code);
 
     /**
      * 创建销售合同历史信息
@@ -73,26 +118,43 @@ public interface CustomerContractService {
      */
     Long createCustomerContractHistory(@Valid CustomerContractHistoryDO customerContractHistory);
 
+    // /**
+    //  * 更新销售合同历史信息
+    //  *
+    //  * @param customerContractHistory 更新信息
+    //  */
+    // void updateCustomerContractHistory(@Valid CustomerContractHistoryDO customerContractHistory);
+    //
+    // /**
+    //  * 删除销售合同历史信息
+    //  *
+    //  * @param id 编号
+    //  */
+    // void deleteCustomerContractHistory(Long id);
+
     /**
-     * 更新销售合同历史信息
+     * 物理删除销售合同信息
      *
-     * @param customerContractHistory 更新信息
+     * @param id 编号
+     * @return 影响行数
      */
-    void updateCustomerContractHistory(@Valid CustomerContractHistoryDO customerContractHistory);
+    Integer deleteCustomerContractOriginal(Long id);
+
 
     /**
-     * 删除销售合同历史信息
+     * 变更销售合同信息
      *
-     * @param id 编号
+     * @param updateReqVO 更新信息
      */
-    void deleteCustomerContractHistory(Long id);
+    void alterCustomerContract(CustomerContractSaveReqVO updateReqVO);
+
 
-	/**
-	 * 获得销售合同历史信息
-	 *
-	 * @param id 编号
+    /**
+     * 获得销售合同历史信息
+     *
+     * @param id 编号
      * @return 销售合同历史信息
-	 */
+     */
     CustomerContractHistoryDO getCustomerContractHistory(Long id);
 
 }

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

@@ -1,23 +1,35 @@
 package cn.iocoder.yudao.module.contract.service.customercontract;
 
+import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.common.enums.GeneralStatusEnum;
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractPageReqVO;
-import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractSaveReqVO;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.*;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractDO;
 import cn.iocoder.yudao.module.contract.dal.dataobject.customercontract.CustomerContractHistoryDO;
 import cn.iocoder.yudao.module.contract.dal.mysql.customercontract.CustomerContractHistoryMapper;
 import cn.iocoder.yudao.module.contract.dal.mysql.customercontract.CustomerContractMapper;
+import cn.iocoder.yudao.module.contract.enums.ContractStatusEnum;
+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 org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Objects;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.contract.enums.ErrorCodeConstants.CUSTOMER_CONTRACT_HISTORY_NOT_EXISTS;
-import static cn.iocoder.yudao.module.contract.enums.ErrorCodeConstants.CUSTOMER_CONTRACT_NOT_EXISTS;
+import static cn.iocoder.yudao.module.contract.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.EMPLOYEE_INFO_NOT_EXISTS;
 
 /**
  * 销售合同信息 Service 实现类
@@ -33,11 +45,62 @@ public class CustomerContractServiceImpl implements CustomerContractService {
     @Resource
     private CustomerContractHistoryMapper customerContractHistoryMapper;
 
+    @Resource
+    private FileApi fileApi;
+
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private DeptApi deptApi;
+
+    @Override
+    public String getCustomerContractCode() {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        String format = formatter.format(LocalDateTime.now());
+        return format + IdUtil.fastSimpleUUID();
+    }
+
     @Override
     public Long createCustomerContract(CustomerContractSaveReqVO createReqVO) {
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (Objects.isNull(loginEmployee)) {
+            throw exception(new ErrorCode(EMPLOYEE_INFO_NOT_EXISTS.getCode(), "登录用户员工信息不存在"));
+        }
         // 插入
         CustomerContractDO customerContract = BeanUtils.toBean(createReqVO, CustomerContractDO.class);
+        // uuid
+        customerContract.setCustomerContractUuid(IdUtil.fastSimpleUUID());
+        // 负责人及部门
+        Long ownerEmployeeId = createReqVO.getOwnerEmployeeId();
+        EmployeeRespDTO ownerEmployee = employeeApi.getEmployeeById(ownerEmployeeId);
+        if (Objects.isNull(ownerEmployee)) {
+            throw exception(EMPLOYEE_INFO_NOT_EXISTS);
+        }
+        Long deptId = ownerEmployee.getDeptId();
+        if (Objects.nonNull(deptId)) {
+            customerContract.setDeptId(deptId);
+        }
+        // 合同状态:0未归档
+        customerContract.setContractStatus(ContractStatusEnum.UNARCHIVED.getStatus());
+        // 是否关闭:0否
+        customerContract.setClosed(GeneralStatusEnum.NO.getStatus());
+        // 是否终止:0否
+        customerContract.setTerminate(GeneralStatusEnum.NO.getStatus());
+        // 是否变更
+        if (Objects.isNull(createReqVO.getIsChange())) {
+            customerContract.setIsChange(GeneralStatusEnum.NO.getStatus());
+        }
+
+        // 创建人
+        customerContract.setCreator(String.valueOf(loginEmployee.getId()));
+
         customerContractMapper.insert(customerContract);
+
+        // 附件
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), customerContract.getCustomerContractUuid());
+
         // 返回
         return customerContract.getId();
     }
@@ -45,22 +108,42 @@ public class CustomerContractServiceImpl implements CustomerContractService {
     @Override
     public void updateCustomerContract(CustomerContractSaveReqVO updateReqVO) {
         // 校验存在
-        validateCustomerContractExists(updateReqVO.getId());
+        CustomerContractDO customerContractDO = validateCustomerContractExists(updateReqVO.getId());
         // 更新
         CustomerContractDO updateObj = BeanUtils.toBean(updateReqVO, CustomerContractDO.class);
+        // 负责人及部门
+        Long ownerEmployeeId = updateReqVO.getOwnerEmployeeId();
+        EmployeeRespDTO ownerEmployee = employeeApi.getEmployeeById(ownerEmployeeId);
+        if (Objects.isNull(ownerEmployee)) {
+            throw exception(EMPLOYEE_INFO_NOT_EXISTS);
+        }
+        Long deptId = ownerEmployee.getDeptId();
+        if (Objects.nonNull(deptId)) {
+            updateObj.setDeptId(deptId);
+        }
         customerContractMapper.updateById(updateObj);
+
+        // 附件
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), customerContractDO.getCustomerContractUuid());
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteCustomerContract(Long id) {
         // 校验存在
-        validateCustomerContractExists(id);
+        CustomerContractDO customerContractDO = validateCustomerContractExists(id);
         // 删除
         customerContractMapper.deleteById(id);
 
-        // // 删除子表
-        // deleteCustomerContractHistoryByCustomerContractCode(id);
+        // 删除子表
+        // deleteCustomerContractHistoryByCode(customerContractDO.getCustomerContractCode());
+    }
+
+    @Override
+    public Integer deleteCustomerContractOriginal(Long id) {
+        // 校验存在
+        CustomerContractDO customerContractDO = validateCustomerContractExists(id);
+        return customerContractMapper.deleteCustomerContractOriginal(id);
     }
 
     private CustomerContractDO validateCustomerContractExists(Long id) {
@@ -77,52 +160,163 @@ public class CustomerContractServiceImpl implements CustomerContractService {
     }
 
     @Override
-    public PageResult<CustomerContractDO> getCustomerContractPage(CustomerContractPageReqVO pageReqVO) {
-        return customerContractMapper.selectPage(pageReqVO);
+    public PageResult<CustomerContractRespVO> getCustomerContractPage(CustomerContractPageReqVO pageReqVO) {
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
+
+        long pageCount = -1;
+        if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
+            pageCount = customerContractMapper.getPageCount(pageReqVO);
+        }
+
+        if (pageCount == 0) {
+            return PageResult.empty();
+        }
+
+        List<CustomerContractRespVO> pageList = customerContractMapper.getPageList(pageReqVO);
+
+        return new PageResult<>(pageList, pageCount);
+    }
+
+    @Override
+    public Integer openCustomerContract(Long id) {
+        CustomerContractDO customerContractDO = validateCustomerContractExists(id);
+        if (GeneralStatusEnum.NO.getStatus().equals(customerContractDO.getClosed())) {
+            throw exception(CUSTOMER_CONTRACT_NOT_CLOSED);
+        }
+        CustomerContractDO build = CustomerContractDO.builder()
+                .id(id)
+                .closed(GeneralStatusEnum.NO.getStatus())
+                .build();
+        return customerContractMapper.updateById(build);
     }
 
-    // ==================== 子表(销售合同历史信息) ====================
+    @Override
+    public Integer closeCustomerContract(CustomerContractCloseReqVO closeReqVO) {
+        CustomerContractDO customerContractDO = validateCustomerContractExists(closeReqVO.getId());
+
+        if (GeneralStatusEnum.YES.getStatus().equals(customerContractDO.getClosed())) {
+            throw exception(new ErrorCode(CUSTOMER_CONTRACT_NOT_CLOSED.getCode(), "合同已经是关闭状态"));
+        }
+
+        CustomerContractDO build = CustomerContractDO.builder()
+                .id(closeReqVO.getId())
+                .closed(GeneralStatusEnum.YES.getStatus())
+                .closeReason(closeReqVO.getCloseReason())
+                .build();
+
+        return customerContractMapper.updateById(build);
+    }
 
     @Override
-    public PageResult<CustomerContractHistoryDO> getCustomerContractHistoryPage(PageParam pageReqVO, String customerContractCode) {
-        return customerContractHistoryMapper.selectPage(pageReqVO, customerContractCode);
+    public Integer terminateCustomerContract(CustomerContractTerminatedReqVO terminatedReqVO) {
+        CustomerContractDO customerContractDO = validateCustomerContractExists(terminatedReqVO.getId());
+        if (GeneralStatusEnum.YES.getStatus().equals(customerContractDO.getTerminate())) {
+            throw exception(new ErrorCode(CUSTOMER_CONTRACT_NOT_CLOSED.getCode(), "合同已经是终止状态"));
+        }
+        CustomerContractDO build = CustomerContractDO.builder()
+                .id(terminatedReqVO.getId())
+                .terminate(GeneralStatusEnum.YES.getStatus())
+                .terminateDate(terminatedReqVO.getTerminateDate())
+                .terminateReason(terminatedReqVO.getTerminateReason())
+                .build();
+        return customerContractMapper.updateById(build);
     }
 
     @Override
-    public Long createCustomerContractHistory(CustomerContractHistoryDO customerContractHistory) {
-        customerContractHistoryMapper.insert(customerContractHistory);
-        return customerContractHistory.getId();
+    public Integer editCustomerStatus(CustomerContractStatusReqVO statusReqVO) {
+        CustomerContractDO customerContractDO = validateCustomerContractExists(statusReqVO.getId());
+
+        CustomerContractDO build = CustomerContractDO.builder()
+                .id(statusReqVO.getId())
+                .contractStatus(statusReqVO.getContractStatus())
+                .build();
+        return customerContractMapper.updateById(build);
     }
 
     @Override
-    public void updateCustomerContractHistory(CustomerContractHistoryDO customerContractHistory) {
-        // 校验存在
-        validateCustomerContractHistoryExists(customerContractHistory.getId());
-        // 更新
-        customerContractHistoryMapper.updateById(customerContractHistory);
+    public CustomerContractDO getCustomerContractByCode(String customerContractCode) {
+        return customerContractMapper.selectOne(CustomerContractDO::getCustomerContractCode, customerContractCode);
     }
 
+    // ==================== 子表(销售合同历史信息) ====================
+
     @Override
-    public void deleteCustomerContractHistory(Long id) {
-        // 校验存在
-        validateCustomerContractHistoryExists(id);
-        // 删除
-        customerContractHistoryMapper.deleteById(id);
+    public PageResult<CustomerContractHistoryDO> getCustomerContractHistoryPage(PageParam pageReqVO, String code) {
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
+
+        long pageCount = -1;
+        if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
+            pageCount = customerContractHistoryMapper.getPageCount(pageReqVO, code);
+        }
+
+        if (pageCount == 0) {
+            return PageResult.empty();
+        }
+
+        List<CustomerContractHistoryDO> pageList = customerContractHistoryMapper.getPageList(pageReqVO, code);
+
+        return new PageResult<>(pageList, pageCount);
+    }
+
+    @Override
+    public Long createCustomerContractHistory(CustomerContractHistoryDO customerContractHistory) {
+        customerContractHistoryMapper.insert(customerContractHistory);
+        return customerContractHistory.getId();
     }
 
+    // @Override
+    // public void updateCustomerContractHistory(CustomerContractHistoryDO customerContractHistory) {
+    //     // 校验存在
+    //     validateCustomerContractHistoryExists(customerContractHistory.getId());
+    //     // 更新
+    //     customerContractHistoryMapper.updateById(customerContractHistory);
+    // }
+    //
+    // @Override
+    // public void deleteCustomerContractHistory(Long id) {
+    //     // 校验存在
+    //     validateCustomerContractHistoryExists(id);
+    //     // 删除
+    //     customerContractHistoryMapper.deleteById(id);
+    // }
+
     @Override
     public CustomerContractHistoryDO getCustomerContractHistory(Long id) {
+        // validateCustomerContractHistoryExists(id);
         return customerContractHistoryMapper.selectById(id);
     }
 
-    private void validateCustomerContractHistoryExists(Long id) {
-        if (customerContractHistoryMapper.selectById(id) == null) {
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void alterCustomerContract(CustomerContractSaveReqVO updateReqVO) {
+        String customerContractCode = updateReqVO.getCustomerContractCode();
+        CustomerContractDO customerContract = this.getCustomerContractByCode(customerContractCode);
+        if (Objects.isNull(customerContract)) {
+            throw exception(CUSTOMER_CONTRACT_NOT_EXISTS);
+        }
+        // 物理删除原合同信息
+        this.deleteCustomerContractOriginal(customerContract.getId());
+        // 添加到历史合同信息表中
+        CustomerContractHistoryDO customerContractHistoryDO = BeanUtils.toBean(customerContract, CustomerContractHistoryDO.class);
+        customerContractHistoryDO.setId(null);
+        this.createCustomerContractHistory(customerContractHistoryDO);
+        // 新增新合同
+        updateReqVO.setId(null);
+        updateReqVO.setIsChange(GeneralStatusEnum.YES.getStatus());
+        this.createCustomerContract(updateReqVO);
+    }
+
+    private CustomerContractHistoryDO validateCustomerContractHistoryExists(Long id) {
+        CustomerContractHistoryDO customerContractHistoryDO = customerContractHistoryMapper.selectById(id);
+        if (customerContractHistoryDO == null) {
             throw exception(CUSTOMER_CONTRACT_HISTORY_NOT_EXISTS);
         }
+        return customerContractHistoryDO;
     }
 
-    private void deleteCustomerContractHistoryByCustomerContractCode(String customerContractCode) {
-        customerContractHistoryMapper.deleteByCustomerContractCode(customerContractCode);
+    private void deleteCustomerContractHistoryByCode(String code) {
+        customerContractHistoryMapper.deleteByCode(code);
     }
 
+
 }

+ 13 - 13
yudao-module-finance/yudao-module-contract-biz/src/main/java/cn/iocoder/yudao/module/contract/service/suppliercontract/SupplierContractService.java

@@ -118,19 +118,19 @@ public interface SupplierContractService {
      */
     Long createSupplierContractHistory(@Valid SupplierContractHistoryDO supplierContractHistory);
 
-    /**
-     * 更新采购合同历史信息
-     *
-     * @param supplierContractHistory 更新信息
-     */
-    void updateSupplierContractHistory(@Valid SupplierContractHistoryDO supplierContractHistory);
-
-    /**
-     * 删除采购合同历史信息
-     *
-     * @param id 编号
-     */
-    void deleteSupplierContractHistory(Long id);
+    // /**
+    //  * 更新采购合同历史信息
+    //  *
+    //  * @param supplierContractHistory 更新信息
+    //  */
+    // void updateSupplierContractHistory(@Valid SupplierContractHistoryDO supplierContractHistory);
+    //
+    // /**
+    //  * 删除采购合同历史信息
+    //  *
+    //  * @param id 编号
+    //  */
+    // void deleteSupplierContractHistory(Long id);
 
     /**
      * 物理删除采购合同信息

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

@@ -85,12 +85,12 @@ public class SupplierContractServiceImpl implements SupplierContractService {
         // 合同状态:0未归档
         supplierContract.setContractStatus(ContractStatusEnum.UNARCHIVED.getStatus());
         // 是否关闭:0否
-        supplierContract.setClosed(GeneralStatusEnum.DISABLE.getStatus());
+        supplierContract.setClosed(GeneralStatusEnum.NO.getStatus());
         // 是否终止:0否
-        supplierContract.setTerminate(GeneralStatusEnum.DISABLE.getStatus());
+        supplierContract.setTerminate(GeneralStatusEnum.NO.getStatus());
         // 是否变更
         if (Objects.isNull(createReqVO.getIsChange())) {
-            supplierContract.setIsChange(GeneralStatusEnum.DISABLE.getStatus());
+            supplierContract.setIsChange(GeneralStatusEnum.NO.getStatus());
         }
 
         // 创建人
@@ -180,12 +180,12 @@ public class SupplierContractServiceImpl implements SupplierContractService {
     @Override
     public Integer openSupplierContract(Long id) {
         SupplierContractDO supplierContractDO = validateSupplierContractExists(id);
-        if (GeneralStatusEnum.ENABLE.getStatus().equals(supplierContractDO.getClosed())) {
+        if (GeneralStatusEnum.NO.getStatus().equals(supplierContractDO.getClosed())) {
             throw exception(SUPPLIER_CONTRACT_NOT_CLOSED);
         }
         SupplierContractDO build = SupplierContractDO.builder()
                 .id(id)
-                .closed(GeneralStatusEnum.ENABLE.getStatus())
+                .closed(GeneralStatusEnum.NO.getStatus())
                 .build();
         return supplierContractMapper.updateById(build);
     }
@@ -194,13 +194,13 @@ public class SupplierContractServiceImpl implements SupplierContractService {
     public Integer closeSupplierContract(SupplierContractCloseReqVO closeReqVO) {
         SupplierContractDO supplierContractDO = validateSupplierContractExists(closeReqVO.getId());
 
-        if (GeneralStatusEnum.DISABLE.getStatus().equals(supplierContractDO.getClosed())) {
+        if (GeneralStatusEnum.YES.getStatus().equals(supplierContractDO.getClosed())) {
             throw exception(new ErrorCode(SUPPLIER_CONTRACT_NOT_CLOSED.getCode(), "合同已经是关闭状态"));
         }
 
         SupplierContractDO build = SupplierContractDO.builder()
                 .id(closeReqVO.getId())
-                .closed(GeneralStatusEnum.DISABLE.getStatus())
+                .closed(GeneralStatusEnum.YES.getStatus())
                 .closeReason(closeReqVO.getCloseReason())
                 .build();
 
@@ -210,12 +210,12 @@ public class SupplierContractServiceImpl implements SupplierContractService {
     @Override
     public Integer terminateSupplierContract(SupplierContractTerminatedReqVO terminatedReqVO) {
         SupplierContractDO supplierContractDO = validateSupplierContractExists(terminatedReqVO.getId());
-        if (GeneralStatusEnum.DISABLE.getStatus().equals(supplierContractDO.getTerminate())) {
+        if (GeneralStatusEnum.YES.getStatus().equals(supplierContractDO.getTerminate())) {
             throw exception(new ErrorCode(SUPPLIER_CONTRACT_NOT_CLOSED.getCode(), "合同已经是终止状态"));
         }
         SupplierContractDO build = SupplierContractDO.builder()
                 .id(terminatedReqVO.getId())
-                .terminate(GeneralStatusEnum.DISABLE.getStatus())
+                .terminate(GeneralStatusEnum.YES.getStatus())
                 .terminateDate(terminatedReqVO.getTerminateDate())
                 .terminateReason(terminatedReqVO.getTerminateReason())
                 .build();
@@ -264,21 +264,21 @@ public class SupplierContractServiceImpl implements SupplierContractService {
         return supplierContractHistory.getId();
     }
 
-    @Override
-    public void updateSupplierContractHistory(SupplierContractHistoryDO supplierContractHistory) {
-        // 校验存在
-        validateSupplierContractHistoryExists(supplierContractHistory.getId());
-        // 更新
-        supplierContractHistoryMapper.updateById(supplierContractHistory);
-    }
-
-    @Override
-    public void deleteSupplierContractHistory(Long id) {
-        // 校验存在
-        validateSupplierContractHistoryExists(id);
-        // 删除
-        supplierContractHistoryMapper.deleteById(id);
-    }
+    // @Override
+    // public void updateSupplierContractHistory(SupplierContractHistoryDO supplierContractHistory) {
+    //     // 校验存在
+    //     validateSupplierContractHistoryExists(supplierContractHistory.getId());
+    //     // 更新
+    //     supplierContractHistoryMapper.updateById(supplierContractHistory);
+    // }
+    //
+    // @Override
+    // public void deleteSupplierContractHistory(Long id) {
+    //     // 校验存在
+    //     validateSupplierContractHistoryExists(id);
+    //     // 删除
+    //     supplierContractHistoryMapper.deleteById(id);
+    // }
 
     @Override
     public SupplierContractHistoryDO getSupplierContractHistory(Long id) {
@@ -301,7 +301,7 @@ public class SupplierContractServiceImpl implements SupplierContractService {
         this.createSupplierContractHistory(supplierContractHistoryDO);
         // 新增新合同
         updateReqVO.setId(null);
-        updateReqVO.setIsChange(GeneralStatusEnum.ENABLE.getStatus());
+        updateReqVO.setIsChange(GeneralStatusEnum.YES.getStatus());
         this.createSupplierContract(updateReqVO);
     }
 

+ 91 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/resources/mapper/customercontract/CustomerContractHistoryMapper.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.contract.dal.mysql.customercontract.CustomerContractHistoryMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+    <select id="getPageCount" resultType="java.lang.Long">
+        SELECT
+            count(fcch.id)
+        FROM
+            finance_customer_contract_history fcch
+            LEFT JOIN employee_info ei ON ei.id = fcch.owner_employee_id AND ei.deleted = 0
+            LEFT JOIN system_dept sd ON sd.id = fcch.dept_id AND sd.deleted = 0
+            LEFT JOIN employee_info ei2 ON ei2.id = fcch.creator AND ei2.deleted = 0
+        WHERE
+            fcch.deleted = 0
+        <if test="code != null and code != ''">
+            AND fcch.customer_contract_code = #{code}
+        </if>
+    </select>
+    <select id="getPageList"
+            resultType="cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractRespVO">
+        SELECT
+            fcch.id,
+            fcch.customer_contract_uuid,
+            fcch.customer_contract_code,
+            fcch.customer_contract_name,
+            fcch.is_frame_contract,
+               CASE
+                   WHEN fcch.is_frame_contract = 1 THEN '是'
+                   WHEN fcch.is_frame_contract = 0 THEN '否'
+                   ELSE '未知'
+               END AS isFrameContractDesc,
+            fcch.customer_id,
+            fcch.customer_name,
+            fcch.start_date,
+            fcch.end_date,
+            fcch.money,
+            fcch.owner_employee_id,
+               ei.name AS ownerEmployeeName,
+            fcch.dept_id,
+               sd.name AS deptName,
+            fcch.contract_status,
+                CASE
+                    WHEN fcch.contract_status = 0 THEN '未归档'
+                    WHEN fcch.contract_status = 1 THEN '已归档'
+                    WHEN fcch.contract_status = 2 THEN '已完结'
+                    ELSE '未知'
+                END AS contractStatusDesc,
+            fcch.closed,
+               CASE
+                    WHEN fcch.closed = 1 THEN '是'
+                    WHEN fcch.closed = 0 THEN '否'
+                    ELSE '未知'
+                END AS closedDesc,
+            fcch.close_reason,
+            fcch.terminate,
+               CASE
+                   WHEN fcch.terminate = 1 THEN '是'
+                   WHEN fcch.terminate = 0 THEN '否'
+                   ELSE '未知'
+               END AS terminateDesc,
+            fcch.terminate_date,
+            fcch.terminate_reason,
+            fcch.is_change,
+            fcch.remarks,
+            fcch.creator,
+               ei2.name AS creatorName,
+            fcch.create_time
+        FROM
+            finance_customer_contract_history fcch
+                LEFT JOIN employee_info ei ON ei.id = fcch.owner_employee_id AND ei.deleted = 0
+                LEFT JOIN system_dept sd ON sd.id = fcch.dept_id AND sd.deleted = 0
+                LEFT JOIN employee_info ei2 ON ei2.id = fcch.creator AND ei2.deleted = 0
+        WHERE
+            fcch.deleted = 0
+        <if test="code != null and code != ''">
+            AND fcch.customer_contract_code = #{code}
+        </if>
+        ORDER BY
+            fcch.create_time
+        <if test="page.pageSize != -1">
+            LIMIT #{page.pageNo}, #{page.pageSize}
+        </if>
+    </select>
+</mapper>

+ 149 - 0
yudao-module-finance/yudao-module-contract-biz/src/main/resources/mapper/customercontract/CustomerContractMapper.xml

@@ -9,4 +9,153 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+    <select id="getPageCount" resultType="java.lang.Long">
+        SELECT
+        count(fcc.id)
+        FROM
+        finance_customer_contract fcc
+        LEFT JOIN employee_info ei ON ei.id = fcc.owner_employee_id AND ei.deleted = 0
+        LEFT JOIN system_dept sd ON sd.id = fcc.dept_id AND sd.deleted = 0
+        LEFT JOIN employee_info ei2 ON ei2.id = fcc.creator AND ei2.deleted = 0
+        WHERE
+        fcc.deleted = 0
+        <if test="page.customerContractCode != null and page.customerContractCode != ''">
+            AND fcc.customer_contract_code like concat('%',#{page.customerContractCode},'%')
+        </if>
+        <if test="page.customerContractName != null and page.customerContractName != ''">
+            AND fcc.customer_contract_name like concat('%',#{page.customerContractName},'%')
+        </if>
+        <if test="page.isFrameContract != null">
+            AND fcc.is_frame_contract = #{page.isFrameContract}
+        </if>
+        <if test="page.customerId != null">
+            AND fcc.customer_id = #{page.customerId}
+        </if>
+        <if test="page.startDate != null and page.startDate.length > 0">
+            AND fcc.start_date BETWEEN #{page.startDate[0]} AND #{page.startDate[1]}
+        </if>
+        <if test="page.endDate != null and page.endDate.length > 0">
+            AND fcc.end_date BETWEEN #{page.endDate[0]} AND #{page.endDate[1]}
+        </if>
+        <if test="page.ownerEmployeeName != null and page.ownerEmployeeName != ''">
+            AND ei.name like concat('%',#{page.ownerEmployeeName},'%')
+        </if>
+        <if test="page.deptId != null">
+            AND fcc.dept_id = #{page.deptId}
+        </if>
+        <if test="page.contractStatus != null and page.contractStatus != ''">
+            AND fcc.contract_status = #{page.contractStatus}
+        </if>
+        <if test="page.closed != null">
+            AND fcc.closed = #{page.closed}
+        </if>
+        <if test="page.terminate != null">
+            AND fcc.terminate = #{page.terminate}
+        </if>
+    </select>
+    <select id="getPageList"
+            resultType="cn.iocoder.yudao.module.contract.controller.admin.customercontract.vo.CustomerContractRespVO">
+        SELECT
+        fcc.id,
+        fcc.customer_contract_uuid,
+        fcc.customer_contract_code,
+        fcc.customer_contract_name,
+        fcc.is_frame_contract,
+        CASE
+        WHEN fcc.is_frame_contract = 1 THEN '是'
+        WHEN fcc.is_frame_contract = 0 THEN '否'
+        ELSE '未知'
+        END AS isFrameContractDesc,
+        fcc.customer_id,
+        fcc.customer_name,
+        fcc.start_date,
+        fcc.end_date,
+        fcc.money,
+        fcc.owner_employee_id,
+        ei.name AS ownerEmployeeName,
+        fcc.dept_id,
+        sd.name AS deptName,
+        fcc.contract_status,
+        CASE
+        WHEN fcc.contract_status = 0 THEN '未归档'
+        WHEN fcc.contract_status = 1 THEN '已归档'
+        WHEN fcc.contract_status = 2 THEN '已完结'
+        ELSE '未知'
+        END AS contractStatusDesc,
+        fcc.closed,
+        CASE
+        WHEN fcc.closed = 1 THEN '是'
+        WHEN fcc.closed = 0 THEN '否'
+        ELSE '未知'
+        END AS closedDesc,
+        fcc.close_reason,
+        fcc.terminate,
+        CASE
+        WHEN fcc.terminate = 1 THEN '是'
+        WHEN fcc.terminate = 0 THEN '否'
+        ELSE '未知'
+        END AS terminateDesc,
+        fcc.terminate_date,
+        fcc.terminate_reason,
+        fcc.is_change,
+        fcc.remarks,
+        fcc.creator,
+        ei2.name AS creatorName,
+        fcc.create_time
+        FROM
+        finance_customer_contract fcc
+        LEFT JOIN employee_info ei ON ei.id = fcc.owner_employee_id AND ei.deleted = 0
+        LEFT JOIN system_dept sd ON sd.id = fcc.dept_id AND sd.deleted = 0
+        LEFT JOIN employee_info ei2 ON ei2.id = fcc.creator AND ei2.deleted = 0
+        WHERE
+        fcc.deleted = 0
+        <if test="page.customerContractCode != null and page.customerContractCode != ''">
+            AND fcc.customer_contract_code like concat('%',#{page.customerContractCode},'%')
+        </if>
+        <if test="page.customerContractName != null and page.customerContractName != ''">
+            AND fcc.customer_contract_name like concat('%',#{page.customerContractName},'%')
+        </if>
+        <if test="page.isFrameContract != null">
+            AND fcc.is_frame_contract = #{page.isFrameContract}
+        </if>
+        <if test="page.customerId != null">
+            AND fcc.customer_id = #{page.customerId}
+        </if>
+        <if test="page.startDate != null and page.startDate.length > 0">
+            AND fcc.start_date BETWEEN #{page.startDate[0]} AND #{page.startDate[1]}
+        </if>
+        <if test="page.endDate != null and page.endDate.length > 0">
+            AND fcc.end_date BETWEEN #{page.endDate[0]} AND #{page.endDate[1]}
+        </if>
+        <if test="page.ownerEmployeeName != null and page.ownerEmployeeName != ''">
+            AND ei.name like concat('%',#{page.ownerEmployeeName},'%')
+        </if>
+        <if test="page.deptId != null">
+            AND fcc.dept_id = #{page.deptId}
+        </if>
+        <if test="page.contractStatus != null and page.contractStatus != ''">
+            AND fcc.contract_status = #{page.contractStatus}
+        </if>
+        <if test="page.closed != null">
+            AND fcc.closed = #{page.closed}
+        </if>
+        <if test="page.terminate != null">
+            AND fcc.terminate = #{page.terminate}
+        </if>
+        ORDER BY
+        fcc.create_time DESC
+        <if test="page.pageSize != -1">
+            LIMIT #{page.pageNo}, #{page.pageSize}
+        </if>
+    </select>
+
+    <delete id="deleteCustomerContractOriginal">
+        DELETE
+        FROM
+            finance_customer_contract
+        WHERE
+            id = #{id}
+          AND deleted = 0
+    </delete>
+
 </mapper>