Commit cb8d4e0976dc6d69cd177e4fa4e9ac3e902cbcfb

Authored by YunaiV
1 parent a531ba29

✨ CRM:增加回款的待办事项逻辑

yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
@@ -164,13 +164,6 @@ public class CrmReceivableController { @@ -164,13 +164,6 @@ public class CrmReceivableController {
164 }); 164 });
165 } 165 }
166 166
167 - @GetMapping("/check-receivables-count")  
168 - @Operation(summary = "获得待审核回款数量")  
169 - @PreAuthorize("@ss.hasPermission('crm:receivable:query')")  
170 - public CommonResult<Long> getCheckReceivablesCount() {  
171 - return success(receivableService.getCheckReceivablesCount(getLoginUserId()));  
172 - }  
173 -  
174 @PutMapping("/submit") 167 @PutMapping("/submit")
175 @Operation(summary = "提交回款审批") 168 @Operation(summary = "提交回款审批")
176 @PreAuthorize("@ss.hasPermission('crm:receivable:update')") 169 @PreAuthorize("@ss.hasPermission('crm:receivable:update')")
@@ -179,4 +172,11 @@ public class CrmReceivableController { @@ -179,4 +172,11 @@ public class CrmReceivableController {
179 return success(true); 172 return success(true);
180 } 173 }
181 174
  175 + @GetMapping("/audit-count")
  176 + @Operation(summary = "获得待审核回款数量")
  177 + @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
  178 + public CommonResult<Long> getAuditReceivableCount() {
  179 + return success(receivableService.getAuditReceivableCount(getLoginUserId()));
  180 + }
  181 +
182 } 182 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivablePlanController.java
@@ -163,13 +163,6 @@ public class CrmReceivablePlanController { @@ -163,13 +163,6 @@ public class CrmReceivablePlanController {
163 }); 163 });
164 } 164 }
165 165
166 - @GetMapping("/remind-receivable-plan-count")  
167 - @Operation(summary = "获得待回款提醒数量")  
168 - @PreAuthorize("@ss.hasPermission('crm:receivable-plan:query')")  
169 - public CommonResult<Long> getRemindReceivablesCount() {  
170 - return success(receivablePlanService.getRemindReceivablePlanCount(getLoginUserId()));  
171 - }  
172 -  
173 @GetMapping("/simple-list") 166 @GetMapping("/simple-list")
174 @Operation(summary = "获得回款计划精简列表", description = "获得回款计划精简列表,主要用于前端的下拉选项") 167 @Operation(summary = "获得回款计划精简列表", description = "获得回款计划精简列表,主要用于前端的下拉选项")
175 @Parameters({ 168 @Parameters({
@@ -187,4 +180,11 @@ public class CrmReceivablePlanController { @@ -187,4 +180,11 @@ public class CrmReceivablePlanController {
187 .setPrice(receivablePlan.getPrice()).setReturnType(receivablePlan.getReturnType()))); 180 .setPrice(receivablePlan.getPrice()).setReturnType(receivablePlan.getReturnType())));
188 } 181 }
189 182
  183 + @GetMapping("/remind-count")
  184 + @Operation(summary = "获得待回款提醒数量")
  185 + @PreAuthorize("@ss.hasPermission('crm:receivable-plan:query')")
  186 + public CommonResult<Long> getReceivablePlanRemindCount() {
  187 + return success(receivablePlanService.getReceivablePlanRemindCount(getLoginUserId()));
  188 + }
  189 +
190 } 190 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
@@ -68,13 +68,13 @@ public interface CrmReceivableMapper extends BaseMapperX&lt;CrmReceivableDO&gt; { @@ -68,13 +68,13 @@ public interface CrmReceivableMapper extends BaseMapperX&lt;CrmReceivableDO&gt; {
68 return selectJoinList(CrmReceivableDO.class, query); 68 return selectJoinList(CrmReceivableDO.class, query);
69 } 69 }
70 70
71 - default Long selectCheckReceivablesCount(Long userId) { 71 + default Long selectCountByAudit(Long userId) {
72 MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); 72 MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>();
73 // 我负责的 + 非公海 73 // 我负责的 + 非公海
74 CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), 74 CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(),
75 CrmReceivableDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); 75 CrmReceivableDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE);
76 - // 未提交 or 审核不通过  
77 - query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); 76 + // 未审核
  77 + query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus());
