Commit ee39ce190e3e25aa7d294cca39ab7ac0694e9c6d

Authored by 张志伟
1 parent be4d1cc6

:sparkles: 续保跟进角色调整,跟进任务分配

fw-valhalla-domain/src/main/java/cn/fw/valhalla/domain/dto/RoleChangeDTO.java 0 → 100644
  1 +package cn.fw.valhalla.domain.dto;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Data;
  5 +import lombok.NoArgsConstructor;
  6 +import lombok.ToString;
  7 +
  8 +/**
  9 + * @author : kurisu
  10 + * @className : RoleChangeDTO
  11 + * @description : 角色变动dto
  12 + * @date: 2021-02-20 15:11
  13 + */
  14 +@Data
  15 +@AllArgsConstructor
  16 +@NoArgsConstructor
  17 +@ToString
  18 +public class RoleChangeDTO {
  19 + /**
  20 + * 门店
  21 + */
  22 + private Long shopId;
  23 + /**
  24 + * 用户id
  25 + */
  26 + private Long userId;
  27 + /**
  28 + * 用户名称
  29 + */
  30 + private String userName;
  31 +}
... ...
fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/task/RoleChangeTask.java
1 1 package cn.fw.valhalla.controller.task;
2 2  
  3 +import cn.fw.valhalla.common.constant.RoleCode;
3 4 import cn.fw.valhalla.common.utils.StringUtils;
4 5 import cn.fw.valhalla.domain.db.LeaveNeedDo;
  6 +import cn.fw.valhalla.domain.dto.RoleChangeDTO;
  7 +import cn.fw.valhalla.domain.enums.LeaveReasonEnum;
  8 +import cn.fw.valhalla.domain.enums.LeaveTodoTypeEnum;
5 9 import cn.fw.valhalla.service.bus.LeaveNeedDoBizService;
6 10 import com.alibaba.fastjson.JSONObject;
7 11 import lombok.Getter;
... ... @@ -15,6 +19,7 @@ import org.springframework.stereotype.Component;
15 19 import org.springframework.util.CollectionUtils;
16 20  
17 21 import java.util.ArrayList;
  22 +import java.util.Date;
