Commit 6b1e138dcfce9b7bcd88d55e85e089d23a2bc905
1 parent
844f64a3
feature(*): 升级依赖
- 升级依赖引入kotlin支持 - 新增补贴跟进类型
Showing
11 changed files
with
103 additions
and
3 deletions
fw-shirasawa-domain/src/main/java/cn/fw/shirasawa/domain/enums/FollowTypeEnum.java
@@ -25,6 +25,7 @@ public enum FollowTypeEnum implements IEnum<Integer> { | @@ -25,6 +25,7 @@ public enum FollowTypeEnum implements IEnum<Integer> { | ||
25 | FA(8, "急救跟进"), | 25 | FA(8, "急救跟进"), |
26 | RV(9, "回访跟进"), | 26 | RV(9, "回访跟进"), |
27 | PL(10, "公共池跟进"), | 27 | PL(10, "公共池跟进"), |
28 | + SF(11, "补贴跟进"), | ||
28 | /** | 29 | /** |
29 | * 其他 | 30 | * 其他 |
30 | * 目前只用于设置,并不参与具体跟进业务 | 31 | * 目前只用于设置,并不参与具体跟进业务 |
fw-shirasawa-sdk/pom.xml
@@ -10,7 +10,7 @@ | @@ -10,7 +10,7 @@ | ||
10 | <relativePath>../pom.xml</relativePath> | 10 | <relativePath>../pom.xml</relativePath> |
11 | </parent> | 11 | </parent> |
12 | <artifactId>fw-shirasawa-sdk</artifactId> | 12 | <artifactId>fw-shirasawa-sdk</artifactId> |
13 | - <version>1.0.2</version> | 13 | + <version>1.0.3</version> |
14 | <packaging>jar</packaging> | 14 | <packaging>jar</packaging> |
15 | <name>fw-shirasawa-sdk</name> | 15 | <name>fw-shirasawa-sdk</name> |
16 | 16 |
fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/enums/DataTypeEnum.java
@@ -25,6 +25,7 @@ public enum DataTypeEnum implements IEnum<Integer> { | @@ -25,6 +25,7 @@ public enum DataTypeEnum implements IEnum<Integer> { | ||
25 | FA(8, "急救"), | 25 | FA(8, "急救"), |
26 | RV(9, "回访"), | 26 | RV(9, "回访"), |
27 | PL(10, "公共池跟进"), | 27 | PL(10, "公共池跟进"), |
28 | + SF(11, "补贴跟进"), | ||
28 | ; | 29 | ; |
29 | 30 | ||
30 | /** | 31 | /** |
fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/param/FollowGenerateDTO.java
@@ -4,6 +4,7 @@ import cn.fw.shirasawa.sdk.enums.BusinessTypeEnum; | @@ -4,6 +4,7 @@ import cn.fw.shirasawa.sdk.enums.BusinessTypeEnum; | ||
4 | import cn.fw.shirasawa.sdk.enums.DataTypeEnum; | 4 | import cn.fw.shirasawa.sdk.enums.DataTypeEnum; |
5 | import lombok.*; | 5 | import lombok.*; |
6 | 6 | ||
7 | +import javax.validation.constraints.Future; | ||
7 | import javax.validation.constraints.NotBlank; | 8 | import javax.validation.constraints.NotBlank; |
8 | import javax.validation.constraints.NotEmpty; | 9 | import javax.validation.constraints.NotEmpty; |
9 | import javax.validation.constraints.NotNull; | 10 | import javax.validation.constraints.NotNull; |
@@ -76,6 +77,7 @@ public class FollowGenerateDTO { | @@ -76,6 +77,7 @@ public class FollowGenerateDTO { | ||
76 | /** | 77 | /** |
77 | * 截止时间 | 78 | * 截止时间 |
78 | */ | 79 | */ |
80 | + @Future(message = "截止时间必须是未来时间") | ||
79 | private Date deadline; | 81 | private Date deadline; |
80 | /** | 82 | /** |
81 | * 首次跟进待办截止时间 | 83 | * 首次跟进待办截止时间 |
fw-shirasawa-server/src/main/resources/application-gray.yml
@@ -56,6 +56,7 @@ follow: | @@ -56,6 +56,7 @@ follow: | ||
56 | PFCode: 'O6zZjZ17st' | 56 | PFCode: 'O6zZjZ17st' |
57 | FACode: '' | 57 | FACode: '' |
58 | RVCode: '' | 58 | RVCode: '' |
59 | + SFCode: '' | ||
59 | FmTemplateCode: 'SMS_215116996' | 60 | FmTemplateCode: 'SMS_215116996' |
60 | RmTemplateCode: 'SMS_215072079' | 61 | RmTemplateCode: 'SMS_215072079' |
61 | IrTemplateCode: '' | 62 | IrTemplateCode: '' |
fw-shirasawa-server/src/main/resources/application-prd.yml
@@ -55,6 +55,7 @@ follow: | @@ -55,6 +55,7 @@ follow: | ||
55 | PFCode: 'O6zZjZ17st' | 55 | PFCode: 'O6zZjZ17st' |
56 | FACode: '' | 56 | FACode: '' |
57 | RVCode: '' | 57 | RVCode: '' |
58 | + SFCode: '' | ||
58 | FmTemplateCode: 'SMS_215116996' | 59 | FmTemplateCode: 'SMS_215116996' |
59 | RmTemplateCode: 'SMS_215072079' | 60 | RmTemplateCode: 'SMS_215072079' |
60 | IrTemplateCode: '' | 61 | IrTemplateCode: '' |
fw-shirasawa-server/src/main/resources/application-test.yml
@@ -66,6 +66,7 @@ follow: | @@ -66,6 +66,7 @@ follow: | ||
66 | PFCode: 'O6zZjZ17st' | 66 | PFCode: 'O6zZjZ17st' |
67 | FACode: '' | 67 | FACode: '' |
68 | RVCode: '' | 68 | RVCode: '' |
69 | + SFCode: '' | ||
69 | FmTemplateCode: '' | 70 | FmTemplateCode: '' |
70 | RmTemplateCode: '' | 71 | RmTemplateCode: '' |
71 | IrTemplateCode: '' | 72 | IrTemplateCode: '' |
72 | \ No newline at end of file | 73 | \ No newline at end of file |
fw-shirasawa-server/src/main/resources/application.yml
@@ -145,6 +145,7 @@ follow: | @@ -145,6 +145,7 @@ follow: | ||
145 | FACode: '' | 145 | FACode: '' |
146 | RVCode: '' | 146 | RVCode: '' |
147 | PLCode: '' | 147 | PLCode: '' |
148 | + SFCode: '' | ||
148 | FmTemplateCode: '' | 149 | FmTemplateCode: '' |
149 | RmTemplateCode: '' | 150 | RmTemplateCode: '' |
150 | IrTemplateCode: '' | 151 | IrTemplateCode: '' |
fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/AbstractFollowStrategy.java
@@ -695,7 +695,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy { | @@ -695,7 +695,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy { | ||
695 | */ | 695 | */ |
696 | protected boolean dealRepeatClue(CluePool cluePool, FollowStrategy strategy) { | 696 | protected boolean dealRepeatClue(CluePool cluePool, FollowStrategy strategy) { |
697 | //判断是否可以去重 | 697 | //判断是否可以去重 |
698 | - if (null == cluePool.getCoverFlag() || Boolean.FALSE.equals(cluePool.getCoverFlag())) { | 698 | + if (!Boolean.TRUE.equals(cluePool.getCoverFlag())) { |
699 | return false; | 699 | return false; |
700 | } | 700 | } |
701 | boolean isContainAF = false; | 701 | boolean isContainAF = false; |
fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/SFFollowStrategy.java
0 → 100644
1 | +package cn.fw.shirasawa.service.bus.follow.strategy.impl; | ||
2 | + | ||
3 | +import cn.fw.shirasawa.domain.db.OriginalData; | ||
4 | +import cn.fw.shirasawa.domain.db.follow.FollowRecord; | ||
5 | +import cn.fw.shirasawa.domain.db.follow.FollowTask; | ||
6 | +import cn.fw.shirasawa.domain.db.pool.CluePool; | ||
7 | +import cn.fw.shirasawa.domain.enums.ClueStatusEnum; | ||
8 | +import cn.fw.shirasawa.domain.enums.FollowTypeEnum; | ||
9 | +import cn.fw.shirasawa.service.bus.follow.strategy.AbstractFollowStrategy; | ||
10 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||
11 | +import lombok.Getter; | ||
12 | +import lombok.extern.slf4j.Slf4j; | ||
13 | +import org.springframework.beans.factory.annotation.Value; | ||
14 | +import org.springframework.stereotype.Component; | ||
15 | +import org.springframework.transaction.annotation.Transactional; | ||
16 | +import org.springframework.util.CollectionUtils; | ||
17 | + | ||
18 | +import java.time.LocalDate; | ||
19 | +import java.time.LocalDateTime; | ||
20 | +import java.util.List; | ||
21 | +import java.util.Objects; | ||
22 | +import java.util.Optional; | ||
23 | + | ||
24 | +import static cn.fw.common.businessvalidator.Validator.BV; | ||
25 | + | ||
26 | +/** | ||
27 | + * 补贴跟进 | ||
28 | + * | ||
29 | + * @author : kurisu | ||
30 | + * @version : 1.0 | ||
31 | + * @className : SFFollowStrategy | ||
32 | + * @description : 补贴跟进 | ||
33 | + * @date : 2023-03-13 15:16 | ||
34 | + */ | ||
35 | +@Slf4j | ||
36 | +@Component | ||
37 | +@SuppressWarnings("Duplicates") | ||
38 | +public class SFFollowStrategy extends AbstractFollowStrategy { | ||
39 | + @Value("${follow.todo.SFCode}") | ||
40 | + @Getter | ||
41 | + private String SFCode; | ||
42 | + | ||
43 | + @Override | ||
44 | + public FollowTypeEnum getFollowType() { | ||
45 | + return FollowTypeEnum.SF; | ||
46 | + } | ||
47 | + | ||
48 | + @Override | ||
49 | + public String getTodoCode() { | ||
50 | + return getSFCode(); | ||
51 | + } | ||
52 | + | ||
53 | + @Override | ||
54 | + @Transactional(rollbackFor = Exception.class) | ||
55 | + public boolean origin2task(OriginalData originalData) throws Exception { | ||
56 | + List<CluePool> list = cluePoolService.list(Wrappers.<CluePool>lambdaQuery() | ||
57 | + .eq(CluePool::getClueType, getFollowType()) | ||
58 | + .eq(CluePool::getCustomerId, originalData.getCustomerId()) | ||
59 | + .eq(CluePool::getRefererId, originalData.getDetailId()) | ||
60 | + .eq(CluePool::getGroupId, originalData.getGroupId()) | ||
61 | + .in(CluePool::getClueStatus, ClueStatusEnum.ONGOING, ClueStatusEnum.WAITING) | ||
62 | + ); | ||
63 | + if (!CollectionUtils.isEmpty(list)) { | ||
64 | + return true; | ||
65 | + } | ||
66 | + CluePool cluePool = transformClue(originalData); | ||
67 | + cluePool.setStartTime(originalData.getGenerateTime()); | ||
68 | + LocalDateTime deadLine = Optional.ofNullable(originalData.getDeadline()).orElse(LocalDate.now().plusYears(10L).atStartOfDay()); | ||
69 | + cluePool.setDeadline(deadLine.minusSeconds(1L)); | ||
70 | + return cluePoolService.save(cluePool); | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
74 | + @Transactional(rollbackFor = Exception.class) | ||
75 | + public void startClue(CluePool cluePool) throws Exception { | ||
76 | + dealRepeatClue(cluePool, this); | ||
77 | + FollowTask task = this.createTask(cluePool); | ||
78 | + boolean saveTask = followTaskService.save(task); | ||
79 | + BV.isTrue(saveTask, () -> "生成跟进任务失败"); | ||
80 | + FollowRecord record = createRecord(task); | ||
81 | + record.setTodoCode(getTodoCode()); | ||
82 | + record.setNote(cluePool.getNote()); | ||
83 | + record.setContacts(cluePool.getContacts()); | ||
84 | + if (Objects.nonNull(cluePool.getFirstDeadline())) { | ||
85 | + record.setDeadline(cluePool.getFirstDeadline()); | ||
86 | + } | ||
87 | + followRecordService.save(record); | ||
88 | + | ||
89 | + cluePool.setClueStatus(ClueStatusEnum.ONGOING); | ||
90 | + cluePoolService.updateById(cluePool); | ||
91 | + } | ||
92 | +} |
pom.xml
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | <properties> | 28 | <properties> |
29 | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | 29 | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
30 | <java.version>1.8</java.version> | 30 | <java.version>1.8</java.version> |
31 | - <fw.shirasawa.sdk>1.0.2</fw.shirasawa.sdk> | 31 | + <fw.shirasawa.sdk>1.0.3</fw.shirasawa.sdk> |
32 | <!-- util --> | 32 | <!-- util --> |
33 | <spring-retry.version>1.2.4.RELEASE</spring-retry.version> | 33 | <spring-retry.version>1.2.4.RELEASE</spring-retry.version> |
34 | <!-- database --> | 34 | <!-- database --> |