소스 검색

✨ CRM:待办事项(接入合同)

YunaiV 1 년 전
부모
커밋
53ebd39c73

+ 7 - 7
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java

@@ -215,18 +215,18 @@ public class CrmContractController {
         });
     }
 
-    @GetMapping("/check-contract-count")
+    @GetMapping("/audit-count")
     @Operation(summary = "获得待审核合同数量")
     @PreAuthorize("@ss.hasPermission('crm:contract:query')")
-    public CommonResult<Long> getCheckContractCount() {
-        return success(contractService.getCheckContractCount(getLoginUserId()));
+    public CommonResult<Long> getAuditContractCount() {
+        return success(contractService.getAuditContractCount(getLoginUserId()));
     }
 
-    @GetMapping("/end-contract-count")
-    @Operation(summary = "获得即将到期的合同数量")
+    @GetMapping("/remind-count")
+    @Operation(summary = "获得即将到期(提醒)的合同数量")
     @PreAuthorize("@ss.hasPermission('crm:contract:query')")
-    public CommonResult<Long> getEndContractCount() {
-        return success(contractService.getEndContractCount(getLoginUserId()));
+    public CommonResult<Long> getRemindContractCount() {
+        return success(contractService.getRemindContractCount(getLoginUserId()));
     }
 
 }

+ 9 - 12
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
 import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
@@ -49,7 +50,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
                 .orderByDesc(CrmContractDO::getId));
     }
 
-    default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) {
+    default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId, CrmContractConfigDO config) {
         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>();
         // 拼接数据权限的查询条件
         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(),
@@ -67,10 +68,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
         LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
         LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
         if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) { // 即将到期
-            // TODO: @芋艿 需要配置 提前提醒天数
-            int REMIND_DAYS = 20;
             query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
-                    .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS));
+                    .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays()));
         } else if (CrmContractPageReqVO.EXPIRY_TYPE_EXPIRED.equals(pageReqVO.getExpiryType())) { // 已到期
             query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
                     .lt(CrmContractDO::getEndTime, endOfToday);
@@ -95,17 +94,17 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
         return selectCount(CrmContractDO::getBusinessId, businessId);
     }
 
-    default Long selectCheckContractCount(Long userId) {
+    default Long selectCountByAudit(Long userId) {
         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>();
         // 我负责的 + 非公海
         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(),
                 CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE);
-        // 未提交 or 审核不通过
-        query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus());
+        // 未审核
+        query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus());
         return selectCount(query);
     }
 
-    default Long selectEndContractCount(Long userId) {
+    default Long selectCountByRemind(Long userId, CrmContractConfigDO config) {
         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>();
         // 我负责的 + 非公海
         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(),
@@ -113,10 +112,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
         // 即将到期
         LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
         LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
-        // TODO: @dhb52 需要配置 提前提醒天数
-        int REMIND_DAYS = 20;
-        query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
-                .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS));
+        query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) // 必须审批通过!
+                .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays()));
         return selectCount(query);
     }
 

+ 3 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java

@@ -162,14 +162,14 @@ public interface CrmContractService {
      * @param userId 用户编号
      * @return 提醒数量
      */
-    Long getCheckContractCount(Long userId);
+    Long getAuditContractCount(Long userId);
 
     /**
-     * 获得即将到期的合同数量
+     * 获得即将到期(提醒)的合同数量
      *
      * @param userId 用户编号
      * @return 提醒数量
      */
-    Long getEndContractCount(Long userId);
+    Long getRemindContractCount(Long userId);
 
 }

+ 22 - 10
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java

@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractTransferReqVO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper;
@@ -83,6 +84,8 @@ public class CrmContractServiceImpl implements CrmContractService {
     private CrmBusinessService businessService;
     @Resource
     private CrmContactService contactService;
+    @Resource
+    private CrmContractConfigService contractConfigService;
 
     @Resource
     private AdminUserApi adminUserApi;
@@ -172,8 +175,6 @@ public class CrmContractServiceImpl implements CrmContractService {
         }
     }
 
-    // TODO @合同待定:缺一个取消合同的接口;只有草稿、审批中可以取消;CrmAuditStatusEnum
-
     /**
      * 校验关联数据是否存在
      *
@@ -314,7 +315,7 @@ public class CrmContractServiceImpl implements CrmContractService {
         contractMapper.updateById(new CrmContractDO().setId(id).setAuditStatus(auditStatus));
     }
 
-    //======================= 查询相关 =======================
+    // ======================= 查询相关 =======================
 
     @Override
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
@@ -332,7 +333,16 @@ public class CrmContractServiceImpl implements CrmContractService {
 
     @Override
     public PageResult<CrmContractDO> getContractPage(CrmContractPageReqVO pageReqVO, Long userId) {
-        return contractMapper.selectPage(pageReqVO, userId);
+        // 1. 即将到期,需要查询合同配置
+        CrmContractConfigDO config = null;
+        if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) {
+            config = contractConfigService.getContractConfig();
+            if (config != null && Boolean.FALSE.equals(config.getNotifyEnabled())) {
+                config = null;
+            }
+        }
+        // 2. 查询分页
+        return contractMapper.selectPage(pageReqVO, userId, config);
     }
 
     @Override
@@ -367,16 +377,18 @@ public class CrmContractServiceImpl implements CrmContractService {
         return contractProductMapper.selectListByContractId(contactId);
     }
 
-    // TODO @合同待定:需要新增一个 ContractConfigDO 表,合同配置,重点是到期提醒;
-
     @Override
-    public Long getCheckContractCount(Long userId) {
-        return contractMapper.selectCheckContractCount(userId);
+    public Long getAuditContractCount(Long userId) {
+        return contractMapper.selectCountByAudit(userId);
     }
 
     @Override
-    public Long getEndContractCount(Long userId) {
-        return contractMapper.selectEndContractCount(userId);
+    public Long getRemindContractCount(Long userId) {
+        CrmContractConfigDO config = contractConfigService.getContractConfig();
+        if (config == null || Boolean.FALSE.equals(config.getNotifyEnabled())) {
+            return 0L;
+        }
+        return contractMapper.selectCountByRemind(userId, config);
     }
 
 }