From 17bf353d4b80ee6b0faeb3b9573ddb01c0b62d9d Mon Sep 17 00:00:00 2001 From: Kurisu Date: Tue, 14 Mar 2023 15:34:33 +0800 Subject: [PATCH] :zap: feature(*): 新增查询进行中待办数量的接口 --- fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/api/FollowApiService.java | 19 ++++++++++++++++--- fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/mq/FollowResultDTO.java | 4 ++++ fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/api/FollowApiServiceImpl.java | 10 ++++++++++ fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/app/FollowController.java | 1 - fw-shirasawa-server/src/main/resources/application-gray.yml | 2 +- fw-shirasawa-server/src/main/resources/application-prd.yml | 2 +- fw-shirasawa-server/src/main/resources/application-test.yml | 1 - fw-shirasawa-server/src/main/resources/application.yml | 2 +- fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/CustomEventListener.java | 4 ++++ fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/FollowBizService.java | 11 +++++++++++ fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/AbstractFollowStrategy.java | 1 - fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/ACFollowStrategy.java | 1 - fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/FollowRecordService.java | 11 +++++++++++ fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/impl/FollowRecordServiceImpl.java | 15 +++++++++++++++ lombok.config | 2 ++ 15 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 lombok.config diff --git a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/api/FollowApiService.java b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/api/FollowApiService.java index 09e6227..c152d50 100644 --- a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/api/FollowApiService.java +++ b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/api/FollowApiService.java @@ -23,6 +23,7 @@ public interface FollowApiService { /** * 保存会产生跟进的业务数据 * 事故车的场景联系方式不能为空 + * * @param generateDTO * @return */ @@ -33,6 +34,7 @@ public interface FollowApiService { * 批量保存 * 最多支持1000条 * 事故车的场景联系方式不能为空 + * * @param paramList * @return */ @@ -87,12 +89,23 @@ public interface FollowApiService { Message terminationBatch(@Valid @RequestBody CustomList paramList); /** - * 根据类型和档案id查询已完成的跟进记录 - * @param bizType 跟进业务类型 1-售前 2-售后 + * 根据类型和档案id查询已完成的跟进记录 + * + * @param bizType 跟进业务类型 1-售前 2-售后 * @param customerId 档案id * @return */ @GetMapping("/getCompletedFollowRecord") Message> getCompletedFollowRecord(@RequestParam("bizType") @NotNull(message = "业务类型不能为空!") Integer bizType, - @RequestParam("customerId") @NotEmpty(message = "档案id不能为空!") List customerId); + @RequestParam("customerId") @NotEmpty(message = "档案id不能为空!") List customerId); + + /** + * 查询用户剩余待办数 + * @param userId 用户id + * @param bizType 业态类型 {@link cn.fw.shirasawa.sdk.enums.BusinessTypeEnum} + * @return + */ + @GetMapping("/query_record_remaining") + Message queryRecordRemaining(@RequestParam("userId") @NotNull(message = "userId不能为空!") Long userId, + @RequestParam("bizType") @NotNull(message = "业务类型不能为空!") Integer bizType); } \ No newline at end of file diff --git a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/mq/FollowResultDTO.java b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/mq/FollowResultDTO.java index d311b75..d596f39 100644 --- a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/mq/FollowResultDTO.java +++ b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/mq/FollowResultDTO.java @@ -65,4 +65,8 @@ public class FollowResultDTO { * 跟进待办id */ private Long recordId; + /** + * 剩余待办数量 + */ + private Long remaining; } diff --git a/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/api/FollowApiServiceImpl.java b/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/api/FollowApiServiceImpl.java index 9609f92..c6c9283 100644 --- a/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/api/FollowApiServiceImpl.java +++ b/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/api/FollowApiServiceImpl.java @@ -171,4 +171,14 @@ public class FollowApiServiceImpl implements FollowApiService { @RequestParam("customerId") @NotEmpty(message = "档案id不能为空!") List customerId) { return success(followBizService.getCompletedFollowRecord(bizType, customerId)); } + + @Override + @GetMapping("/query_record_remaining") + @ControllerMethod("查询用户剩余待办数") + public Message queryRecordRemaining(@RequestParam("userId") @NotNull(message = "userId不能为空!") Long userId, + @RequestParam("bizType") @NotNull(message = "业务类型不能为空!") Integer bizType) { + BusinessTypeEnum businessType = BusinessTypeEnum.ofValue(bizType); + BV.notNull(businessType, () -> "业务类型不正确"); + return success(followBizService.queryOngoingRecord(userId, businessType)); + } } diff --git a/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/app/FollowController.java b/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/app/FollowController.java index 83aaa06..8088701 100644 --- a/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/app/FollowController.java +++ b/fw-shirasawa-server/src/main/java/cn/fw/shirasawa/server/controller/app/FollowController.java @@ -94,7 +94,6 @@ public class FollowController { } /** - * showdoc * 跟进记录id不能为空 * * @param userId diff --git a/fw-shirasawa-server/src/main/resources/application-gray.yml b/fw-shirasawa-server/src/main/resources/application-gray.yml index a89e408..2451fe4 100644 --- a/fw-shirasawa-server/src/main/resources/application-gray.yml +++ b/fw-shirasawa-server/src/main/resources/application-gray.yml @@ -56,7 +56,7 @@ follow: PFCode: 'O6zZjZ17st' FACode: '' RVCode: '' - SFCode: '' + SFCode: 't8nlNVPNGp' FmTemplateCode: 'SMS_215116996' RmTemplateCode: 'SMS_215072079' IrTemplateCode: '' diff --git a/fw-shirasawa-server/src/main/resources/application-prd.yml b/fw-shirasawa-server/src/main/resources/application-prd.yml index b5e1857..fd377d7 100644 --- a/fw-shirasawa-server/src/main/resources/application-prd.yml +++ b/fw-shirasawa-server/src/main/resources/application-prd.yml @@ -55,7 +55,7 @@ follow: PFCode: 'O6zZjZ17st' FACode: '' RVCode: '' - SFCode: '' + SFCode: 't8nlNVPNGp' FmTemplateCode: 'SMS_215116996' RmTemplateCode: 'SMS_215072079' IrTemplateCode: '' diff --git a/fw-shirasawa-server/src/main/resources/application-test.yml b/fw-shirasawa-server/src/main/resources/application-test.yml index 1bd89d8..b94a358 100644 --- a/fw-shirasawa-server/src/main/resources/application-test.yml +++ b/fw-shirasawa-server/src/main/resources/application-test.yml @@ -66,7 +66,6 @@ follow: PFCode: 'O6zZjZ17st' FACode: '' RVCode: '' - SFCode: '' FmTemplateCode: '' RmTemplateCode: '' IrTemplateCode: '' \ No newline at end of file diff --git a/fw-shirasawa-server/src/main/resources/application.yml b/fw-shirasawa-server/src/main/resources/application.yml index fe3175a..9ffb4be 100644 --- a/fw-shirasawa-server/src/main/resources/application.yml +++ b/fw-shirasawa-server/src/main/resources/application.yml @@ -145,7 +145,7 @@ follow: FACode: '' RVCode: '' PLCode: '' - SFCode: '' + SFCode: 't8nlNVPNGp' FmTemplateCode: '' RmTemplateCode: '' IrTemplateCode: '' diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/CustomEventListener.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/CustomEventListener.java index 0c99b90..5d40a4b 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/CustomEventListener.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/CustomEventListener.java @@ -13,6 +13,7 @@ import cn.fw.shirasawa.rpc.flow.FlowApproveRpc; import cn.fw.shirasawa.sdk.mq.FollowResultDTO; import cn.fw.shirasawa.service.data.ApproveRecordService; import cn.fw.shirasawa.service.data.CluePoolService; +import cn.fw.shirasawa.service.data.FollowRecordService; import cn.fw.shirasawa.service.data.FollowTaskService; import cn.fw.shirasawa.service.event.CancelApproveEvent; import cn.fw.shirasawa.service.event.RecordCompleteEvent; @@ -38,6 +39,7 @@ public class CustomEventListener { private final ApproveRecordService approveRecordService; private final FlowApproveRpc flowApproveRpc; private final CluePoolService cluePoolService; + private final FollowRecordService followRecordService; private final RecordResultProducer recordResultProducer; /** @@ -86,6 +88,7 @@ public class CustomEventListener { if (Objects.isNull(cluePool)) { return; } + long remaining = followRecordService.recordRemaining(record.getUserId(), record.getBizType(), record.getId()); FollowResultDTO dto = new FollowResultDTO(); dto.setCustomerId(record.getCustomerId()); dto.setRecordId(record.getId()); @@ -95,6 +98,7 @@ public class CustomEventListener { dto.setUserName(record.getUserName()); dto.setShopId(record.getShopId()); dto.setGroupId(record.getGroupId()); + dto.setRemaining(remaining); boolean ov = OutTimeEnum.BE_OVERDUE.equals(record.getOutTime()); dto.setOverdue(ov); dto.setResultTime(DateUtil.toDate(ov ? record.getDeadline().minusSeconds(1L) : record.getFollowTime())); diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/FollowBizService.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/FollowBizService.java index 824589a..e97778b 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/FollowBizService.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/FollowBizService.java @@ -992,6 +992,17 @@ public class FollowBizService { } /** + * 查询未完成的待办数量 + * + * @param userId + * @param bizType + * @return + */ + public long queryOngoingRecord(Long userId, BusinessTypeEnum bizType) { + return followRecordService.recordRemaining(userId, bizType, null); + } + + /** * 创建新跟进 * * @param newRecordDTO diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/AbstractFollowStrategy.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/AbstractFollowStrategy.java index e04cce3..1a9deb5 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/AbstractFollowStrategy.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/AbstractFollowStrategy.java @@ -132,7 +132,6 @@ public abstract class AbstractFollowStrategy implements FollowStrategy { BackLogItemDTO dto = new BackLogItemDTO(record.getUserId(), record.getTodoCode(), String.valueOf(record.getId()), DateUtil.toDate(record.getFollowTime()), record.getShopId()); todoRpcService.complete(dto); - eventPublisher.publishEvent(new RecordCompleteEvent(record, task.getClueId())); } diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/ACFollowStrategy.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/ACFollowStrategy.java index e4fe888..8d99412 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/ACFollowStrategy.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/ACFollowStrategy.java @@ -12,7 +12,6 @@ import cn.fw.shirasawa.domain.enums.ClueStatusEnum; import cn.fw.shirasawa.domain.enums.FollowTypeEnum; import cn.fw.shirasawa.domain.enums.OutTimeEnum; import cn.fw.shirasawa.domain.vo.follow.ACDetailVO; -import cn.fw.shirasawa.domain.vo.follow.FollowDetailVO; import cn.fw.shirasawa.rpc.backlog.dto.BackLogItemDTO; import cn.fw.shirasawa.rpc.valhalla.ValhallaRpcService; import cn.fw.shirasawa.rpc.valhalla.dto.ValhallaCustomerDTO; diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/FollowRecordService.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/FollowRecordService.java index c159ff1..23d290a 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/FollowRecordService.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/FollowRecordService.java @@ -4,7 +4,9 @@ import cn.fw.shirasawa.domain.db.follow.FollowRecord; import cn.fw.shirasawa.domain.db.follow.SucessFollowRecord; import cn.fw.shirasawa.domain.dto.FollowRecordPoolDTO; import cn.fw.shirasawa.domain.query.FollowRecordPoolQuery; +import cn.fw.shirasawa.sdk.enums.BusinessTypeEnum; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.lang.Nullable; import java.util.List; @@ -83,4 +85,13 @@ public interface FollowRecordService extends IService { */ List recordPoolList(FollowRecordPoolQuery query); + /** + * 查询用未完成的剩余跟进数量 + * + * @param userId + * @param bizType + * @param recordId 排除记录的id [nullable] + * @return + */ + long recordRemaining(Long userId, BusinessTypeEnum bizType, @Nullable Long recordId); } diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/impl/FollowRecordServiceImpl.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/impl/FollowRecordServiceImpl.java index ffa6485..ccec739 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/impl/FollowRecordServiceImpl.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/data/impl/FollowRecordServiceImpl.java @@ -6,16 +6,19 @@ import cn.fw.shirasawa.domain.db.follow.SucessFollowRecord; import cn.fw.shirasawa.domain.dto.FollowRecordPoolDTO; import cn.fw.shirasawa.domain.enums.OutTimeEnum; import cn.fw.shirasawa.domain.query.FollowRecordPoolQuery; +import cn.fw.shirasawa.sdk.enums.BusinessTypeEnum; import cn.fw.shirasawa.service.data.FollowRecordService; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.Nullable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Optional; /** @@ -109,4 +112,16 @@ public class FollowRecordServiceImpl extends ServiceImpl list = this.getBaseMapper().recordPoolList(startIndex, pageSize, query); return Optional.ofNullable(list).orElse(new ArrayList<>()); } + + @Override + public long recordRemaining(Long userId, BusinessTypeEnum bizType, @Nullable Long recordId) { + return count(Wrappers.lambdaQuery() + .eq(FollowRecord::getUserId, userId) + .eq(FollowRecord::getBizType, bizType) + .eq(FollowRecord::getOutTime, OutTimeEnum.ONGOING) + .eq(FollowRecord::getYn, Boolean.TRUE) + .eq(FollowRecord::getAddTodo, Boolean.TRUE) + .ne(Objects.nonNull(recordId), FollowRecord::getId, recordId) + ); + } } diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..9368817 --- /dev/null +++ b/lombok.config @@ -0,0 +1,2 @@ +config.stopBubbling = true +lombok.accessors.chain=true -- libgit2 0.22.2