新增修改标签日志

This commit is contained in:
zhangchenbiao
2023-08-15 14:56:17 +08:00
parent f96bfea853
commit 6e4dd2b45e
13 changed files with 337 additions and 17 deletions

View File

@@ -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}";
}

View File

@@ -47,7 +47,9 @@ 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", "移除标签")
;

View File

@@ -34,7 +34,7 @@ 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))
;

View File

@@ -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;
@@ -140,4 +146,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();
}
}

View File

@@ -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,33 @@ 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();
}

View File

@@ -165,4 +165,39 @@
<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>
</mapper>

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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());
}
}
}

View File

@@ -75,4 +75,16 @@ public interface FollowTaskService {
* @return
*/
Integer cancelFollowTask(FollowTaskIdRequest request, String userId);
/**
* 跟进任务前一小时提醒
* @return
*/
void followTaskAnHourAgoRemind();
/**
* 跟进任务每日10点提醒
* @return
*/
void followTaskRemind();
}

View File

@@ -8,6 +8,7 @@ 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.message.SendCardMessageDTO;
import com.cool.store.dto.partner.PartnerSimpleInfoDTO;
@@ -23,6 +24,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 +38,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 +60,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;
@@ -161,6 +162,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 +263,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();

View File

@@ -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;