78 return selectCount(query); 78 return selectCount(query);
79 } 79 }
80 80
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java
@@ -60,19 +60,16 @@ public interface CrmReceivablePlanMapper extends BaseMapperX&lt;CrmReceivablePlanDO @@ -60,19 +60,16 @@ public interface CrmReceivablePlanMapper extends BaseMapperX&lt;CrmReceivablePlanDO
60 } 60 }
61 61
62 // Backlog: 回款提醒类型 62 // Backlog: 回款提醒类型
63 - // TODO: @dhb52 需要配置 提前提醒天数  
64 - int REMIND_DAYS = 20;  
65 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); 63 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
66 - LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());  
67 if (CrmReceivablePlanPageReqVO.REMIND_TYPE_NEEDED.equals(pageReqVO.getRemindType())) { // 待回款 64 if (CrmReceivablePlanPageReqVO.REMIND_TYPE_NEEDED.equals(pageReqVO.getRemindType())) { // 待回款
68 - query.isNull(CrmReceivablePlanDO::getReceivableId)  
69 - .between(CrmReceivablePlanDO::getReturnTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS)); 65 + query.isNull(CrmReceivablePlanDO::getReceivableId) // 未回款
  66 + .lt(CrmReceivablePlanDO::getReturnTime, beginOfToday) // 已逾期
  67 + .lt(CrmReceivablePlanDO::getRemindTime, beginOfToday); // 今天开始提醒
70 } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_EXPIRED.equals(pageReqVO.getRemindType())) { // 已逾期 68 } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_EXPIRED.equals(pageReqVO.getRemindType())) { // 已逾期
71 - query.isNull(CrmReceivablePlanDO::getReceivableId)  
72 - .lt(CrmReceivablePlanDO::getReturnTime, endOfToday); 69 + query.isNull(CrmReceivablePlanDO::getReceivableId) // 未回款
  70 + .ge(CrmReceivablePlanDO::getReturnTime, beginOfToday); // 已逾期
73 } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_RECEIVED.equals(pageReqVO.getRemindType())) { // 已回款 71 } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_RECEIVED.equals(pageReqVO.getRemindType())) { // 已回款
74 - query.isNotNull(CrmReceivablePlanDO::getReceivableId)  
75 - .between(CrmReceivablePlanDO::getReturnTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS)); 72 + query.isNotNull(CrmReceivablePlanDO::getReceivableId);
76 } 73 }
77 return selectJoinPage(pageReqVO, CrmReceivablePlanDO.class, query); 74 return selectJoinPage(pageReqVO, CrmReceivablePlanDO.class, query);
78 } 75 }
@@ -86,20 +83,16 @@ public interface CrmReceivablePlanMapper extends BaseMapperX&lt;CrmReceivablePlanDO @@ -86,20 +83,16 @@ public interface CrmReceivablePlanMapper extends BaseMapperX&lt;CrmReceivablePlanDO
86 return selectJoinList(CrmReceivablePlanDO.class, query); 83 return selectJoinList(CrmReceivablePlanDO.class, query);
87 } 84 }
88 85
89 - default Long selectRemindReceivablePlanCount(Long userId) { 86 + default Long selectReceivablePlanCountByRemind(Long userId) {
90 MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); 87 MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>();
91 // 我负责的 + 非公海 88 // 我负责的 + 非公海
92 CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), 89 CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(),
93 CrmReceivablePlanDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); 90 CrmReceivablePlanDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE);
94 - // TODO: @dhb52 需要配置 提前提醒天数  
95 - int REMIND_DAYS = 20; 91 + // 未回款 + 已逾期 + 今天开始提醒
96 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); 92 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
97 - LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());  
98 - query.isNull(CrmReceivablePlanDO::getReceivableId)  
99 - .between(CrmReceivablePlanDO::getReturnTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS));  
100 - // TODO return_time 小于现在;  
101 - // TODO 未回款  
102 - // TODO remind_time 大于现在; 93 + query.isNull(CrmReceivablePlanDO::getReceivableId) // 未回款
  94 + .lt(CrmReceivablePlanDO::getReturnTime, beginOfToday) // 已逾期
  95 + .lt(CrmReceivablePlanDO::getRemindTime, beginOfToday); // 今天开始提醒