18 23 import java.util.List;
19 24 import java.util.Objects;
20 25  
... ... @@ -31,9 +36,9 @@ public class RoleChangeTask {
31 36 private final LeaveNeedDoBizService leaveNeedDoBizService;
32 37 private final StringRedisTemplate redisTemplate;
33 38  
34   - @Value("${spring.cache.custom.global-prefix}:mq:role:change")
  39 + @Value("${spring.cache.custom.global-prefix}:mq:role")
35 40 @Getter
36   - private String roleChangeKey;
  41 + private String keyPrefix;
37 42  
38 43 @Autowired
39 44 public RoleChangeTask(final LeaveNeedDoBizService leaveNeedDoBizService,
... ... @@ -44,28 +49,71 @@ public class RoleChangeTask {
44 49  
45 50  
46 51 /**
47   - * 处理员工角色变动
  52 + * 服务顾问角色变动
48 53 */
49 54 @Scheduled(initialDelay = 1000 * 30, fixedRate = 1000 * 60 * 60)
50   - public void dealData() {
  55 + public void dealFwgwData() {
51 56 List<String> failList = new ArrayList<>();
52 57 String jsonStr;
53   - while ((jsonStr = redisTemplate.opsForList().leftPop(getRoleChangeKey())) != null) {
54   - LeaveNeedDo leaveNeedDo = JSONObject.parseObject(jsonStr, LeaveNeedDo.class);
55   - if (Objects.isNull(leaveNeedDo)) {
  58 + while ((jsonStr = redisTemplate.opsForList().leftPop(getRedisKey(RoleCode.FWGW))) != null) {
  59 + RoleChangeDTO roleChangeDTO = JSONObject.parseObject(jsonStr, RoleChangeDTO.class);
  60 + if (Objects.isNull(roleChangeDTO)) {
56 61 continue;
57 62 }
58 63 try {
59   - leaveNeedDoBizService.add(leaveNeedDo);
  64 + leaveNeedDoBizService.add(createDb(roleChangeDTO.getUserId(), roleChangeDTO.getShopId(), roleChangeDTO.getUserName()));
60 65 } catch (Exception e) {
61 66 if (StringUtils.isValid(jsonStr)) {
62 67 failList.add(jsonStr);
63 68 }
64   - log.error("处理员工角色变动失败", e);
  69 + log.error("处理服务接待角色变动失败", e);
65 70 }
66 71 }
67 72 if (!CollectionUtils.isEmpty(failList)) {
68   - redisTemplate.opsForList().rightPushAll(getRoleChangeKey(), failList);
  73 + redisTemplate.opsForList().rightPushAll(getRedisKey(RoleCode.FWGW), failList);
69 74 }
70 75 }
  76 +
  77 + /**
  78 + * 续保角色
  79 + */
  80 + @Scheduled(initialDelay = 1000 * 30, fixedRate = 1000 * 60 * 60)
  81 + public void dealXbData() {
  82 + List<String> failList = new ArrayList<>();
  83 + String jsonStr;
  84 + while ((jsonStr = redisTemplate.opsForList().leftPop(getRedisKey(RoleCode.XBGJ))) != null) {
  85 + RoleChangeDTO roleChangeDTO = JSONObject.parseObject(jsonStr, RoleChangeDTO.class);
  86 + if (Objects.isNull(roleChangeDTO)) {
  87 + continue;
  88 + }
  89 + try {
  90 + leaveNeedDoBizService.xbgjChanged(roleChangeDTO);
  91 + } catch (Exception e) {
  92 + if (StringUtils.isValid(jsonStr)) {
  93 + failList.add(jsonStr);
  94 + }
  95 + log.error("处理续保跟进角色变动失败", e);
  96 + }
  97 + }
  98 + if (!CollectionUtils.isEmpty(failList)) {
  99 + redisTemplate.opsForList().rightPushAll(getRedisKey(RoleCode.XBGJ), failList);
  100 + }
  101 + }
  102 +
  103 + private String getRedisKey(final String roleCode) {
  104 + return String.format("%s:change:%s", getKeyPrefix(), roleCode);
  105 + }
  106 +
  107 + private LeaveNeedDo createDb(Long userId, Long shopId, String userName) {
  108 + LeaveNeedDo leaveNeedDo = new LeaveNeedDo();
  109 + leaveNeedDo.setDone(Boolean.FALSE);
  110 + leaveNeedDo.setEffectiveTime(new Date());
  111 + leaveNeedDo.setReason(LeaveReasonEnum.CHANGE);
  112 + leaveNeedDo.setType(LeaveTodoTypeEnum.CUSTOMER);
  113 + leaveNeedDo.setShopId(shopId);
  114 + leaveNeedDo.setUserId(userId);
  115 + leaveNeedDo.setUserName(userName);
  116 + leaveNeedDo.setCreateTime(new Date());
  117 + return leaveNeedDo;
  118 + }
71 119 }
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/component/RoleChangeConsumer.java
... ... @@ -4,6 +4,7 @@ import cn.fw.erp.sdk.api.enums.OperateTypeEnum;
4 4 import cn.fw.erp.sdk.api.mq.RoleChangeEvent;
5 5 import cn.fw.valhalla.common.constant.RoleCode;
6 6 import cn.fw.valhalla.domain.db.LeaveNeedDo;
  7 +import cn.fw.valhalla.domain.dto.RoleChangeDTO;
7 8 import cn.fw.valhalla.domain.enums.LeaveReasonEnum;
8 9 import cn.fw.valhalla.domain.enums.LeaveTodoTypeEnum;
9 10 import com.alibaba.fastjson.JSON;
... ... @@ -32,9 +33,9 @@ import java.util.Objects;
32 33 public class RoleChangeConsumer implements RocketMQListener<RoleChangeEvent> {
33 34 private final StringRedisTemplate redisTemplate;
34 35  
35   - @Value("${spring.cache.custom.global-prefix}:mq:role:change")
  36 + @Value("${spring.cache.custom.global-prefix}:mq:role")
36 37 @Getter
37   - private String roleChangeKey;
  38 + private String keyPrefix;
38 39  
39 40 @Autowired
40 41 public RoleChangeConsumer(final StringRedisTemplate redisTemplate) {
... ... @@ -48,28 +49,21 @@ public class RoleChangeConsumer implements RocketMQListener&lt;RoleChangeEvent&gt; {
48 49 if (Objects.isNull(t)) {
49 50 return;
50 51 }
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));
  52 + if (OperateTypeEnum.BLOCK.getValue().equals(t.getType()) && RoleCode.FWGW.equalsIgnoreCase(t.getRoleCode())) {
  53 + String jsonString = JSONObject.toJSONString(new RoleChangeDTO(t.getRangeValue(), t.getUserId(), t.getUserName()));
  54 + redisTemplate.boundListOps(getRedisKey(RoleCode.FWGW)).rightPush(jsonString);
  55 + }
  56 +
  57 + if (OperateTypeEnum.BLOCK.getValue().equals(t.getType()) && RoleCode.XBGJ.equalsIgnoreCase(t.getRoleCode())) {
  58 + String jsonString = JSONObject.toJSONString(new RoleChangeDTO(t.getRangeValue(), t.getUserId(), t.getUserName()));
  59 + redisTemplate.boundListOps(getRedisKey(RoleCode.XBGJ)).rightPush(jsonString);
57 60 }
58 61 } catch (Exception ex) {
59 62 log.error("消费角色变动mq失败,原因:{}", JSON.toJSONString(ex));
60 63 }
61 64 }
62 65  
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;
  66 + private String getRedisKey(final String roleCode) {
  67 + return String.format("%s:change:%s", getKeyPrefix(), roleCode);
74 68 }
75 69 }
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/LeaveNeedDoBizService.java
... ... @@ -12,11 +12,11 @@ import cn.fw.valhalla.common.enums.AllocationTypeEnum;
12 12 import cn.fw.valhalla.common.utils.DateUtil;
13 13 import cn.fw.valhalla.domain.db.LeaveNeedDo;
14 14 import cn.fw.valhalla.domain.db.customer.Customer;
15   -import cn.fw.valhalla.domain.db.follow.FollowRecord;
16 15 import cn.fw.valhalla.domain.db.follow.FollowTask;
17 16 import cn.fw.valhalla.domain.db.pool.CustomerCluePool;
18 17 import cn.fw.valhalla.domain.db.pool.StammkundePool;
19 18 import cn.fw.valhalla.domain.dto.LeaveAllocationDTO;
  19 +import cn.fw.valhalla.domain.dto.RoleChangeDTO;
20 20 import cn.fw.valhalla.domain.dto.StammkundeDto;
21 21 import cn.fw.valhalla.domain.enums.*;
22 22 import cn.fw.valhalla.domain.query.LeaveQueryVO;
... ... @@ -177,6 +177,41 @@ public class LeaveNeedDoBizService {
177 177 }
178 178 }
179 179  
  180 +
  181 + @Transactional(rollbackFor = Exception.class)
  182 + public void xbgjChanged(RoleChangeDTO dto) {
  183 + final Long userId = dto.getUserId();
  184 + final Long shopId = dto.getShopId();
  185 + List<ClueStatusEnum> statusList = Arrays.asList(ClueStatusEnum.WAITING, ClueStatusEnum.ONGOING);
  186 + List<CustomerCluePool> list = customerCluePoolService.list(Wrappers.<CustomerCluePool>lambdaQuery()
  187 + .in(CustomerCluePool::getClueStatus, statusList)
  188 + .eq(CustomerCluePool::getOriginalShopId, shopId)
  189 + .eq(CustomerCluePool::getClueType, FollowTypeEnum.IR)
  190 + .eq(CustomerCluePool::getOriginalUserId, userId)
  191 + );
  192 + if (CollectionUtils.isEmpty(list)) {
  193 + return;
  194 + }
  195 + List<PostUserDTO> userList = userService.getUserByRole(shopId, RoleCode.XBGJ);
  196 + BV.isNotEmpty(userList, () -> "更换跟进人员失败:没有更多续保跟进员");
  197 + Collections.shuffle(userList);
  198 + PostUserDTO userDTO = userList.stream().filter(u -> !u.getUserId().equals(userId)).findAny().orElse(null);
  199 + BV.notNull(userDTO, () -> "更换跟进人员失败:没有更多续保跟进员");
  200 +
  201 + for (CustomerCluePool clue : list) {
  202 + if (ClueStatusEnum.WAITING.equals(clue.getClueStatus())) {
  203 + clue.setOriginalUserId(userDTO.getUserId());
  204 + clue.setOriginalUserName(userDTO.getUserName());
  205 + clue.setOriginalShopId(shopId);
  206 + Optional.ofNullable(oopService.shop(shopId)).ifPresent(shop -> clue.setOriginalShopName(shop.getShortName()));
  207 + continue;
  208 + }
  209 + dealTask(clue, userDTO.getUserId(), shopId);
  210 + }
  211 +
  212 + customerCluePoolService.updateBatchById(list);
  213 + }
  214 +
180 215 private void prepareAllocation(LeaveAllocationDTO dto) {
181 216 AllocationTypeEnum typeEnum = AllocationTypeEnum.ofValue(dto.getAllocationType());
182 217 BV.notNull(typeEnum, () -> "分配方式不正确,请重试");
... ... @@ -312,31 +347,27 @@ public class LeaveNeedDoBizService {
312 347 customerCluePoolService.updateBatchById(list);
313 348 }
314 349  
315   - private void dealTask(CustomerCluePool clue, Long adviserId, Long shopId) {
316   - if (Boolean.FALSE.equals(clue.getRedistribution())) {
317   - clue.setRedistribution(Boolean.TRUE);
318   - }
  350 + private void dealTask(CustomerCluePool clue, Long userId, Long shopId) {
319 351 FollowTask task = followTaskService.queryOngoingTaskByClueId(clue.getId());
320 352 if (Objects.isNull(task)) {
321 353 return;
322 354 }
323   - UserInfoDTO user = userService.user(adviserId);
  355 + UserInfoDTO user = userService.user(userId);
324 356 String userName = Objects.nonNull(user) ? user.getUserName() : "";
325   -
326   - if (Boolean.TRUE.equals(task.getRedistribution())) {
327   - task.setFollowUser(adviserId);
328   - task.setFollowUserName(userName);
329   - task.setFollowShop(shopId);
330   - followTaskService.updateById(task);
331   - stopRecord(task);
332   - return;
333   - }
334 357 task.setCloseTime(new Date());
335 358 task.setState(TaskStateEnum.DEFEAT);
336 359 task.setReason(TaskDefeatTypeEnum.D);
337 360 followTaskService.updateById(task);
338 361 followRecordService.removeByTaskId(task.getId());
339 362  
  363 + if (Boolean.TRUE.equals(task.getRedistribution())) {
  364 + clue.setCloseTime(new Date());
  365 + clue.setClueStatus(ClueStatusEnum.FAILURE);
  366 + return;
  367 + } else {
  368 + clue.setRedistribution(Boolean.TRUE);
  369 + }
  370 +
340 371 FollowTask nTask = new FollowTask();
341 372 nTask.setClueId(clue.getId());
342 373 nTask.setCustomerId(clue.getRefererId());
... ... @@ -345,7 +376,7 @@ public class LeaveNeedDoBizService {
345 376 nTask.setBeginTime(new Date());
346 377 nTask.setRedistribution(Boolean.TRUE);
347 378 nTask.setDeadline(clue.getDeadline());
348   - nTask.setFollowUser(adviserId);
  379 + nTask.setFollowUser(userId);
349 380 task.setFollowUserName(userName);
350 381 nTask.setFollowShop(shopId);
351 382 nTask.setGroupId(clue.getGroupId());
... ... @@ -353,36 +384,6 @@ public class LeaveNeedDoBizService {
353 384 followBizService.startTask(nTask);
354 385 }
355 386  
356   - private void stopRecord(FollowTask task) {
357   - List<FollowRecord> list = followRecordService.list(Wrappers.<FollowRecord>lambdaQuery()
358   - .eq(FollowRecord::getTaskId, task.getId())
359   - .eq(FollowRecord::getOutTime, Boolean.FALSE)
360   - .eq(FollowRecord::getAddTodo, Boolean.FALSE)
361   - .isNull(FollowRecord::getFollowTime)
362   - );
363   - if (!CollectionUtils.isEmpty(list)) {
364   - list.forEach(r -> {
365   - r.setUserId(task.getFollowUser());
366   - r.setUserName(task.getFollowUserName());
367   - r.setShopId(task.getFollowShop());
368   - });
369   - followRecordService.updateBatchById(list);
370   - }
371   -
372   - list = followRecordService.list(Wrappers.<FollowRecord>lambdaQuery()
373   - .eq(FollowRecord::getTaskId, task.getId())
374   - .eq(FollowRecord::getOutTime, Boolean.FALSE)
375   - .eq(FollowRecord::getAddTodo, Boolean.TRUE)
376   - .isNull(FollowRecord::getFollowTime)
377   - );
378   - if (CollectionUtils.isEmpty(list)) {
379   - return;
380   - }
381   - for (FollowRecord record : list) {
382   - followBizService.completeRecordAndEnd(record, true);
383   - }
384   - }
385   -
386 387  
387 388 private void finish(LoginAuthBean user, Long leaveId, String key) {
388 389 leaveNeedDoService.dealById(leaveId);
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/FollowBizService.java
... ... @@ -173,10 +173,10 @@ public class FollowBizService {
173 173 * @param record
174 174 */
175 175 @Transactional(rollbackFor = Exception.class)
176   - public void completeRecordAndEnd(FollowRecord record, boolean needNew) {
  176 + public void completeRecordAndEnd(FollowRecord record) {
177 177 FollowStrategy strategy = followMap.get(record.getType());
178 178 Assert.notNull(strategy, "strategy cannot be null");
179   - strategy.completeRecordAndEnd(record, needNew);
  179 + strategy.completeRecordAndEnd(record);
180 180 }
181 181  
182 182 /**
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/strategy/AbstractFollowStrategy.java
... ... @@ -3,6 +3,7 @@ package cn.fw.valhalla.service.bus.follow.strategy;
3 3 import cn.fw.common.cache.locker.DistributedLocker;
4 4 import cn.fw.common.exception.BusinessException;
5 5 import cn.fw.common.web.auth.LoginAuthBean;
  6 +import cn.fw.valhalla.common.constant.RoleCode;
6 7 import cn.fw.valhalla.common.utils.DateUtil;
7 8 import cn.fw.valhalla.common.utils.StringUtils;
8 9 import cn.fw.valhalla.domain.db.OriginalData;
... ... @@ -23,7 +24,9 @@ import cn.fw.valhalla.rpc.angel.dto.InsuranceDTO;
23 24 import cn.fw.valhalla.rpc.erp.TodoRpcService;
24 25 import cn.fw.valhalla.rpc.erp.UserService;
25 26 import cn.fw.valhalla.rpc.erp.dto.BackLogItemDTO;
  27 +import cn.fw.valhalla.rpc.erp.dto.PostUserDTO;
26 28 import cn.fw.valhalla.rpc.erp.dto.UserInfoDTO;
  29 +import cn.fw.valhalla.rpc.erp.dto.UserRoleDataRangeDTO;
27 30 import cn.fw.valhalla.rpc.oop.OopService;
28 31 import cn.fw.valhalla.rpc.oop.dto.ShopDTO;
29 32 import cn.fw.valhalla.service.bus.cust.CustomerBizService;
... ... @@ -234,7 +237,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy {
234 237  
235 238 @Override
236 239 @Transactional(rollbackFor = Exception.class)
237   - public void completeRecordAndEnd(FollowRecord record, boolean needNew) {
  240 + public void completeRecordAndEnd(FollowRecord record) {
238 241 boolean equals = Boolean.FALSE.equals(record.getOutTime()) && Objects.isNull(record.getFollowTime());
239 242 if (!equals) {
240 243 return;
... ... @@ -242,9 +245,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy {
242 245 final Date followTime = DateUtil.localDateTime2Date(LocalDateTime.now());
243 246 record.setFollowTime(followTime);
244 247 followRecordService.updateById(record);
245   - if (needNew) {
246   - this.addTaskRecord(record, false);
247   - }
  248 + this.addTaskRecord(record, false);
248 249 BackLogItemDTO dto = new BackLogItemDTO(record.getUserId(), getItemCode(record.getType()), String.valueOf(record.getId()), followTime, record.getShopId());
249 250 todoRpcService.complete(dto);
250 251 }
... ... @@ -845,7 +846,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy {
845 846 if (!CollectionUtils.isEmpty(recordList)) {
846 847 for (FollowRecord record : recordList) {
847 848 if (Boolean.TRUE.equals(record.getAddTodo())) {
848   - completeRecordAndEnd(record, false);
  849 + completeRecordAndEnd(record);
849 850 } else {
850 851 followRecordService.removeById(record.getId());
851 852 }
... ... @@ -867,6 +868,11 @@ public abstract class AbstractFollowStrategy implements FollowStrategy {
867 868 if (!TaskStateEnum.ONGOING.equals(task.getState())) {
868 869 return true;
869 870 }
  871 + boolean isFwgw = FollowTypeEnum.FM.equals(task.getType()) || FollowTypeEnum.RM.equals(task.getType());
  872 + List<UserRoleDataRangeDTO> dataRange = userService.getUserRoleDataRange(task.getFollowUser(), isFwgw ? RoleCode.FWGW : RoleCode.XBGJ);
  873 + if (CollectionUtils.isEmpty(dataRange)) {
  874 + return true;
  875 + }
870 876 //任务截止日期
871 877 final Date deadline = task.getDeadline();
872 878 Optional<SettingVO> fcsetting = settingBizService.querySettingByType(record.getType(), SettingTypeEnum.FOLLOW_CYCLE, record.getGroupId());
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/strategy/FollowStrategy.java
... ... @@ -69,7 +69,7 @@ public interface FollowStrategy {
69 69 *
70 70 * @param record
71 71 */
72   - void completeRecordAndEnd(FollowRecord record, boolean needNew);
  72 + void completeRecordAndEnd(FollowRecord record);
73 73  
74 74 /**
75 75 * 上传跟进附件
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/strategy/impl/ACFollowStrategy.java
... ... @@ -105,7 +105,7 @@ public class ACFollowStrategy extends AbstractFollowStrategy {
105 105 }
106 106  
107 107 @Override
108   - public void completeRecordAndEnd(FollowRecord record, boolean needNew) {
  108 + public void completeRecordAndEnd(FollowRecord record) {
109 109 final Date followTime = DateUtil.localDateTime2Date(LocalDateTime.now());
110 110 BackLogItemDTO dto = new BackLogItemDTO(record.getUserId(), getItemCode(record.getType()), String.valueOf(record.getId()), followTime, record.getShopId());
111 111 if (Boolean.FALSE.equals(record.getOutTime()) && Objects.isNull(record.getFollowTime())) {
... ...
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/data/impl/FollowRecordServiceImpl.java
... ... @@ -73,7 +73,7 @@ public class FollowRecordServiceImpl extends ServiceImpl&lt;FollowRecordMapper, Fol
73 73 public boolean removeByTaskId(Long taskId) {
74 74 return this.remove(Wrappers.<FollowRecord>lambdaQuery()
75 75 .eq(FollowRecord::getTaskId, taskId)
76   - .eq(FollowRecord::getOutTime, Boolean.FALSE)
  76 + .eq(FollowRecord::getAddTodo, Boolean.FALSE)
77 77 .isNull(FollowRecord::getFollowTime)
78 78 );
79 79 }
... ...