Commit 3525dd806d9df587ae3965e9c0e6acf90e684411

Authored by 张志伟
1 parent a9a68a32

Squashed commit of the following:

commit 80bc9c6d
Author: Kurisu <makise_kurisuu@outlook.jp>
Date:   Thu Jan 28 10:47:06 2021 +0800

    :sparkles: 对接erp人员离职调岗生成保有客分配待办

commit 24d960a4
Author: Kurisu <makise_kurisuu@outlook.jp>
Date:   Thu Jan 28 09:05:22 2021 +0800

    :sparkles: test

commit 7f324872
Author: Kurisu <makise_kurisuu@outlook.jp>
Date:   Wed Jan 27 18:25:15 2021 +0800

    :sparkles: test
fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/task/CallReportDealTask.java
... ... @@ -67,7 +67,7 @@ public class CallReportDealTask {
67 67 }
68 68  
69 69 /**
70   - * 发送服务号消息
  70 + * 处理通话记录
71 71 */
72 72 @Scheduled(initialDelay = 1000 * 5, fixedRate = 1000 * 30)
73 73 public void dealCallReport() {
... ...
fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/task/RoleChangeTask.java 0 → 100644
  1 +package cn.fw.valhalla.controller.task;
  2 +
  3 +import cn.fw.valhalla.common.utils.StringUtils;
  4 +import cn.fw.valhalla.domain.db.LeaveNeedDo;
  5 +import cn.fw.valhalla.service.bus.LeaveNeedDoBizService;
  6 +import com.alibaba.fastjson.JSONObject;
  7 +import lombok.Getter;
  8 +import lombok.extern.slf4j.Slf4j;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.beans.factory.annotation.Value;
  11 +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  12 +import org.springframework.data.redis.core.StringRedisTemplate;
  13 +import org.springframework.scheduling.annotation.Scheduled;
  14 +import org.springframework.stereotype.Component;
  15 +
  16 +import java.util.ArrayList;
  17 +import java.util.List;
  18 +import java.util.Objects;
  19 +
  20 +/**
  21 + * @author : kurisu
  22 + * @className : CallReportDealTask
  23 + * @description : 通话记录处理任务
  24 + * @date: 2021-01-19 16:02
  25 + */
  26 +@Slf4j
  27 +@Component
  28 +@ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
  29 +public class RoleChangeTask {
  30 + private final LeaveNeedDoBizService leaveNeedDoBizService;
  31 + private final StringRedisTemplate redisTemplate;
  32 +
  33 + @Value("${spring.cache.custom.global-prefix}:mq:role:change")
  34 + @Getter
  35 + private String roleChangeKey;
  36 +
  37 + @Autowired
  38 + public RoleChangeTask(final LeaveNeedDoBizService leaveNeedDoBizService,
  39 + final StringRedisTemplate redisTemplate) {
  40 + this.leaveNeedDoBizService = leaveNeedDoBizService;
  41 + this.redisTemplate = redisTemplate;
  42 + }
  43 +
  44 +
  45 + /**
  46 + * 处理员工角色变动
  47 + */
  48 + @Scheduled(initialDelay = 1000 * 30, fixedRate = 1000 * 60 * 60)
  49 + public void dealData() {
  50 + List<String> failList = new ArrayList<>();
  51 + String jsonStr;
  52 + while ((jsonStr = redisTemplate.opsForList().leftPop(getRoleChangeKey())) != null) {
  53 + LeaveNeedDo leaveNeedDo = JSONObject.parseObject(jsonStr, LeaveNeedDo.class);
  54 + if (Objects.isNull(leaveNeedDo)) {
  55 + continue;
  56 + }
  57 + try {
  58 + leaveNeedDoBizService.add(leaveNeedDo);
  59 + } catch (Exception e) {
  60 + if (StringUtils.isValid(jsonStr)) {
  61 + failList.add(jsonStr);
  62 + }
  63 + log.error("处理员工角色变动失败", e);
  64 + }
  65 + }
  66 + redisTemplate.opsForList().rightPushAll(getRoleChangeKey(), failList);
  67 + }
  68 +}
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/component/RoleChangeConsumer.java 0 → 100644
  1 +package cn.fw.valhalla.component;
  2 +
  3 +import cn.fw.erp.sdk.api.enums.OperateTypeEnum;
  4 +import cn.fw.erp.sdk.api.mq.RoleChangeEvent;
  5 +import cn.fw.valhalla.common.constant.RoleCode;
  6 +import cn.fw.valhalla.domain.db.LeaveNeedDo;
  7 +import cn.fw.valhalla.domain.enums.LeaveReasonEnum;
  8 +import cn.fw.valhalla.domain.enums.LeaveTodoTypeEnum;
  9 +import com.alibaba.fastjson.JSON;
  10 +import com.alibaba.fastjson.JSONObject;
  11 +import lombok.Getter;
  12 +import lombok.extern.slf4j.Slf4j;
  13 +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
  14 +import org.apache.rocketmq.spring.core.RocketMQListener;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.beans.factory.annotation.Value;
  17 +import org.springframework.data.redis.core.StringRedisTemplate;
  18 +import org.springframework.stereotype.Component;
  19 +
  20 +import java.util.Date;
  21 +import java.util.Objects;
  22 +
  23 +/**
  24 + * @author : kurisu
  25 + * @className : RoleChangeConsumer
  26 + * @description : 角色变动mq
  27 + * @date: 2021-01-28 09:49
  28 + */
  29 +@Slf4j
  30 +@Component
  31 +@RocketMQMessageListener(topic = RoleChangeEvent.TOPIC, consumerGroup = "${spring.application.name}-" + RoleChangeEvent.TOPIC)
  32 +public class RoleChangeConsumer implements RocketMQListener<RoleChangeEvent> {
  33 + private final StringRedisTemplate redisTemplate;
  34 +
  35 + @Value("${spring.cache.custom.global-prefix}:mq:role:change")
  36 + @Getter
  37 + private String roleChangeKey;
  38 +
  39 + @Autowired
  40 + public RoleChangeConsumer(final StringRedisTemplate redisTemplate) {
  41 + this.redisTemplate = redisTemplate;
  42 + }
  43 +
  44 + @Override
  45 + public void onMessage(RoleChangeEvent t) {
  46 + log.info("监听角色变动mq: RoleChangeEvent=[{}]", t);
  47 + try {
  48 + if (Objects.isNull(t)) {
  49 + return;
  50 + }
  51 + if (OperateTypeEnum.REMOVE.getValue().equals(t.getType()) && RoleCode.FWGW.equalsIgnoreCase(t.getRoleCode())) {
  52 + Long shopId = t.getRangeValue();
  53 + Long userId = t.getUserId();
  54 + String userName = t.getUserName();
  55 + LeaveNeedDo leaveNeedDo = createDb(userId, shopId, userName);
  56 + redisTemplate.boundListOps(getRoleChangeKey()).rightPush(JSONObject.toJSONString(leaveNeedDo));
  57 + }
  58 + } catch (Exception ex) {
  59 + log.error("消费角色变动mq失败,原因:{}", JSON.toJSONString(ex));
  60 + }
  61 + }
  62 +
  63 + private LeaveNeedDo createDb(Long userId, Long shopId, String userName) {
  64 + LeaveNeedDo leaveNeedDo = new LeaveNeedDo();
  65 + leaveNeedDo.setDone(Boolean.FALSE);
  66 + leaveNeedDo.setEffectiveTime(new Date());
  67 + leaveNeedDo.setReason(LeaveReasonEnum.CHANGE);
  68 + leaveNeedDo.setType(LeaveTodoTypeEnum.CUSTOMER);
  69 + leaveNeedDo.setShopId(shopId);
  70 + leaveNeedDo.setUserId(userId);
  71 + leaveNeedDo.setUserName(userName);
  72 + leaveNeedDo.setCreateTime(new Date());
  73 + return leaveNeedDo;
  74 + }
  75 +}
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/LeaveNeedDoBizService.java
... ... @@ -104,6 +104,32 @@ public class LeaveNeedDoBizService {
104 104 }
105 105 }
106 106  
  107 + @Transactional(rollbackFor = Exception.class)
  108 + public void add(LeaveNeedDo leaveNeedDo) {
  109 + Long userId = leaveNeedDo.getUserId();
  110 + Long shopId = leaveNeedDo.getShopId();
  111 + List<PostUserDTO> postUserDTOS = userService.getUserByRole(shopId, RoleCode.BYKFP);
  112 + BV.isFalse(CollectionUtils.isEmpty(postUserDTOS), () -> "该门店没有配置保有客分配人员");
  113 + boolean bool = leaveNeedDoService.count(Wrappers.<LeaveNeedDo>lambdaQuery()
  114 + .eq(LeaveNeedDo::getUserId, userId)
  115 + .eq(LeaveNeedDo::getShopId, shopId)
  116 + .eq(LeaveNeedDo::getDone, Boolean.FALSE)
  117 + ) > 0;
  118 + if (bool) {
  119 + return;
  120 + }
  121 + bool = customerService.count(Wrappers.<Customer>lambdaQuery()
  122 + .eq(Customer::getAdviserId, userId)
  123 + .eq(Customer::getShopId, shopId)
  124 + .eq(Customer::getYn, Boolean.TRUE)
  125 + ) <= 0;
  126 + if (bool) {
  127 + return;
  128 + }
  129 + leaveNeedDoService.save(leaveNeedDo);
  130 + push2Todo(leaveNeedDo.getId(), postUserDTOS.get(0).getUserId(), shopId);
  131 + }
  132 +
107 133 public AppPage<LeaveNeedDoVO> getList(LoginAuthBean currentUser, LeaveQueryVO queryVO) {
108 134 List<UserRoleDataRangeDTO> dataRange = userService.getUserRoleDataRange(currentUser.getUserId(), RoleCode.BYKFP);
109 135 List<Long> shopIds = dataRange.stream().map(UserRoleDataRangeDTO::getRangeValue).collect(Collectors.toList());
... ...