103 return selectCount(query); 96 return selectCount(query);
104 } 97 }
105 98
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/job/package-info.java
1 /** 1 /**
2 - * TODO 芋艿:临时占位,后续可删除 2 + * 定时任务
3 */ 3 */
4 package cn.iocoder.yudao.module.crm.job; 4 package cn.iocoder.yudao.module.crm.job;
5 \ No newline at end of file 5 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -222,7 +222,7 @@ public class CrmContractServiceImpl implements CrmContractService { @@ -222,7 +222,7 @@ public class CrmContractServiceImpl implements CrmContractService {
222 success = CRM_CONTRACT_DELETE_SUCCESS) 222 success = CRM_CONTRACT_DELETE_SUCCESS)
223 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.OWNER) 223 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
224 public void deleteContract(Long id) { 224 public void deleteContract(Long id) {
225 - // TODO @合同待定:如果被 CrmReceivableDO 所使用,则不允许删除 225 + // TODO @puhui999:如果被 CrmReceivableDO 所使用,则不允许删除
226 // 校验存在 226 // 校验存在
227 CrmContractDO contract = validateContractExists(id); 227 CrmContractDO contract = validateContractExists(id);
228 // 删除 228 // 删除
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanService.java
@@ -90,6 +90,6 @@ public interface CrmReceivablePlanService { @@ -90,6 +90,6 @@ public interface CrmReceivablePlanService {
90 * @param userId 用户编号 90 * @param userId 用户编号
91 * @return 提醒数量 91 * @return 提醒数量
92 */ 92 */
93 - Long getRemindReceivablePlanCount(Long userId); 93 + Long getReceivablePlanRemindCount(Long userId);
94 94
95 } 95 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java
@@ -184,8 +184,8 @@ public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService { @@ -184,8 +184,8 @@ public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService {
184 } 184 }
185 185
186 @Override 186 @Override
187 - public Long getRemindReceivablePlanCount(Long userId) {  
188 - return receivablePlanMapper.selectRemindReceivablePlanCount(userId); 187 + public Long getReceivablePlanRemindCount(Long userId) {
  188 + return receivablePlanMapper.selectReceivablePlanCountByRemind(userId);
189 } 189 }
190 190
191 } 191 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableService.java
@@ -110,9 +110,9 @@ public interface CrmReceivableService { @@ -110,9 +110,9 @@ public interface CrmReceivableService {
110 * 获得待审核回款数量 110 * 获得待审核回款数量
111 * 111 *
112 * @param userId 用户编号 112 * @param userId 用户编号
113 - * @return 提醒数量 113 + * @return 待审批数量
114 */ 114 */
115 - Long getCheckReceivablesCount(Long userId); 115 + Long getAuditReceivableCount(Long userId);
116 116
117 /** 117 /**
118 * 获得合同已回款金额 Map 118 * 获得合同已回款金额 Map
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
@@ -212,7 +212,7 @@ public class CrmReceivableServiceImpl implements CrmReceivableService { @@ -212,7 +212,7 @@ public class CrmReceivableServiceImpl implements CrmReceivableService {
212 if (receivable.getPlanId() != null && receivablePlanService.getReceivablePlan(receivable.getPlanId()) != null) { 212 if (receivable.getPlanId() != null && receivablePlanService.getReceivablePlan(receivable.getPlanId()) != null) {
213 throw exception(RECEIVABLE_DELETE_FAIL); 213 throw exception(RECEIVABLE_DELETE_FAIL);
214 } 214 }
215 - // TODO @芋艿:审批通过时,不允许删除; 215 + // TODO @puhui999:审批通过时,不允许删除;
216 216
217 // 2. 删除 217 // 2. 删除
218 receivableMapper.deleteById(id); 218 receivableMapper.deleteById(id);
@@ -280,8 +280,8 @@ public class CrmReceivableServiceImpl implements CrmReceivableService { @@ -280,8 +280,8 @@ public class CrmReceivableServiceImpl implements CrmReceivableService {
280 } 280 }
281 281
282 @Override 282 @Override
283 - public Long getCheckReceivablesCount(Long userId) {  
284 - return receivableMapper.selectCheckReceivablesCount(userId); 283 + public Long getAuditReceivableCount(Long userId) {
  284 + return receivableMapper.selectCountByAudit(userId);
285 } 285 }
286 286
287 @Override 287 @Override