diff --git a/fw-shirasawa-common/pom.xml b/fw-shirasawa-common/pom.xml index f346aa3..f4d4787 100644 --- a/fw-shirasawa-common/pom.xml +++ b/fw-shirasawa-common/pom.xml @@ -58,15 +58,4 @@ - - - - org.apache.maven.plugins - maven-deploy-plugin - - true - - - - \ No newline at end of file diff --git a/fw-shirasawa-dao/pom.xml b/fw-shirasawa-dao/pom.xml index f71c70f..5ed6c9b 100644 --- a/fw-shirasawa-dao/pom.xml +++ b/fw-shirasawa-dao/pom.xml @@ -34,16 +34,4 @@ fw-shirasawa-common - - - - - org.apache.maven.plugins - maven-deploy-plugin - - true - - - - \ No newline at end of file diff --git a/fw-shirasawa-domain/pom.xml b/fw-shirasawa-domain/pom.xml index dc1b63c..4d5f722 100644 --- a/fw-shirasawa-domain/pom.xml +++ b/fw-shirasawa-domain/pom.xml @@ -35,16 +35,4 @@ fw-shirasawa-sdk - - - - - org.apache.maven.plugins - maven-deploy-plugin - - true - - - - \ No newline at end of file diff --git a/fw-shirasawa-domain/src/main/java/cn/fw/shirasawa/domain/enums/FollowTypeEnum.java b/fw-shirasawa-domain/src/main/java/cn/fw/shirasawa/domain/enums/FollowTypeEnum.java index 3b6732b..3082678 100644 --- a/fw-shirasawa-domain/src/main/java/cn/fw/shirasawa/domain/enums/FollowTypeEnum.java +++ b/fw-shirasawa-domain/src/main/java/cn/fw/shirasawa/domain/enums/FollowTypeEnum.java @@ -25,6 +25,7 @@ public enum FollowTypeEnum implements IEnum { FA(8, "急救跟进"), RV(9, "回访跟进"), PL(10, "公共池跟进"), + SF(11, "补贴跟进"), /** * 其他 * 目前只用于设置,并不参与具体跟进业务 diff --git a/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/ehr/EhrRpcService.java b/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/ehr/EhrRpcService.java index 4d7edad..2a84f4b 100644 --- a/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/ehr/EhrRpcService.java +++ b/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/ehr/EhrRpcService.java @@ -6,6 +6,7 @@ import cn.fw.ehr.sdk.api.result.StaffInfo; import cn.fw.shirasawa.common.utils.StringUtils; import cn.fw.shirasawa.rpc.AbsBaseRpcService; import cn.fw.shirasawa.rpc.ehr.dto.StaffInfoDTO; +import cn.fw.shirasawa.rpc.erp.dto.UserInfoDTO; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -37,6 +38,22 @@ public class EhrRpcService extends AbsBaseRpcService { } @Nullable + public UserInfoDTO user(final Long userId) { + StaffInfoDTO staffInfoDTO = queryStaffInfo(userId); + if (Objects.isNull(staffInfoDTO)) { + return null; + } + return UserInfoDTO.builder() + .id(staffInfoDTO.getId()) + .userName(staffInfoDTO.getName()) + .headImg(staffInfoDTO.getAvatar()) + .mobile(staffInfoDTO.getMobile()) + .nickName(staffInfoDTO.getName()) + .groupId(staffInfoDTO.getGroupId()) + .build(); + } + + @Nullable public StaffInfoDTO queryStaffInfo(final Long userId) { if (userId == null) { return null; diff --git a/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/erp/UserService.java b/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/erp/UserService.java index 21f1d6f..6496e45 100644 --- a/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/erp/UserService.java +++ b/fw-shirasawa-rpc/src/main/java/cn/fw/shirasawa/rpc/erp/UserService.java @@ -1,15 +1,11 @@ package cn.fw.shirasawa.rpc.erp; import cn.fw.data.base.domain.common.Message; -import cn.fw.erp.sdk.api.UserApi; import cn.fw.erp.sdk.api.UserRoleApi; -import cn.fw.erp.sdk.api.result.UserBaseInfo; import cn.fw.erp.sdk.api.result.UserRoleDataRange; import cn.fw.erp.sdk.api.result.UserRoleInfo; -import cn.fw.shirasawa.common.utils.StringUtils; import cn.fw.shirasawa.rpc.AbsBaseRpcService; import cn.fw.shirasawa.rpc.erp.dto.PostUserDTO; -import cn.fw.shirasawa.rpc.erp.dto.UserInfoDTO; import cn.fw.shirasawa.rpc.erp.dto.UserRoleDataRangeDTO; import com.alibaba.fastjson.JSONObject; import lombok.Getter; @@ -26,10 +22,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static org.apache.commons.lang3.Validate.isTrue; -import static org.apache.commons.lang3.Validate.notNull; /** * 用户服务 @@ -43,10 +35,6 @@ import static org.apache.commons.lang3.Validate.notNull; @RequiredArgsConstructor public class UserService extends AbsBaseRpcService { /** - * 用户服务 - */ - private final UserApi userApi; - /** * 岗位用户服务 */ private final UserRoleApi userRoleApi; @@ -56,83 +44,6 @@ public class UserService extends AbsBaseRpcService { private String keyPrefix; /** - * 根据用户ID获取用户信息 - * - * @param userId 用户ID - * @return 用户信息 - */ - public UserInfoDTO user(final Long userId) { - if (Objects.isNull(userId)) { - return null; - } - String key = generateKey(userId); - String json = getFromCache(key); - if (StringUtils.isValid(json)) { - return JSONObject.parseObject(json, UserInfoDTO.class); - } - try { - final Message msg = userApi.queryUserBaseInfo(userId); - isTrue(msg.isSuccess(), String.format("调用ERP[根据用户ID[%s]获取用户信息]系统失败", msg.getResult())); - final UserBaseInfo userBaseInfo = msg.getData(); - if (!msg.isSuccess() || Objects.isNull(msg.getData())) { - return null; - } - UserInfoDTO userInfoDTO = new UserInfoDTO(); - userInfoDTO.setId(userBaseInfo.getUserId()); - userInfoDTO.setUserName(userBaseInfo.getUserName()); - userInfoDTO.setHeadImg(userBaseInfo.getHeadImg()); - userInfoDTO.setMobile(msg.getData().getMobile()); - setToCache(key, JSONObject.toJSONString(userInfoDTO), 60); - return userInfoDTO; - } catch (Exception e) { - log.info("调用ERP[根据用户ID[{}]获取用户信息]系统失败", userId, e); - } - return null; - } - - /** - * 批量获取用户名字 - * - * @param userIds 用户ID集合 - * @return 用户姓名集合 - */ - public List userNames(final List userIds) { - if (CollectionUtils.isEmpty(userIds)) { - return Collections.emptyList(); - } - Message> userMsg = userApi.queryUserBaseInfos(userIds); - isTrue(userMsg.isSuccess(), "批量获取用户信息失败"); - notNull(userMsg.getData(), "批量获取用户信息为空"); - return userMsg.getData().stream().map(UserBaseInfo::getUserName).collect(Collectors.toList()); - } - - /** - * 批量获取用户 - * - * @param userIds 用户ID集合 - * @return 用户集合 - */ - public List users(final List userIds) { - if (CollectionUtils.isEmpty(userIds)) { - return Collections.emptyList(); - } - Message> userMsg = userApi.queryUserBaseInfos(userIds); - isTrue(userMsg.isSuccess(), "批量获取用户信息失败"); - notNull(userMsg.getData(), "批量获取用户信息为空"); - List result = new ArrayList<>(); - List userBaseInfoList = userMsg.getData(); - for (UserBaseInfo userBaseInfo : userBaseInfoList) { - UserInfoDTO userInfoDTO = new UserInfoDTO(); - userInfoDTO.setId(userBaseInfo.getUserId()); - userInfoDTO.setUserName(userBaseInfo.getUserName()); - userInfoDTO.setHeadImg(userBaseInfo.getHeadImg()); - userInfoDTO.setMobile(userBaseInfo.getMobile()); - result.add(userInfoDTO); - } - return result; - } - - /** * 获取某个流程角色的权限范围 * * @param userId diff --git a/fw-shirasawa-sdk/pom.xml b/fw-shirasawa-sdk/pom.xml index ac75707..58c75db 100644 --- a/fw-shirasawa-sdk/pom.xml +++ b/fw-shirasawa-sdk/pom.xml @@ -10,7 +10,7 @@ ../pom.xml fw-shirasawa-sdk - 1.0.2 + 1.0.3 jar fw-shirasawa-sdk @@ -57,6 +57,13 @@ + + org.apache.maven.plugins + maven-deploy-plugin + + false + + \ No newline at end of file diff --git a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/enums/DataTypeEnum.java b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/enums/DataTypeEnum.java index b66db7d..a155810 100644 --- a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/enums/DataTypeEnum.java +++ b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/enums/DataTypeEnum.java @@ -25,6 +25,7 @@ public enum DataTypeEnum implements IEnum { FA(8, "急救"), RV(9, "回访"), PL(10, "公共池跟进"), + SF(11, "补贴跟进"), ; /** diff --git a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/param/FollowGenerateDTO.java b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/param/FollowGenerateDTO.java index 18b3d92..eac5c7f 100644 --- a/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/param/FollowGenerateDTO.java +++ b/fw-shirasawa-sdk/src/main/java/cn/fw/shirasawa/sdk/param/FollowGenerateDTO.java @@ -4,6 +4,7 @@ import cn.fw.shirasawa.sdk.enums.BusinessTypeEnum; import cn.fw.shirasawa.sdk.enums.DataTypeEnum; import lombok.*; +import javax.validation.constraints.Future; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -76,6 +77,7 @@ public class FollowGenerateDTO { /** * 截止时间 */ + @Future(message = "截止时间必须是未来时间") private Date deadline; /** * 首次跟进待办截止时间 diff --git a/fw-shirasawa-server/pom.xml b/fw-shirasawa-server/pom.xml index db135a7..a08bcb5 100644 --- a/fw-shirasawa-server/pom.xml +++ b/fw-shirasawa-server/pom.xml @@ -149,13 +149,6 @@ true - - org.apache.maven.plugins - maven-deploy-plugin - - true - - diff --git a/fw-shirasawa-server/src/main/resources/application-gray.yml b/fw-shirasawa-server/src/main/resources/application-gray.yml index 920310b..a89e408 100644 --- a/fw-shirasawa-server/src/main/resources/application-gray.yml +++ b/fw-shirasawa-server/src/main/resources/application-gray.yml @@ -56,6 +56,7 @@ follow: PFCode: 'O6zZjZ17st' FACode: '' RVCode: '' + SFCode: '' 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 68c005e..b5e1857 100644 --- a/fw-shirasawa-server/src/main/resources/application-prd.yml +++ b/fw-shirasawa-server/src/main/resources/application-prd.yml @@ -55,6 +55,7 @@ follow: PFCode: 'O6zZjZ17st' FACode: '' RVCode: '' + SFCode: '' 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 b94a358..1bd89d8 100644 --- a/fw-shirasawa-server/src/main/resources/application-test.yml +++ b/fw-shirasawa-server/src/main/resources/application-test.yml @@ -66,6 +66,7 @@ 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 0e0f5b5..fe3175a 100644 --- a/fw-shirasawa-server/src/main/resources/application.yml +++ b/fw-shirasawa-server/src/main/resources/application.yml @@ -145,6 +145,7 @@ follow: FACode: '' RVCode: '' PLCode: '' + SFCode: '' FmTemplateCode: '' RmTemplateCode: '' IrTemplateCode: '' diff --git a/fw-shirasawa-service/pom.xml b/fw-shirasawa-service/pom.xml index 88c0190..e60832a 100644 --- a/fw-shirasawa-service/pom.xml +++ b/fw-shirasawa-service/pom.xml @@ -117,15 +117,4 @@ fw-dfs-sdk - - - - org.apache.maven.plugins - maven-deploy-plugin - - true - - - - \ No newline at end of file diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/PoolBizService.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/PoolBizService.java index 9c6bcc2..8f095e0 100644 --- a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/PoolBizService.java +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/PoolBizService.java @@ -15,12 +15,15 @@ import cn.fw.shirasawa.domain.vo.SecretReportHistoryVO; import cn.fw.shirasawa.domain.vo.pool.CluePoolVO; import cn.fw.shirasawa.domain.vo.pool.FollowPoolListVO; import cn.fw.shirasawa.domain.vo.pool.FollowRecordPoolVO; -import cn.fw.shirasawa.rpc.erp.UserService; +import cn.fw.shirasawa.rpc.ehr.EhrRpcService; import cn.fw.shirasawa.rpc.erp.dto.UserInfoDTO; import cn.fw.shirasawa.rpc.member.MemberRpcService; import cn.fw.shirasawa.rpc.oop.OopService; import cn.fw.shirasawa.rpc.oop.dto.ShopDTO; -import cn.fw.shirasawa.service.data.*; +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.data.SecretReportHistoryService; import cn.hutool.core.date.BetweenFormater; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -46,11 +49,10 @@ public class PoolBizService { private final FollowTaskService followTaskService; private final CluePoolService cluePoolService; private final OopService oopService; - private final UserService userService; private final MemberRpcService memberRpcService; private final SecretReportHistoryService secretReportHistoryService; private final FollowRecordService followRecordService; - private final FollowRecordLogService followRecordLogService; + private final EhrRpcService ehrRpcService; /** @@ -170,7 +172,7 @@ public class PoolBizService { BeanUtils.copyProperties(poolDTO, vo); vo.setFollower(poolDTO.getFollowUserName()); if (StringUtils.isEmpty(poolDTO.getFollowUserName()) && Objects.nonNull(poolDTO.getUserId())) { - UserInfoDTO user = userService.user(poolDTO.getUserId()); + UserInfoDTO user = ehrRpcService.user(poolDTO.getUserId()); if (Objects.nonNull(user)) { vo.setFollower(user.getUserName()); } 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 5759ce8..e04cce3 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 @@ -194,7 +194,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy { for (CluePool cluePool : cluePoolList) { cluePool.setFinishShopId(taskCompleteDTO.getShopId()); cluePool.setFinishUserId(taskCompleteDTO.getUserId()); - UserInfoDTO user = userService.user(taskCompleteDTO.getUserId()); + UserInfoDTO user = ehrRpcService.user(taskCompleteDTO.getUserId()); if (Objects.nonNull(user)) { cluePool.setFinishUserName(user.getUserName()); } @@ -695,7 +695,7 @@ public abstract class AbstractFollowStrategy implements FollowStrategy { */ protected boolean dealRepeatClue(CluePool cluePool, FollowStrategy strategy) { //判断是否可以去重 - if (null == cluePool.getCoverFlag() || Boolean.FALSE.equals(cluePool.getCoverFlag())) { + if (!Boolean.TRUE.equals(cluePool.getCoverFlag())) { return false; } boolean isContainAF = false; diff --git a/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/SFFollowStrategy.java b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/SFFollowStrategy.java new file mode 100644 index 0000000..ef741b1 --- /dev/null +++ b/fw-shirasawa-service/src/main/java/cn/fw/shirasawa/service/bus/follow/strategy/impl/SFFollowStrategy.java @@ -0,0 +1,92 @@ +package cn.fw.shirasawa.service.bus.follow.strategy.impl; + +import cn.fw.shirasawa.domain.db.OriginalData; +import cn.fw.shirasawa.domain.db.follow.FollowRecord; +import cn.fw.shirasawa.domain.db.follow.FollowTask; +import cn.fw.shirasawa.domain.db.pool.CluePool; +import cn.fw.shirasawa.domain.enums.ClueStatusEnum; +import cn.fw.shirasawa.domain.enums.FollowTypeEnum; +import cn.fw.shirasawa.service.bus.follow.strategy.AbstractFollowStrategy; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import static cn.fw.common.businessvalidator.Validator.BV; + +/** + * 补贴跟进 + * + * @author : kurisu + * @version : 1.0 + * @className : SFFollowStrategy + * @description : 补贴跟进 + * @date : 2023-03-13 15:16 + */ +@Slf4j +@Component +@SuppressWarnings("Duplicates") +public class SFFollowStrategy extends AbstractFollowStrategy { + @Value("${follow.todo.SFCode}") + @Getter + private String SFCode; + + @Override + public FollowTypeEnum getFollowType() { + return FollowTypeEnum.SF; + } + + @Override + public String getTodoCode() { + return getSFCode(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean origin2task(OriginalData originalData) throws Exception { + List list = cluePoolService.list(Wrappers.lambdaQuery() + .eq(CluePool::getClueType, getFollowType()) + .eq(CluePool::getCustomerId, originalData.getCustomerId()) + .eq(CluePool::getRefererId, originalData.getDetailId()) + .eq(CluePool::getGroupId, originalData.getGroupId()) + .in(CluePool::getClueStatus, ClueStatusEnum.ONGOING, ClueStatusEnum.WAITING) + ); + if (!CollectionUtils.isEmpty(list)) { + return true; + } + CluePool cluePool = transformClue(originalData); + cluePool.setStartTime(originalData.getGenerateTime()); + LocalDateTime deadLine = Optional.ofNullable(originalData.getDeadline()).orElse(LocalDate.now().plusYears(10L).atStartOfDay()); + cluePool.setDeadline(deadLine.minusSeconds(1L)); + return cluePoolService.save(cluePool); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void startClue(CluePool cluePool) throws Exception { + dealRepeatClue(cluePool, this); + FollowTask task = this.createTask(cluePool); + boolean saveTask = followTaskService.save(task); + BV.isTrue(saveTask, () -> "生成跟进任务失败"); + FollowRecord record = createRecord(task); + record.setTodoCode(getTodoCode()); + record.setNote(cluePool.getNote()); + record.setContacts(cluePool.getContacts()); + if (Objects.nonNull(cluePool.getFirstDeadline())) { + record.setDeadline(cluePool.getFirstDeadline()); + } + followRecordService.save(record); + + cluePool.setClueStatus(ClueStatusEnum.ONGOING); + cluePoolService.updateById(cluePool); + } +} diff --git a/pom.xml b/pom.xml index 563bb3b..279740f 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ cn.fw fw-common-dependencies - 3.3.0 + 3.3.1 @@ -28,7 +28,7 @@ UTF-8 1.8 - 1.0.2 + 1.0.3 1.2.4.RELEASE @@ -222,6 +222,26 @@ lombok provided + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + + + org.jetbrains.kotlin + kotlin-reflect + ${kotlin.version} + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + com.fasterxml.jackson.module + jackson-module-kotlin + junit junit @@ -232,6 +252,10 @@ + org.jetbrains.kotlin + kotlin-maven-plugin + + org.apache.maven.plugins maven-compiler-plugin @@ -240,38 +264,30 @@ + org.apache.maven.plugins + maven-deploy-plugin + + true + + + org.codehaus.mojo versions-maven-plugin - - - feewee-maven-public - feewee maven public - http://nexus.feewee.cn/nexus/content/groups/public/ - - true - always - - - true - always - - - feewee-maven-releases Nexus Release Repository - http://nexus.feewee.cn/nexus/content/repositories/releases/ + https://nexus.feewee.cn/nexus/content/repositories/releases/ feewee-maven-snapshots Nexus Snapshot Repository - http://nexus.feewee.cn/nexus/content/repositories/snapshots/ + https://nexus.feewee.cn/nexus/content/repositories/snapshots/ true