Merge branch 'dev/feat/partner1.3_20230828' into hxd/feat/labelAndlLine
This commit is contained in:
@@ -29,9 +29,9 @@ public class CommonConstants {
|
||||
public static final int AN_HOUR_SECONDS = 3600;
|
||||
|
||||
/**
|
||||
* 企业开通锁存活时间
|
||||
* 跟进任务通知缓存时间 1小时
|
||||
*/
|
||||
public static final int ENTERPRISE_OPEN_LOCK_TIMES = 4 * 60 * 60 * 1000;
|
||||
public static final int FOLLOW_TASK_NOTICE_LOCK_TIMES = 60 * 60 * 1000;
|
||||
|
||||
public static final int ONE_DAY_SECONDS = 24 * 60 * 60;
|
||||
|
||||
@@ -103,6 +103,7 @@ public class CommonConstants {
|
||||
public static final int EIGHTY = 80;
|
||||
public static final int NINETY = 90;
|
||||
public static final int HUNDRED = 100;
|
||||
public static final int FIVE_HUNDRED = 100;
|
||||
public static final int ONE_THOUSAND = 1000;
|
||||
|
||||
|
||||
@@ -133,4 +134,6 @@ public class CommonConstants {
|
||||
|
||||
public static final String DAY_START_TIME_SUFFIX = " 00:00:00";
|
||||
|
||||
public static final String FOLLOW_TASK_NOTICE_KEY = "follow_task_notice:{0}:{1}";
|
||||
|
||||
}
|
||||
|
||||
@@ -47,7 +47,10 @@ public enum OperateLogFieldValueEnum {
|
||||
BEFORE_CLERK_INFO_UPDATE("beforeClerkUpdate", "修改前的意向书员工信息"),
|
||||
AFTER_CLERK_INFO_UPDATE("afterClerkUpdate", "修改后的意向书员工信息"),
|
||||
FOLLOW_LOG("followLog", "跟进日志"),
|
||||
FOLLOW_TASK_ID("followTaskId", "跟进任务id")
|
||||
FOLLOW_TASK_ID("followTaskId", "跟进任务id"),
|
||||
ADD_LABELS("addLabels", "新增标签"),
|
||||
REMOVE_LABELS("removeLabels", "移除标签"),
|
||||
CALL_TRANS_NO("transNo", "呼叫请求编号")
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@ -34,9 +34,12 @@ public enum OperateTypeEnum {
|
||||
USERINFO_UPDATE("userinfo_update", "修改(修改意向信息)", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_USERINFO_UPDATE, AFTER_USERINFO_UPDATE)),
|
||||
INTENT_INFO_SUBMIT("intent_info_submit", "提交意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, AFTER_BASE_INFO_UPDATE, AFTER_INTENT_INFO_UPDATE, AFTER_CLERK_INFO_UPDATE)),
|
||||
INTENT_INFO_UPDATE("intent_info_update", "修改意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_BASE_INFO_UPDATE, AFTER_BASE_INFO_UPDATE, BEFORE_INTENT_INFO_UPDATE, AFTER_INTENT_INFO_UPDATE, BEFORE_CLERK_INFO_UPDATE, AFTER_CLERK_INFO_UPDATE)),
|
||||
ADD_TAGS("add_tags", "修改意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)),
|
||||
ADD_TAGS("add_tags", "修改用户画像", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, ADD_LABELS, REMOVE_LABELS)),
|
||||
ADD_FOLLOW_LOG("add_follow_log", "新增根据日志", Arrays.asList(FOLLOW_LOG)),
|
||||
ADD_FOLLOW_TASK("add_follow_task", "新增跟进任务", Arrays.asList(FOLLOW_TASK_ID))
|
||||
ADD_FOLLOW_TASK("add_follow_task", "新增跟进任务", Arrays.asList(FOLLOW_TASK_ID)),
|
||||
|
||||
CALL_UP("call_up", "拨打电话", Arrays.asList(CALL_TRANS_NO)),
|
||||
|
||||
;
|
||||
|
||||
private String code;
|
||||
|
||||
@@ -1,15 +1,21 @@
|
||||
package com.cool.store.dao;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.dto.follow.FollowTaskNumDTO;
|
||||
import com.cool.store.entity.HyFollowTaskDO;
|
||||
import com.cool.store.enums.FollowTaskStatusEnum;
|
||||
import com.cool.store.mapper.HyFollowTaskMapper;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -37,6 +43,18 @@ public class HyFollowTaskDAO {
|
||||
return hyFollowTaskMapper.getFollowTask(followTaskId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量获取根据任务
|
||||
* @param followTaskIds
|
||||
* @return
|
||||
*/
|
||||
public List<HyFollowTaskDO> getFollowTaskList(List<Long> followTaskIds){
|
||||
if(Objects.isNull(followTaskIds)){
|
||||
return null;
|
||||
}
|
||||
return hyFollowTaskMapper.getFollowTaskList(followTaskIds);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增跟进任务
|
||||
@@ -140,4 +158,53 @@ public class HyFollowTaskDAO {
|
||||
hyFollowTaskMapper.cancelUndoFollowTask(partnerLineId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取消息通知的跟进人
|
||||
* @param date
|
||||
* @param pageNum
|
||||
* @param pageSize
|
||||
* @return
|
||||
*/
|
||||
public Page<String> getRemindFollowUserIds(Date date, Integer pageNum, Integer pageSize){
|
||||
String startTime = DateUtil.format(date, CoolDateUtils.DATE_FORMAT_DAY) + CommonConstants.DAY_START_TIME_SUFFIX;
|
||||
String endTime = DateUtil.format(date, CoolDateUtils.DATE_FORMAT_DAY) + CommonConstants.DAY_END_TIME_SUFFIX;
|
||||
PageHelper.startPage(pageNum, pageSize);
|
||||
return hyFollowTaskMapper.getRemindFollowUserIds(startTime, endTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户任务数量
|
||||
* @param followUserIds
|
||||
* @return
|
||||
*/
|
||||
public List<FollowTaskNumDTO> getUserTaskNum(List<String> followUserIds){
|
||||
if(CollectionUtils.isEmpty(followUserIds)){
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
return hyFollowTaskMapper.getUserTaskNum(followUserIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取待完成任务
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @param pageNum
|
||||
* @param pageSize
|
||||
* @return
|
||||
*/
|
||||
public Page<HyFollowTaskDO> getUndoTaskPage(String startTime, String endTime, Integer pageNum, Integer pageSize){
|
||||
PageHelper.startPage(pageNum, pageSize);
|
||||
return hyFollowTaskMapper.getUndoTaskPage(startTime, endTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新未完成任务的状态到已逾期
|
||||
* @return
|
||||
*/
|
||||
public Integer updateUndoTaskStatusToOverdue(){
|
||||
return hyFollowTaskMapper.updateUndoTaskStatusToOverdue();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -5,10 +5,14 @@ import com.cool.store.dto.log.LineLogInfo;
|
||||
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
|
||||
import com.cool.store.enums.OperateTypeEnum;
|
||||
import com.cool.store.mapper.HyPartnerTaskInfoLogMapper;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -53,4 +57,16 @@ public class HyPartnerTaskInfoLogDAO {
|
||||
return hyPartnerTaskInfoLogMapper.updateLineId(newPartnerId,newLineId, oldLineId);
|
||||
}
|
||||
|
||||
public Page<HyPartnerTaskInfoLogDO> getFollowTaskLogPage(Integer pageNum, Integer pageSize, Long partnerLineId){
|
||||
if(Objects.isNull(partnerLineId)){
|
||||
return new Page<>();
|
||||
}
|
||||
PageHelper.startPage(pageNum, pageSize);
|
||||
List<String> operateTypes = new ArrayList<>();
|
||||
operateTypes.add(OperateTypeEnum.ADD_FOLLOW_TASK.getCode());
|
||||
operateTypes.add(OperateTypeEnum.ADD_FOLLOW_LOG.getCode());
|
||||
operateTypes.add(OperateTypeEnum.ADD_TAGS.getCode());
|
||||
return hyPartnerTaskInfoLogMapper.getLogPageByLineId(partnerLineId, operateTypes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.cool.store.mapper;
|
||||
|
||||
import com.cool.store.dto.follow.FollowTaskNumDTO;
|
||||
import com.cool.store.entity.HyFollowTaskDO;
|
||||
import com.github.pagehelper.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -63,4 +64,40 @@ public interface HyFollowTaskMapper {
|
||||
* @return
|
||||
*/
|
||||
Integer cancelUndoFollowTask(@Param("partnerLineId") Long partnerLineId);
|
||||
|
||||
/**
|
||||
* 获取发送通知的跟进人
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return
|
||||
*/
|
||||
Page<String> getRemindFollowUserIds(@Param("startTime")String startTime, @Param("endTime")String endTime);
|
||||
|
||||
/**
|
||||
* 获取用户任务数量
|
||||
* @param followUserIds
|
||||
* @return
|
||||
*/
|
||||
List<FollowTaskNumDTO> getUserTaskNum(@Param("followUserIds") List<String> followUserIds);
|
||||
|
||||
/**
|
||||
* 获取待完成任务
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return
|
||||
*/
|
||||
Page<HyFollowTaskDO> getUndoTaskPage(@Param("startTime") String startTime, @Param("endTime") String endTime);
|
||||
|
||||
/**
|
||||
* 更新未完成任务的状态
|
||||
* @return
|
||||
*/
|
||||
Integer updateUndoTaskStatusToOverdue();
|
||||
|
||||
/**
|
||||
* 批量获取跟进任务
|
||||
* @param followTaskIds
|
||||
* @return
|
||||
*/
|
||||
List<HyFollowTaskDO> getFollowTaskList(@Param("followTaskIds") List<Long> followTaskIds);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.cool.store.mapper;
|
||||
|
||||
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
|
||||
import com.github.pagehelper.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
@@ -29,4 +30,13 @@ public interface HyPartnerTaskInfoLogMapper {
|
||||
|
||||
|
||||
int updateLineId(@Param("newPartnerId") String newPartnerId, @Param("newLineId") Long newLineId, @Param("oldLineId") Long oldLineId);
|
||||
|
||||
|
||||
/**
|
||||
* 跟进线索id以及操作类型分页获取日志
|
||||
* @param partnerLineId
|
||||
* @param operateTypes
|
||||
* @return
|
||||
*/
|
||||
Page<HyPartnerTaskInfoLogDO> getLogPageByLineId(@Param("partnerLineId")Long partnerLineId, @Param("operateTypes")List<String> operateTypes);
|
||||
}
|
||||
@@ -165,4 +165,48 @@
|
||||
<update id="cancelUndoFollowTask">
|
||||
update hy_follow_task set task_status = '3' where partner_line_id = #{partnerLineId} and task_status in ('0', '2')
|
||||
</update>
|
||||
|
||||
<select id="getRemindFollowUserIds" resultType="string">
|
||||
select
|
||||
follow_user_id
|
||||
from
|
||||
hy_follow_task
|
||||
where
|
||||
deleted = '0' and (task_status in ('2') or (task_status in ('0') and deadline >= #{startTime} and #{endTime} >= deadline))
|
||||
</select>
|
||||
|
||||
<select id="getUserTaskNum" resultType="com.cool.store.dto.follow.FollowTaskNumDTO">
|
||||
select
|
||||
follow_user_id,
|
||||
sum(if(task_status=2 or (task_status in ('0') and now() >= deadline, 1,0))) as overdueNum,
|
||||
sum(if(task_status=0, 1, 0)) as todoNum
|
||||
from
|
||||
hy_follow_task
|
||||
where
|
||||
follow_user_id in <foreach collection="followUserIds" item="followUserId" separator="," open="(" close=")">#{followUserId}</foreach>
|
||||
group by follow_user_id
|
||||
</select>
|
||||
|
||||
<select id="getUndoTaskPage" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List"/>
|
||||
from
|
||||
hy_follow_task
|
||||
where
|
||||
deleted = '0' and task_status in ('0') and deadline >= #{startTime} and #{endTime} >= deadline
|
||||
</select>
|
||||
|
||||
<update id="updateUndoTaskStatusToOverdue">
|
||||
<![CDATA[ update hy_follow_task set task_status = '2' where task_status = '0' and deadline < now() ]]]>
|
||||
</update>
|
||||
|
||||
<select id="getFollowTaskList" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List"/>
|
||||
from
|
||||
hy_follow_task
|
||||
where
|
||||
deleted = '0' and id in <foreach collection="followTaskIds" item="followTaskId" separator="," open="(" close=")">#{followTaskId}</foreach>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -18,7 +18,7 @@
|
||||
<result column="field_copy" jdbcType="LONGVARCHAR" property="fieldCopy"/>
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, partner_line_id, operate_user_id, operate_username, workflow_stage, workflow_status,
|
||||
id, partner_line_id, operate_user_id, operate_username, operate_type, workflow_stage, workflow_status,
|
||||
message, create_time, update_time, partner_id
|
||||
</sql>
|
||||
<sql id="Blob_Column_List">
|
||||
@@ -149,4 +149,15 @@
|
||||
where partner_line_id = #{oldLineId}
|
||||
</update>
|
||||
|
||||
<select id="getLogPageByLineId" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List"/>,
|
||||
<include refid="Blob_Column_List"/>
|
||||
from
|
||||
hy_partner_task_info_log
|
||||
where
|
||||
partner_line_id= #{partnerLineId} and operate_type in <foreach collection="operateTypes" open="(" close=")" separator="," item="operateType">#{operateType}</foreach>
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.cool.store.dto.follow;
|
||||
|
||||
import com.cool.store.constants.MessageConstants;
|
||||
import com.cool.store.utils.StringUtil;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
* @FileName: FollowTaskNumDTO
|
||||
* @Description:
|
||||
* @date 2023-08-14 16:01
|
||||
*/
|
||||
@Data
|
||||
public class FollowTaskNumDTO {
|
||||
|
||||
@ApiModelProperty("任务跟进人id")
|
||||
private String followUserId;
|
||||
|
||||
@ApiModelProperty("未完成数量")
|
||||
private Integer todoNum;
|
||||
|
||||
@ApiModelProperty("逾期数量")
|
||||
private Integer overdueNum;
|
||||
|
||||
public static String getMessageContent(FollowTaskNumDTO followTask){
|
||||
if(followTask.getTodoNum() > 0 && followTask.getOverdueNum() > 0){
|
||||
return MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT_1, followTask.getTodoNum(), followTask.getOverdueNum());
|
||||
}
|
||||
if(followTask.getTodoNum() == 0 && followTask.getOverdueNum() > 0){
|
||||
return MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT_2, followTask.getOverdueNum());
|
||||
}
|
||||
if(followTask.getTodoNum() > 0 && followTask.getOverdueNum() == 0){
|
||||
return MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT_3, followTask.getTodoNum());
|
||||
}
|
||||
return StringUtil.EMPTY;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -3,6 +3,8 @@ package com.cool.store.dto.log;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2023/7/4 10:05
|
||||
@@ -19,4 +21,8 @@ public class AddTagsDTO {
|
||||
private String operateUserId;
|
||||
|
||||
private String mobile;
|
||||
|
||||
private List<String> addLabels;
|
||||
|
||||
private List<String> removeLabels;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.cool.store.dto.log;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @Author: young.yu
|
||||
* @Date: 2023-08-16 11:41
|
||||
* @Description:
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
public class CallUpLogDTO extends LogBasicDTO{
|
||||
private String transNo;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.cool.store.dto.partner;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2023/8/14 17:08
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class UserPortraitDTO {
|
||||
|
||||
private Long userPortraitId;
|
||||
|
||||
private String userPortraitName;
|
||||
|
||||
public UserPortraitDTO(Long userPortraitId, String userPortraitName) {
|
||||
this.userPortraitId = userPortraitId;
|
||||
this.userPortraitName = userPortraitName;
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,8 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class HyFollowTaskDO implements Serializable {
|
||||
@ApiModelProperty("")
|
||||
|
||||
@ApiModelProperty("跟进任务id")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("hy_partner_line_info.id")
|
||||
|
||||
@@ -18,5 +18,5 @@ public class AddTagsRequest {
|
||||
@ApiModelProperty("加盟申请基本信息ID")
|
||||
private Long partnerBaseInfoId;
|
||||
@ApiModelProperty("标签列表")
|
||||
private List<Long> Tags;
|
||||
private List<Long> tags;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.cool.store.vo;
|
||||
|
||||
import com.cool.store.dto.partner.UserPortraitDTO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -49,7 +50,7 @@ public class PartnerLineInfoAndBaseInfoVO {
|
||||
private String investmentManagerPhone;
|
||||
|
||||
@ApiModelProperty("用户画像")
|
||||
private List<String> userPortrait;
|
||||
private List<UserPortraitDTO> userPortrait;
|
||||
|
||||
@ApiModelProperty("线索状态")
|
||||
private Integer lineStatus;
|
||||
|
||||
@@ -1,9 +1,24 @@
|
||||
package com.cool.store.vo.follow;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.dto.log.LogFieldDTO;
|
||||
import com.cool.store.entity.HyFollowTaskDO;
|
||||
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
|
||||
import com.cool.store.enums.OperateLogFieldValueEnum;
|
||||
import com.cool.store.enums.OperateTypeEnum;
|
||||
import com.cool.store.vo.log.LogFieldVO;
|
||||
import com.google.common.collect.Lists;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author zhangchenbiao
|
||||
@@ -33,6 +48,33 @@ public class FollowTaskLogVO {
|
||||
private String operateType;
|
||||
|
||||
@ApiModelProperty("操作内容")
|
||||
private String operateContent;
|
||||
private List<LogFieldVO> operateContent;
|
||||
|
||||
public static List<FollowTaskLogVO> convertVO(List<HyPartnerTaskInfoLogDO> list, List<HyFollowTaskDO> followTaskList){
|
||||
if(CollectionUtils.isEmpty(list)){
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
Map<Long, HyFollowTaskDO> taskMap = ListUtils.emptyIfNull(followTaskList).stream().collect(Collectors.toMap(k -> k.getId(), Function.identity(), (k1, k2) -> k1));
|
||||
List<FollowTaskLogVO> resultList = new ArrayList<>();
|
||||
for (HyPartnerTaskInfoLogDO log : list) {
|
||||
FollowTaskLogVO result = new FollowTaskLogVO();
|
||||
result.setFollowLogId(log.getId());
|
||||
result.setPartnerLineId(log.getPartnerLineId());
|
||||
result.setOperateTime(log.getCreateTime());
|
||||
result.setOperateUserId(log.getOperateUserId());
|
||||
result.setOperateUsername(log.getOperateUsername());
|
||||
result.setOperateType(log.getOperateType());
|
||||
List<LogFieldVO> logFieldList = JSONObject.parseArray(log.getFieldCopy(), LogFieldVO.class);
|
||||
if(OperateTypeEnum.ADD_FOLLOW_TASK.getCode().equals(log.getOperateType())){
|
||||
Long taskId = Long.valueOf(logFieldList.stream().filter(o -> OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode().equals(o.getCode())).map(LogFieldVO::getValue).findFirst().get().toString());
|
||||
HyFollowTaskDO hyFollowTask = taskMap.get(taskId);
|
||||
logFieldList.addAll(LogFieldVO.convertLogField(hyFollowTask));
|
||||
|
||||
}
|
||||
result.setOperateContent(logFieldList);
|
||||
resultList.add(result);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ import java.util.*;
|
||||
@Data
|
||||
public class FollowTaskPageVO {
|
||||
|
||||
@ApiModelProperty("任务id")
|
||||
private Long followTaskId;
|
||||
|
||||
@ApiModelProperty("线索id")
|
||||
private Long partnerLineId;
|
||||
|
||||
@@ -35,6 +38,9 @@ public class FollowTaskPageVO {
|
||||
@ApiModelProperty("跟进阶段")
|
||||
private String workflowStage;
|
||||
|
||||
@ApiModelProperty("线索用户id")
|
||||
private String partnerId;
|
||||
|
||||
@ApiModelProperty("线索用户名")
|
||||
private String partnerUsername;
|
||||
|
||||
@@ -51,12 +57,14 @@ public class FollowTaskPageVO {
|
||||
continue;
|
||||
}
|
||||
FollowTaskPageVO result = new FollowTaskPageVO();
|
||||
result.setFollowTaskId(task.getId());
|
||||
result.setPartnerLineId(task.getPartnerLineId());
|
||||
result.setTaskTitle(task.getTaskTitle());
|
||||
result.setCommunicationType(task.getCommunicationType());
|
||||
result.setDeadline(task.getDeadline());
|
||||
result.setTaskStatus(task.getTaskStatus());
|
||||
result.setWorkflowStage(partnerInfo.getWorkflowStage());
|
||||
result.setPartnerId(partnerInfo.getPartnerId());
|
||||
result.setPartnerUsername(partnerInfo.getUsername());
|
||||
result.setPartnerMobile(partnerInfo.getMobile());
|
||||
resultList.add(result);
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.cool.store.vo.log;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author: young.yu
|
||||
* @Date: 2023-06-28 15:32
|
||||
* @Description:
|
||||
*/
|
||||
@Data
|
||||
public class LogFieldVO {
|
||||
|
||||
@ApiModelProperty("字段名称")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty("字段定义")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("字段值")
|
||||
private Object value;
|
||||
|
||||
public static List<LogFieldVO> convertLogField(Object object){
|
||||
Field[] declaredFields = object.getClass().getDeclaredFields();
|
||||
List<LogFieldVO> resultList = new ArrayList<>();
|
||||
for (Field declaredField : declaredFields) {
|
||||
try {
|
||||
declaredField.setAccessible(true);
|
||||
LogFieldVO field = new LogFieldVO();
|
||||
ApiModelProperty annotation = declaredField.getAnnotation(ApiModelProperty.class);
|
||||
if(Objects.nonNull(annotation)){
|
||||
field.setName(annotation.value());
|
||||
}
|
||||
field.setCode(declaredField.getName());
|
||||
field.setValue(declaredField.get(object));
|
||||
resultList.add(field);
|
||||
} catch (IllegalAccessException e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.cool.store.job;
|
||||
|
||||
import com.cool.store.service.EnterpriseSyncService;
|
||||
import com.cool.store.service.FollowTaskService;
|
||||
import com.cool.store.service.HyPartnerInterviewPlanService;
|
||||
import com.xxl.job.core.context.XxlJobHelper;
|
||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||
@@ -26,6 +27,9 @@ public class JobHandler {
|
||||
@Autowired
|
||||
private HyPartnerInterviewPlanService hyPartnerInterviewPlanService;
|
||||
|
||||
@Resource
|
||||
private FollowTaskService followTaskService;
|
||||
|
||||
@XxlJob("syncOrganization")
|
||||
public void syncOrganization(){
|
||||
log.info("组织架构定时同步开始");
|
||||
@@ -76,4 +80,30 @@ public class JobHandler {
|
||||
}
|
||||
}
|
||||
|
||||
@XxlJob("followTaskAnHourAgoRemind")
|
||||
public void followTaskAnHourAgoRemind(){
|
||||
try {
|
||||
log.info("跟进任务前一小时提醒开始");
|
||||
followTaskService.followTaskAnHourAgoRemind();
|
||||
log.info("跟进任务前一小时提醒结束");
|
||||
XxlJobHelper.handleSuccess();
|
||||
}catch (Exception e){
|
||||
log.error("跟进任务前一小时提醒异常",e);
|
||||
XxlJobHelper.log("跟进任务前一小时提醒异常"+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@XxlJob("followTaskRemind")
|
||||
public void followTaskRemind(){
|
||||
try {
|
||||
log.info("跟进任务提醒开始");
|
||||
followTaskService.followTaskRemind();
|
||||
log.info("跟进任务提醒结束");
|
||||
XxlJobHelper.handleSuccess();
|
||||
}catch (Exception e){
|
||||
log.error("跟进任务提醒异常",e);
|
||||
XxlJobHelper.log("跟进任务提醒异常"+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.cool.store.request.CallUpReq;
|
||||
* @Description:
|
||||
*/
|
||||
public interface CallService {
|
||||
void callUp(CallUpReq request) throws ApiException;
|
||||
String callUp(CallUpReq request) throws ApiException;
|
||||
void callFinishBack(CallFinishBackReq request) throws ApiException;
|
||||
void callRecordBack(CallRecordBackReq request) throws ApiException;
|
||||
}
|
||||
|
||||
@@ -75,4 +75,16 @@ public interface FollowTaskService {
|
||||
* @return
|
||||
*/
|
||||
Integer cancelFollowTask(FollowTaskIdRequest request, String userId);
|
||||
|
||||
/**
|
||||
* 跟进任务前一小时提醒
|
||||
* @return
|
||||
*/
|
||||
void followTaskAnHourAgoRemind();
|
||||
|
||||
/**
|
||||
* 跟进任务每日10点提醒
|
||||
* @return
|
||||
*/
|
||||
void followTaskRemind();
|
||||
}
|
||||
|
||||
@@ -3,10 +3,17 @@ package com.cool.store.service.impl;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.UUID;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.cool.store.context.CurrentUserHolder;
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.dto.call.CallUpDTO;
|
||||
import com.cool.store.dto.log.CallUpLogDTO;
|
||||
import com.cool.store.dto.log.EntrustOthersDTO;
|
||||
import com.cool.store.entity.CallRecordDO;
|
||||
import com.cool.store.entity.EnterpriseUserDO;
|
||||
import com.cool.store.enums.CallStatusEnum;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.OperateTypeEnum;
|
||||
import com.cool.store.exception.ApiException;
|
||||
import com.cool.store.handler.WebSocketServer;
|
||||
import com.cool.store.mapper.CallRecordMapper;
|
||||
@@ -15,6 +22,8 @@ import com.cool.store.request.CallFinishBackReq;
|
||||
import com.cool.store.request.CallRecordBackReq;
|
||||
import com.cool.store.request.CallUpReq;
|
||||
import com.cool.store.service.CallService;
|
||||
import com.cool.store.service.LogService;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -36,14 +45,20 @@ public class CallServiceImpl implements CallService {
|
||||
|
||||
@Autowired
|
||||
private HyOutboundMobileMapper hyOutboundMobileMapper;
|
||||
|
||||
@Autowired
|
||||
private EnterpriseUserDAO enterpriseUserDAO;
|
||||
|
||||
@Autowired
|
||||
private LogService logService;
|
||||
@Override
|
||||
public void callUp(CallUpReq request) throws ApiException {
|
||||
public String callUp(CallUpReq request) throws ApiException {
|
||||
//校验拨出手机号APP是否在线
|
||||
boolean isOnline = WebSocketServer.isOnline(request.getOutgoingMobile());
|
||||
if (!isOnline) {
|
||||
throw new ApiException(ErrorCodeEnum.MOBILE_APP_NOT_ONLINE_ERROR);
|
||||
}
|
||||
try {
|
||||
//校验拨出手机号APP是否在线
|
||||
boolean isOnline = WebSocketServer.isOnline(request.getOutgoingMobile());
|
||||
if (!isOnline) {
|
||||
throw new ApiException(ErrorCodeEnum.MOBILE_APP_NOT_ONLINE_ERROR);
|
||||
}
|
||||
CallRecordDO callRecordDO = new CallRecordDO();
|
||||
callRecordDO.setOutgoingMobile(request.getOutgoingMobile());
|
||||
callRecordDO.setIncomingMobile(request.getIncomingMobile());
|
||||
@@ -70,6 +85,14 @@ public class CallServiceImpl implements CallService {
|
||||
|
||||
//保存通话记录
|
||||
callRecordMapper.insertSelective(callRecordDO);
|
||||
//记录日志
|
||||
LoginUserInfo operator = CurrentUserHolder.getUser();
|
||||
CallUpLogDTO log = CallUpLogDTO.builder().operateUserId(operator.getUserId()).operateUsername(operator.getName())
|
||||
.operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC))
|
||||
.transNo(transNo).build();
|
||||
logService.recordBizLog(operator,Long.valueOf(request.getLineId()), OperateTypeEnum.CALL_UP,log);
|
||||
|
||||
return transNo;
|
||||
} catch (Exception e) {
|
||||
log.error("callUp error, request:{}", JSON.toJSONString(request), e);
|
||||
throw new ApiException(ErrorCodeEnum.CALL_UP_ERROR);
|
||||
|
||||
@@ -8,11 +8,14 @@ import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.dao.HyFollowTaskDAO;
|
||||
import com.cool.store.dao.HyPartnerLineInfoDAO;
|
||||
import com.cool.store.dao.HyPartnerTaskInfoLogDAO;
|
||||
import com.cool.store.dto.follow.FollowTaskNumDTO;
|
||||
import com.cool.store.dto.log.LineLogInfo;
|
||||
import com.cool.store.dto.log.LogFieldDTO;
|
||||
import com.cool.store.dto.message.SendCardMessageDTO;
|
||||
import com.cool.store.dto.partner.PartnerSimpleInfoDTO;
|
||||
import com.cool.store.entity.HyFollowTaskDO;
|
||||
import com.cool.store.entity.HyPartnerLineInfoDO;
|
||||
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
|
||||
import com.cool.store.enums.*;
|
||||
import com.cool.store.exception.ApiException;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
@@ -23,6 +26,7 @@ import com.cool.store.request.follow.FollowTaskIdRequest;
|
||||
import com.cool.store.request.follow.UpdateFollowTaskRequest;
|
||||
import com.cool.store.service.FollowTaskService;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.vo.follow.FollowTaskLogVO;
|
||||
import com.cool.store.vo.follow.FollowTaskPageVO;
|
||||
import com.github.pagehelper.Page;
|
||||
@@ -36,10 +40,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -61,6 +62,8 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
||||
@Resource
|
||||
private EnterpriseUserDAO enterpriseUserDAO;
|
||||
@Resource
|
||||
private RedisUtilPool redisUtilPool;
|
||||
@Resource
|
||||
private ISVHttpRequest isvHttpRequest;
|
||||
@Value("${feishu.notice.link.url:null}")
|
||||
private String linkUrl;
|
||||
@@ -86,7 +89,24 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
||||
|
||||
@Override
|
||||
public PageInfo<FollowTaskLogVO> getFollowLogPage(Integer pageNum, Integer pageSize, Long partnerLineId) {
|
||||
return null;
|
||||
Page<HyPartnerTaskInfoLogDO> logPage = hyPartnerTaskInfoLogDAO.getFollowTaskLogPage(pageNum, pageSize, partnerLineId);
|
||||
List<FollowTaskLogVO> resultList = new ArrayList<>();
|
||||
if(CollectionUtils.isNotEmpty(logPage)){
|
||||
List<Long> taskIds = logPage.stream().filter(o->OperateTypeEnum.ADD_FOLLOW_TASK.getCode().equals(o.getOperateType())).map(o->{
|
||||
List<LogFieldDTO> logField = JSONObject.parseArray(o.getFieldCopy(), LogFieldDTO.class);
|
||||
String value = logField.stream().filter(f -> f.getCode().equals(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode())).findFirst().get().getValue();
|
||||
return Long.valueOf(value);
|
||||
}).collect(Collectors.toList());
|
||||
List<HyFollowTaskDO> followTaskList = hyFollowTaskDAO.getFollowTaskList(taskIds);
|
||||
List<String> callIds = logPage.stream().filter(o->OperateTypeEnum.ADD_FOLLOW_TASK.getCode().equals(o.getOperateType())).map(o->{
|
||||
List<LogFieldDTO> logField = JSONObject.parseArray(o.getFieldCopy(), LogFieldDTO.class);
|
||||
return logField.stream().filter(f -> f.getCode().equals(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode())).findFirst().get().getValue();
|
||||
}).collect(Collectors.toList());
|
||||
resultList = FollowTaskLogVO.convertVO(logPage, followTaskList);
|
||||
}
|
||||
PageInfo resultPage = new PageInfo(logPage);
|
||||
resultPage.setList(resultList);
|
||||
return resultPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -161,6 +181,85 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
||||
return hyFollowTaskDAO.cancelFollowTask(request.getFollowTaskId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void followTaskAnHourAgoRemind() {
|
||||
//获取一个小时后的任务
|
||||
Boolean hasNext = true;
|
||||
int pageNum = CommonConstants.ONE, pageSize = CommonConstants.HUNDRED;
|
||||
String startTime = DateUtil.format(DateUtils.addMinutes(new Date(), -CommonConstants.FIVE), CoolDateUtils.DATE_FORMAT_SEC);
|
||||
String endTime = DateUtil.format(DateUtils.addMinutes(new Date(), CommonConstants.FIVE), CoolDateUtils.DATE_FORMAT_SEC);
|
||||
while (hasNext){
|
||||
Page<HyFollowTaskDO> undoTaskList = hyFollowTaskDAO.getUndoTaskPage(startTime, endTime, pageNum, pageSize);
|
||||
if(CollectionUtils.isEmpty(undoTaskList)){
|
||||
break;
|
||||
}
|
||||
if(undoTaskList.size() < pageSize){
|
||||
hasNext = false;
|
||||
}
|
||||
pageNum++;
|
||||
List<Long> lineIds = undoTaskList.stream().map(HyFollowTaskDO::getPartnerLineId).distinct().collect(Collectors.toList());
|
||||
Map<Long, PartnerSimpleInfoDTO> partnerSimpleInfoMap = hyPartnerLineInfoDAO.getPartnerSimpleInfoByLineIds(lineIds);
|
||||
for (HyFollowTaskDO followTask : undoTaskList) {
|
||||
PartnerSimpleInfoDTO partnerInfo = partnerSimpleInfoMap.get(followTask.getPartnerLineId());
|
||||
if(Objects.isNull(partnerInfo)){
|
||||
continue;
|
||||
}
|
||||
String lockKey = MessageFormat.format(CommonConstants.FOLLOW_TASK_NOTICE_KEY, followTask.getFollowUserId(), followTask.getId());
|
||||
boolean result = redisUtilPool.setNxExpire(lockKey, DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC), CommonConstants.FOLLOW_TASK_NOTICE_LOCK_TIMES);
|
||||
if(!result){
|
||||
//一小时内发送过不再发送通知
|
||||
continue;
|
||||
}
|
||||
SendCardMessageDTO sendCardMessage = new SendCardMessageDTO();
|
||||
sendCardMessage.setMessageUrl(linkUrl);
|
||||
sendCardMessage.setMessageType(MessageTypeEnum.SCHEDULE_REMINDER);
|
||||
String dateline = DateUtil.format(followTask.getDeadline(), CoolDateUtils.DATE_FORMAT_SEC_2);
|
||||
String content = MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT, dateline, partnerInfo.getUsername(), partnerInfo.getMobile());
|
||||
sendCardMessage.setContent(content);
|
||||
sendCardMessage.setTitle(MessageConstants.FOLLOW_TASK_MESSAGE_TITLE);
|
||||
sendCardMessage.setUserIds(Arrays.asList(followTask.getFollowUserId()));
|
||||
try {
|
||||
isvHttpRequest.sendFeiShuCardMessage(sendCardMessage);
|
||||
} catch (ApiException e) {
|
||||
log.error("跟进任务发送通知失败, {}", JSONObject.toJSONString(followTask));
|
||||
}
|
||||
}
|
||||
}
|
||||
//更新过期的任务状态
|
||||
hyFollowTaskDAO.updateUndoTaskStatusToOverdue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void followTaskRemind() {
|
||||
//获取已逾期的 以及截止时间为当天的任务 的招商经理
|
||||
Boolean hasNext = true;
|
||||
int pageNum = CommonConstants.ONE, pageSize = CommonConstants.HUNDRED;
|
||||
while (hasNext){
|
||||
Page<String> remindFollowUserIds = hyFollowTaskDAO.getRemindFollowUserIds(new Date(), pageNum, pageSize);
|
||||
if(CollectionUtils.isEmpty(remindFollowUserIds)){
|
||||
break;
|
||||
}
|
||||
if(remindFollowUserIds.size() < pageSize){
|
||||
hasNext = false;
|
||||
}
|
||||
pageNum++;
|
||||
List<FollowTaskNumDTO> followTaskList = hyFollowTaskDAO.getUserTaskNum(remindFollowUserIds);
|
||||
for (FollowTaskNumDTO followTask : followTaskList) {
|
||||
SendCardMessageDTO sendCardMessage = new SendCardMessageDTO();
|
||||
sendCardMessage.setMessageUrl(linkUrl);
|
||||
sendCardMessage.setMessageType(MessageTypeEnum.SCHEDULE_REMINDER);
|
||||
sendCardMessage.setContent(FollowTaskNumDTO.getMessageContent(followTask));
|
||||
sendCardMessage.setTitle(MessageConstants.FOLLOW_TASK_MESSAGE_TITLE);
|
||||
sendCardMessage.setUserIds(Arrays.asList(followTask.getFollowUserId()));
|
||||
try {
|
||||
isvHttpRequest.sendFeiShuCardMessage(sendCardMessage);
|
||||
} catch (ApiException e) {
|
||||
log.error("跟进任务发送通知失败, {}", JSONObject.toJSONString(followTask));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 线索校验
|
||||
* @param partnerLineId
|
||||
@@ -183,6 +282,12 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
||||
if(Objects.isNull(partnerInfo)){
|
||||
return;
|
||||
}
|
||||
String lockKey = MessageFormat.format(CommonConstants.FOLLOW_TASK_NOTICE_KEY, task.getFollowUserId(), task.getId());
|
||||
boolean result = redisUtilPool.setNxExpire(lockKey, DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC), CommonConstants.FOLLOW_TASK_NOTICE_LOCK_TIMES);
|
||||
if(!result){
|
||||
//一小时内发送过不再发送通知
|
||||
return;
|
||||
}
|
||||
String dateline = DateUtil.format(task.getDeadline(), CoolDateUtils.DATE_FORMAT_SEC_2);
|
||||
String content = MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT, dateline, partnerInfo.getUsername(), partnerInfo.getMobile());
|
||||
SendCardMessageDTO sendCardMessage = new SendCardMessageDTO();
|
||||
|
||||
@@ -5,12 +5,10 @@ import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.context.CurrentUserHolder;
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.context.PartnerUserHolder;
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.dto.log.AddTagsDTO;
|
||||
import com.cool.store.dto.log.BlackListLogDTO;
|
||||
import com.cool.store.dto.log.LineLogInfo;
|
||||
import com.cool.store.dto.log.WantInfoUpdateDTO;
|
||||
import com.cool.store.entity.*;
|
||||
@@ -19,10 +17,7 @@ import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.HyPartnerCertificationInfoMapper;
|
||||
import com.cool.store.request.AddTagsRequest;
|
||||
import com.cool.store.request.PartnerBaseInfoRequest;
|
||||
import com.cool.store.service.HyPartnerBaseInfoService;
|
||||
import com.cool.store.service.HyPartnerLineInfoService;
|
||||
import com.cool.store.service.HyPhoneLocationService;
|
||||
import com.cool.store.service.LogService;
|
||||
import com.cool.store.service.*;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.vo.PartnerBaseInfoVO;
|
||||
@@ -35,8 +30,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -84,6 +78,8 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
|
||||
|
||||
@Autowired
|
||||
private LogService logService;
|
||||
@Resource
|
||||
private LabelService labelService;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -92,18 +88,33 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
|
||||
if (hyPartnerBaseInfo==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PARTNER_BASE_INFO_NOT_EXIST);
|
||||
}
|
||||
String oldUserPortrait = hyPartnerBaseInfo.getUserPortrait();
|
||||
hyPartnerBaseInfo.setId(addTagsRequest.getPartnerBaseInfoId());
|
||||
hyPartnerBaseInfo.setUserPortrait(CollectionUtils.isNotEmpty(addTagsRequest.getTags())?
|
||||
addTagsRequest.getTags().stream().map(Object::toString).collect(Collectors.joining(CommonConstants.COMMA, CommonConstants.COMMA, CommonConstants.COMMA)):"");
|
||||
hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(hyPartnerBaseInfo);
|
||||
HyPartnerLineInfoDO line = hyPartnerLineInfoDAO.getByPartnerId(hyPartnerBaseInfo.getPartnerId());
|
||||
//添加日志
|
||||
String newUserPortrait = hyPartnerBaseInfo.getUserPortrait();
|
||||
List<String> oldLabels = new ArrayList<>(), newLabels = new ArrayList<>();
|
||||
if (StringUtils.isNotEmpty(oldUserPortrait)){
|
||||
Map<Long, String> userPortraitMap = labelService.getUserPortraitMap(Arrays.asList(oldUserPortrait));
|
||||
oldLabels = userPortraitMap.values().stream().collect(Collectors.toList());
|
||||
}
|
||||
if (StringUtils.isNotEmpty(newUserPortrait)){
|
||||
Map<Long, String> userPortraitMap = labelService.getUserPortraitMap(Arrays.asList(newUserPortrait));
|
||||
newLabels = userPortraitMap.values().stream().collect(Collectors.toList());
|
||||
}
|
||||
List<String> addLabels = new ArrayList<>(newLabels);
|
||||
List<String> removeLabels = new ArrayList<>(oldLabels);
|
||||
addLabels.removeAll(oldLabels);
|
||||
removeLabels.removeAll(newLabels);
|
||||
LineLogInfo lineLogInfo = new LineLogInfo(line.getPartnerId(), line.getId(), user.getUserId(),
|
||||
user.getName(), OperateTypeEnum.ADD_TAGS,
|
||||
WorkflowStageEnum.getWorkflowStageByCode(line.getWorkflowStage()),
|
||||
line.getWorkflowStatus(), "");
|
||||
AddTagsDTO logDTO = AddTagsDTO.builder().operateUserId(user.getUserId()).operateUsername(user.getName())
|
||||
.mobile(user.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).build();
|
||||
.mobile(user.getMobile()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC_2)).addLabels(addLabels).removeLabels(removeLabels).build();
|
||||
lineLogInfo.setData(logDTO);
|
||||
hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo);
|
||||
return Boolean.TRUE;
|
||||
|
||||
@@ -89,6 +89,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
|
||||
@Autowired
|
||||
private SmsService smsService;
|
||||
@Resource
|
||||
HyFollowTaskDAO hyFollowTaskDAO;
|
||||
|
||||
@Override
|
||||
public StageCountVO selectStagePendingCount(String userId) {
|
||||
@@ -113,9 +115,11 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
String userPortrait = partnerLineInfoAndBaseInfoDTO.getUserPortrait();
|
||||
if (StringUtils.isNotEmpty(userPortrait)){
|
||||
Map<Long, String> userPortraitMap = labelService.getUserPortraitMap(Arrays.asList(userPortrait));
|
||||
List<String> userPortraitList = userPortraitMap.values().stream()
|
||||
|
||||
List<UserPortraitDTO> userPortraitDTOS = userPortraitMap.entrySet().stream()
|
||||
.map(entry -> new UserPortraitDTO(entry.getKey(), entry.getValue()))
|
||||
.collect(Collectors.toList());
|
||||
partnerLineInfoAndBaseInfoVO.setUserPortrait(userPortraitList);
|
||||
partnerLineInfoAndBaseInfoVO.setUserPortrait(userPortraitDTOS);
|
||||
}
|
||||
|
||||
List<String> userIds = new ArrayList<>();
|
||||
@@ -185,6 +189,9 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(request.getLineId());
|
||||
noticeService.sendFeiShuNotice(FeiShuNoticeMsgEnum.TRANS_INVESTMENT_MANAGER,Arrays.asList(request.getUserId()),DateUtil.formatDateTime(new Date()),hyPartnerBaseInfoDO.getUsername(),hyPartnerBaseInfoDO.getMobile());
|
||||
|
||||
//作废待完成&已逾期的任务
|
||||
hyFollowTaskDAO.cancelUndoFollowTask(request.getLineId());
|
||||
|
||||
//添加日志
|
||||
LineLogInfo lineLogInfo = new LineLogInfo(hyPartnerLineInfoDO.getPartnerId(), hyPartnerLineInfoDO.getId(), user.getUserId(),
|
||||
user.getName(), OperateTypeEnum.TRANSFER_INVESTMENT_MANAGER,
|
||||
@@ -313,6 +320,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
hyPartnerLineInfoDO.setCloseUserId(user.getUserId());
|
||||
hyPartnerLineInfoDAO.updateByPrimaryKeySelective(hyPartnerLineInfoDO);
|
||||
|
||||
hyFollowTaskDAO.cancelUndoFollowTask(lineId);
|
||||
|
||||
//公海线索不需要处理子流程线索
|
||||
if (!LineStatusEnum.PUBLIC_SEAS.getCode().equals(lineStatus)){
|
||||
CloseFollowRequest closeFollowRequest = new CloseFollowRequest();
|
||||
@@ -431,6 +440,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
hyPartnerLineInfoDO.setLineStatus(LineStatusEnum.PUBLIC_SEAS.getCode());
|
||||
hyPartnerLineInfoDO.setCloseTime(new Date());
|
||||
hyPartnerLineInfoDO.setCloseUserId(user.getUserId());
|
||||
//作废待完成&已逾期的任务
|
||||
hyFollowTaskDAO.cancelUndoFollowTask(closeFollowRequest.getLineId());
|
||||
//各阶段单独的逻辑
|
||||
workFlowService.endProcess(WorkflowStageEnum.getWorkflowStageByCode(hyPartnerLineInfoDO.getWorkflowStage()),closeFollowRequest);
|
||||
}
|
||||
@@ -447,6 +458,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
|
||||
hyPartnerLineInfoDO.setRejectRealReason(closeFollowRequest.getRejectRealReason());
|
||||
hyPartnerLineInfoDO.setLineStatus(LineStatusEnum.PUBLIC_SEAS.getCode());
|
||||
hyPartnerLineInfoDO.setCloseTime(new Date());
|
||||
//作废待完成&已逾期的任务
|
||||
hyFollowTaskDAO.cancelUndoFollowTask(closeFollowRequest.getLineId());
|
||||
}
|
||||
hyPartnerLineInfoDAO.updateByPrimaryKeySelective(hyPartnerLineInfoDO);
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ public class CallController {
|
||||
@PostMapping("/callUp")
|
||||
@ApiOperation("呼出电话")
|
||||
public ResponseResult callUp(@RequestBody CallUpReq request) throws ApiException {
|
||||
callService.callUp(request);
|
||||
return ResponseResult.success();
|
||||
String res = callService.callUp(request);
|
||||
return ResponseResult.success(res);
|
||||
}
|
||||
|
||||
@PostMapping("/finish/callback")
|
||||
|
||||
Reference in New Issue
Block a user