Commit 53ebd39c73783018faf09723b1e4ea68caa432ef
1 parent
0b0830f4
✨ CRM:待办事项(接入合同)
Showing
4 changed files
with
41 additions
and
32 deletions
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 { | @@ -215,18 +215,18 @@ public class CrmContractController { | ||
| 215 | }); | 215 | }); |
| 216 | } | 216 | } |
| 217 | 217 | ||
| 218 | - @GetMapping("/check-contract-count") | 218 | + @GetMapping("/audit-count") |
| 219 | @Operation(summary = "获得待审核合同数量") | 219 | @Operation(summary = "获得待审核合同数量") |
| 220 | @PreAuthorize("@ss.hasPermission('crm:contract:query')") | 220 | @PreAuthorize("@ss.hasPermission('crm:contract:query')") |
| 221 | - public CommonResult<Long> getCheckContractCount() { | ||
| 222 | - return success(contractService.getCheckContractCount(getLoginUserId())); | 221 | + public CommonResult<Long> getAuditContractCount() { |
| 222 | + return success(contractService.getAuditContractCount(getLoginUserId())); | ||
| 223 | } | 223 | } |
| 224 | 224 | ||
| 225 | - @GetMapping("/end-contract-count") | ||
| 226 | - @Operation(summary = "获得即将到期的合同数量") | 225 | + @GetMapping("/remind-count") |
| 226 | + @Operation(summary = "获得即将到期(提醒)的合同数量") | ||
| 227 | @PreAuthorize("@ss.hasPermission('crm:contract:query')") | 227 | @PreAuthorize("@ss.hasPermission('crm:contract:query')") |
| 228 | - public CommonResult<Long> getEndContractCount() { | ||
| 229 | - return success(contractService.getEndContractCount(getLoginUserId())); | 228 | + public CommonResult<Long> getRemindContractCount() { |
| 229 | + return success(contractService.getRemindContractCount(getLoginUserId())); | ||
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | } | 232 | } |
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; | @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 7 | import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; | 7 | import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; |
| 8 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; | 8 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; |
| 9 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO; | ||
| 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; | 10 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; | 11 | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; |
| 11 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | 12 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| @@ -49,7 +50,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | @@ -49,7 +50,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||
| 49 | .orderByDesc(CrmContractDO::getId)); | 50 | .orderByDesc(CrmContractDO::getId)); |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | - default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) { | 53 | + default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId, CrmContractConfigDO config) { |
| 53 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | 54 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 54 | // 拼接数据权限的查询条件 | 55 | // 拼接数据权限的查询条件 |
| 55 | CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | 56 | CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), |
| @@ -67,10 +68,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | @@ -67,10 +68,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||
| 67 | LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); | 68 | LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); |
| 68 | LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); | 69 | LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); |
| 69 | if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) { // 即将到期 | 70 | if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) { // 即将到期 |
| 70 | - // TODO: @芋艿 需要配置 提前提醒天数 | ||
| 71 | - int REMIND_DAYS = 20; | ||
| 72 | query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) | 71 | query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) |
| 73 | - .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS)); | 72 | + .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays())); |
| 74 | } else if (CrmContractPageReqVO.EXPIRY_TYPE_EXPIRED.equals(pageReqVO.getExpiryType())) { // 已到期 | 73 | } else if (CrmContractPageReqVO.EXPIRY_TYPE_EXPIRED.equals(pageReqVO.getExpiryType())) { // 已到期 |
| 75 | query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) | 74 | query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) |
| 76 | .lt(CrmContractDO::getEndTime, endOfToday); | 75 | .lt(CrmContractDO::getEndTime, endOfToday); |
| @@ -95,17 +94,17 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | @@ -95,17 +94,17 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||
| 95 | return selectCount(CrmContractDO::getBusinessId, businessId); | 94 | return selectCount(CrmContractDO::getBusinessId, businessId); |
| 96 | } | 95 | } |
| 97 | 96 | ||
| 98 | - default Long selectCheckContractCount(Long userId) { | 97 | + default Long selectCountByAudit(Long userId) { |
| 99 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | 98 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 100 | // 我负责的 + 非公海 | 99 | // 我负责的 + 非公海 |
| 101 | CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | 100 | CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), |
| 102 | CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | 101 | CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 103 | - // 未提交 or 审核不通过 | ||
| 104 | - query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); | 102 | + // 未审核 |
| 103 | + query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus()); | ||
| 105 | return selectCount(query); | 104 | return selectCount(query); |
| 106 | } | 105 | } |
| 107 | 106 | ||
| 108 | - default Long selectEndContractCount(Long userId) { | 107 | + default Long selectCountByRemind(Long userId, CrmContractConfigDO config) { |
| 109 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | 108 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 110 | // 我负责的 + 非公海 | 109 | // 我负责的 + 非公海 |
| 111 | CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | 110 | CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), |
| @@ -113,10 +112,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | @@ -113,10 +112,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||
| 113 | // 即将到期 | 112 | // 即将到期 |
| 114 | LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); | 113 | LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); |
| 115 | LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); | 114 | LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); |
| 116 | - // TODO: @dhb52 需要配置 提前提醒天数 | ||
| 117 | - int REMIND_DAYS = 20; | ||
| 118 | - query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) | ||
| 119 | - .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS)); | 115 | + query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) // 必须审批通过! |
| 116 | + .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays())); | ||
| 120 | return selectCount(query); | 117 | return selectCount(query); |
| 121 | } | 118 | } |
| 122 | 119 |
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 { | @@ -162,14 +162,14 @@ public interface CrmContractService { | ||
| 162 | * @param userId 用户编号 | 162 | * @param userId 用户编号 |
| 163 | * @return 提醒数量 | 163 | * @return 提醒数量 |
| 164 | */ | 164 | */ |
| 165 | - Long getCheckContractCount(Long userId); | 165 | + Long getAuditContractCount(Long userId); |
| 166 | 166 | ||
| 167 | /** | 167 | /** |
| 168 | - * 获得即将到期的合同数量 | 168 | + * 获得即将到期(提醒)的合同数量 |
| 169 | * | 169 | * |
| 170 | * @param userId 用户编号 | 170 | * @param userId 用户编号 |
| 171 | * @return 提醒数量 | 171 | * @return 提醒数量 |
| 172 | */ | 172 | */ |
| 173 | - Long getEndContractCount(Long userId); | 173 | + Long getRemindContractCount(Long userId); |
| 174 | 174 | ||
| 175 | } | 175 | } |
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; | @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; | ||
| 13 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; | 13 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; |
| 14 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO; | 14 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO; |
| 15 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractTransferReqVO; | 15 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractTransferReqVO; |
| 16 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO; | ||
| 16 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; | 17 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| 17 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO; | 18 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO; |
| 18 | import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; | 19 | import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; |
| @@ -83,6 +84,8 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -83,6 +84,8 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 83 | private CrmBusinessService businessService; | 84 | private CrmBusinessService businessService; |
| 84 | @Resource | 85 | @Resource |
| 85 | private CrmContactService contactService; | 86 | private CrmContactService contactService; |
| 87 | + @Resource | ||
| 88 | + private CrmContractConfigService contractConfigService; | ||
| 86 | 89 | ||
| 87 | @Resource | 90 | @Resource |
| 88 | private AdminUserApi adminUserApi; | 91 | private AdminUserApi adminUserApi; |
| @@ -172,8 +175,6 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -172,8 +175,6 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 172 | } | 175 | } |
| 173 | } | 176 | } |
| 174 | 177 | ||
| 175 | - // TODO @合同待定:缺一个取消合同的接口;只有草稿、审批中可以取消;CrmAuditStatusEnum | ||
| 176 | - | ||
| 177 | /** | 178 | /** |
| 178 | * 校验关联数据是否存在 | 179 | * 校验关联数据是否存在 |
| 179 | * | 180 | * |
| @@ -314,7 +315,7 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -314,7 +315,7 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 314 | contractMapper.updateById(new CrmContractDO().setId(id).setAuditStatus(auditStatus)); | 315 | contractMapper.updateById(new CrmContractDO().setId(id).setAuditStatus(auditStatus)); |
| 315 | } | 316 | } |
| 316 | 317 | ||
| 317 | - //======================= 查询相关 ======================= | 318 | + // ======================= 查询相关 ======================= |
| 318 | 319 | ||
| 319 | @Override | 320 | @Override |
| 320 | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.READ) | 321 | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.READ) |
| @@ -332,7 +333,16 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -332,7 +333,16 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 332 | 333 | ||
| 333 | @Override | 334 | @Override |
| 334 | public PageResult<CrmContractDO> getContractPage(CrmContractPageReqVO pageReqVO, Long userId) { | 335 | public PageResult<CrmContractDO> getContractPage(CrmContractPageReqVO pageReqVO, Long userId) { |
| 335 | - return contractMapper.selectPage(pageReqVO, userId); | 336 | + // 1. 即将到期,需要查询合同配置 |
| 337 | + CrmContractConfigDO config = null; | ||
| 338 | + if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) { | ||
| 339 | + config = contractConfigService.getContractConfig(); | ||
| 340 | + if (config != null && Boolean.FALSE.equals(config.getNotifyEnabled())) { | ||
| 341 | + config = null; | ||
| 342 | + } | ||
| 343 | + } | ||
| 344 | + // 2. 查询分页 | ||
| 345 | + return contractMapper.selectPage(pageReqVO, userId, config); | ||
| 336 | } | 346 | } |
| 337 | 347 | ||
| 338 | @Override | 348 | @Override |
| @@ -367,16 +377,18 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -367,16 +377,18 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 367 | return contractProductMapper.selectListByContractId(contactId); | 377 | return contractProductMapper.selectListByContractId(contactId); |
| 368 | } | 378 | } |
| 369 | 379 | ||
| 370 | - // TODO @合同待定:需要新增一个 ContractConfigDO 表,合同配置,重点是到期提醒; | ||
| 371 | - | ||
| 372 | @Override | 380 | @Override |
| 373 | - public Long getCheckContractCount(Long userId) { | ||
| 374 | - return contractMapper.selectCheckContractCount(userId); | 381 | + public Long getAuditContractCount(Long userId) { |
| 382 | + return contractMapper.selectCountByAudit(userId); | ||
| 375 | } | 383 | } |
| 376 | 384 | ||
| 377 | @Override | 385 | @Override |
| 378 | - public Long getEndContractCount(Long userId) { | ||
| 379 | - return contractMapper.selectEndContractCount(userId); | 386 | + public Long getRemindContractCount(Long userId) { |
| 387 | + CrmContractConfigDO config = contractConfigService.getContractConfig(); | ||
| 388 | + if (config == null || Boolean.FALSE.equals(config.getNotifyEnabled())) { | ||
| 389 | + return 0L; | ||
| 390 | + } | ||
| 391 | + return contractMapper.selectCountByRemind(userId, config); | ||
| 380 | } | 392 | } |
| 381 | 393 | ||
| 382 | } | 394 | } |