|
|
@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
|
import com.baiye.constant.*;
|
|
|
|
import com.baiye.constant.*;
|
|
|
|
import com.baiye.enums.ClueStageEnum;
|
|
|
|
import com.baiye.enums.ClueStageEnum;
|
|
|
|
import com.baiye.exception.BadRequestException;
|
|
|
|
import com.baiye.exception.BadRequestException;
|
|
|
@ -18,9 +19,6 @@ import com.baiye.module.request.ReqOceanEngineApi;
|
|
|
|
import com.baiye.module.service.ClueService;
|
|
|
|
import com.baiye.module.service.ClueService;
|
|
|
|
import com.baiye.module.service.CompanyService;
|
|
|
|
import com.baiye.module.service.CompanyService;
|
|
|
|
import com.baiye.module.service.dto.ClueRecordCriteria;
|
|
|
|
import com.baiye.module.service.dto.ClueRecordCriteria;
|
|
|
|
import com.baiye.module.service.dto.ClueRecordDto;
|
|
|
|
|
|
|
|
import com.baiye.module.service.dto.ExcelClueDto;
|
|
|
|
|
|
|
|
import com.baiye.module.service.mapstruct.ClueRecordMapper;
|
|
|
|
|
|
|
|
import com.baiye.task.ClueBackupsTask;
|
|
|
|
import com.baiye.task.ClueBackupsTask;
|
|
|
|
import com.baiye.util.*;
|
|
|
|
import com.baiye.util.*;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
@ -29,14 +27,12 @@ import org.apache.commons.lang.StringUtils;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import org.springframework.data.domain.Page;
|
|
|
|
import org.springframework.data.domain.Page;
|
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
|
import org.springframework.data.domain.Sort;
|
|
|
|
|
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
@ -49,7 +45,6 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
|
|
|
|
|
|
|
|
private final ClueRepository clueRepository;
|
|
|
|
private final ClueRepository clueRepository;
|
|
|
|
private final ClueRecordRepository clueRecordRepository;
|
|
|
|
private final ClueRecordRepository clueRecordRepository;
|
|
|
|
private final ClueRecordMapper clueRecordMapper;
|
|
|
|
|
|
|
|
private final ClueMiddleRepository clueMiddleRepository;
|
|
|
|
private final ClueMiddleRepository clueMiddleRepository;
|
|
|
|
private final ClueTalkRepository clueTalkRepository;
|
|
|
|
private final ClueTalkRepository clueTalkRepository;
|
|
|
|
private final ClueJpa clueJpa;
|
|
|
|
private final ClueJpa clueJpa;
|
|
|
@ -268,7 +263,7 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Set<Long> memberIds = clueDtoList.stream().map(ClueDto::getMemberId).collect(Collectors.toSet());
|
|
|
|
Set<Long> memberIds = clueDtoList.stream().map(ClueDto::getMemberId).collect(Collectors.toSet());
|
|
|
|
Map<Long, String> userNickNameMap = userClient.findById(memberIds);
|
|
|
|
Map<Long, String> userNickNameMap = userClient.findById(memberIds);
|
|
|
|
// id查询(详情查询)时返回标签信息
|
|
|
|
// 资源ID查询(详情查询)时返回标签信息
|
|
|
|
if (clueQueryCriteria.getId() != null) {
|
|
|
|
if (clueQueryCriteria.getId() != null) {
|
|
|
|
for (ClueDto clueDto : clueDtoList) {
|
|
|
|
for (ClueDto clueDto : clueDtoList) {
|
|
|
|
//查询分配人的用户名称
|
|
|
|
//查询分配人的用户名称
|
|
|
@ -276,18 +271,9 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
if (memberId != null && userNickNameMap.containsKey(memberId)) {
|
|
|
|
if (memberId != null && userNickNameMap.containsKey(memberId)) {
|
|
|
|
clueDto.setDistributeUserName(userNickNameMap.get(memberId));
|
|
|
|
clueDto.setDistributeUserName(userNickNameMap.get(memberId));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ResponseEntity<Map<String, List<String>>> response = taskClient.findTaskLabel(clueDto.getTaskId(), clueDto.getOrganizeId(), clueQueryCriteria.getMemberId());
|
|
|
|
ResponseEntity<List<Object>> response = taskClient.findTaskLabel(clueQueryCriteria.getMemberId());
|
|
|
|
if (response.getStatusCode().value() != 200) {
|
|
|
|
if (response.getStatusCode().value() != 200) throw new BadRequestException("查询出错");
|
|
|
|
throw new BadRequestException("查询出错");
|
|
|
|
if (CollUtil.isNotEmpty(response.getBody())) clueDto.setLabel(response.getBody());
|
|
|
|
}
|
|
|
|
|
|
|
|
List<String> organizeLabel = Objects.requireNonNull(response.getBody()).get(KeyFieldConstants.TASK_ORGANIZE_LABEL);
|
|
|
|
|
|
|
|
List<String> baseLabel = Objects.requireNonNull(response.getBody()).get(KeyFieldConstants.TASK_BASE_LABEL);
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(organizeLabel)) {
|
|
|
|
|
|
|
|
clueDto.setOrganizeLabel(organizeLabel);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(baseLabel)) {
|
|
|
|
|
|
|
|
clueDto.setBaseLabel(baseLabel);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
AddWeChatFriendRecordDTO recordDTO = weChatAddFriendClient.findByClueId(clueDto.getId()).getBody();
|
|
|
|
AddWeChatFriendRecordDTO recordDTO = weChatAddFriendClient.findByClueId(clueDto.getId()).getBody();
|
|
|
|
clueDto.setAddWeChatStatus(DefaultNumberConstants.MINUS_ONE_NUMBER);
|
|
|
|
clueDto.setAddWeChatStatus(DefaultNumberConstants.MINUS_ONE_NUMBER);
|
|
|
|
if (recordDTO != null) {
|
|
|
|
if (recordDTO != null) {
|
|
|
@ -302,22 +288,13 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
throw new BadRequestException("查询业务员不能为空");
|
|
|
|
throw new BadRequestException("查询业务员不能为空");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
// @Override
|
|
|
|
public void exportRecordList(HttpServletResponse response, ClueRecordCriteria clueRecordCriteria) {
|
|
|
|
// public void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria) {
|
|
|
|
if (clueRecordCriteria.getCreateBy() != null) {
|
|
|
|
// if (clueQueryCriteria.getMemberId() != null) {
|
|
|
|
Sort sort = Sort.by(Sort.Direction.ASC, "createTime");
|
|
|
|
// List<ClueDto> clueDtoList = clueJpa.getClueList(clueQueryCriteria, null);
|
|
|
|
List<ClueRecordDto> clueRecordDtos = clueRecordMapper.toDto(clueRecordRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueRecordCriteria, criteriaBuilder), sort));
|
|
|
|
// ExportExcelUtil.downloadEasyExcel(response, ExcelClueDto.class, clueDtoList);
|
|
|
|
ExportExcelUtil.downloadEasyExcel(response, ClueRecordDto.class, clueRecordDtos, "export-Record");
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria) {
|
|
|
|
|
|
|
|
if (clueQueryCriteria.getMemberId() != null) {
|
|
|
|
|
|
|
|
List<ClueDto> clueDtoList = clueJpa.getClueList(clueQueryCriteria, null);
|
|
|
|
|
|
|
|
ExportExcelUtil.downloadEasyExcel(response, ExcelClueDto.class, clueDtoList, "export-clue");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@ -327,16 +304,6 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
executeTalkClue(clueMiddle);
|
|
|
|
executeTalkClue(clueMiddle);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//更新通话状态时不加锁
|
|
|
|
|
|
|
|
if (clueMiddle.getClueCallStatus() == null) {
|
|
|
|
|
|
|
|
//乐观锁,不用jpa查询(jpa有缓存这个坑)
|
|
|
|
|
|
|
|
if (clueMiddle.getOptimisticVersion() != null) {
|
|
|
|
|
|
|
|
Integer version = clueMiddleRepository.lookUpOptimisticVersion(clueMiddle.getClueId());
|
|
|
|
|
|
|
|
if (!version.equals(clueMiddle.getOptimisticVersion())) {
|
|
|
|
|
|
|
|
throw new BadRequestException("刷新后重试");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Clue clue = clueRepository.findById(clueMiddle.getClueId()).orElseGet(Clue::new);
|
|
|
|
Clue clue = clueRepository.findById(clueMiddle.getClueId()).orElseGet(Clue::new);
|
|
|
|
ClueMiddle clueMiddleOne = clueMiddleRepository.findById(clueMiddle.getClueId()).orElseGet(ClueMiddle::new);
|
|
|
|
ClueMiddle clueMiddleOne = clueMiddleRepository.findById(clueMiddle.getClueId()).orElseGet(ClueMiddle::new);
|
|
|
|
if (clueMiddle.getSourceLabel() != null) {
|
|
|
|
if (clueMiddle.getSourceLabel() != null) {
|
|
|
@ -494,7 +461,7 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (taskNum == null || taskNum == 0) {
|
|
|
|
if (taskNum == null || taskNum == 0) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
taskClient.sendErrMessage("导入资源合规条数0条,请检查文件重新导入", userId);
|
|
|
|
taskClient.sendErrMessage("导入资源合规条数0条,请检查文件重新导入", userId, SecurityConstants.FROM_IN);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
throw new BadRequestException("发送websocket失败");
|
|
|
|
throw new BadRequestException("发送websocket失败");
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -508,16 +475,13 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
task.setCreateBy(userId);
|
|
|
|
task.setCreateBy(userId);
|
|
|
|
task.setTaskName(taskName);
|
|
|
|
task.setTaskName(taskName);
|
|
|
|
task.setTotalNumber(taskNum);
|
|
|
|
task.setTotalNumber(taskNum);
|
|
|
|
|
|
|
|
task.setTaskType(DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
if (origin == DefaultNumberConstants.SIX_NUMBER) {
|
|
|
|
if (origin == DefaultNumberConstants.SIX_NUMBER) {
|
|
|
|
task.setTaskType(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
task.setTaskType(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
task.setIsForm(DefaultNumberConstants.FIVE_NUMBER);
|
|
|
|
task.setIsForm(DefaultNumberConstants.FIVE_NUMBER);
|
|
|
|
} else {
|
|
|
|
|
|
|
|
task.setTaskType(DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ResponseEntity<Object> response = taskClient.saveTask(task);
|
|
|
|
|
|
|
|
if (response.getStatusCode().value() != 200) {
|
|
|
|
|
|
|
|
throw new BadRequestException("创建任务失败");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ResponseEntity<Object> response = taskClient.saveTask(task, SecurityConstants.FROM_IN);
|
|
|
|
|
|
|
|
if (response.getStatusCode().value() != 200) throw new BadRequestException("创建任务失败");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -682,7 +646,6 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
public void insertDynamicTask(DynamicTaskDto dynamicTaskDto) {
|
|
|
|
public void insertDynamicTask(DynamicTaskDto dynamicTaskDto) {
|
|
|
|
|
|
|
|
|
|
|
|
Long taskId = dynamicTaskDto.getTaskId();
|
|
|
|
Long taskId = dynamicTaskDto.getTaskId();
|
|
|
|
String remark = dynamicTaskDto.getRemark();
|
|
|
|
String remark = dynamicTaskDto.getRemark();
|
|
|
|
boolean flag = false;
|
|
|
|
boolean flag = false;
|
|
|
@ -743,7 +706,7 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
task.setId(taskId);
|
|
|
|
task.setId(taskId);
|
|
|
|
task.setTotalNumber(taskNum);
|
|
|
|
task.setTotalNumber(taskNum);
|
|
|
|
task.setIsDistribution(1);
|
|
|
|
task.setIsDistribution(1);
|
|
|
|
taskClient.updateTask(task);
|
|
|
|
taskClient.updateTask(task, SecurityConstants.FROM_IN);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -835,7 +798,7 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
Task crmTask = new Task();
|
|
|
|
Task crmTask = new Task();
|
|
|
|
crmTask.setId(crmTaskId);
|
|
|
|
crmTask.setId(crmTaskId);
|
|
|
|
crmTask.setTotalNumber(crmTotalNumber + 1);
|
|
|
|
crmTask.setTotalNumber(crmTotalNumber + 1);
|
|
|
|
taskClient.updateTask(crmTask);
|
|
|
|
taskClient.updateTask(crmTask, SecurityConstants.FROM_IN);
|
|
|
|
|
|
|
|
|
|
|
|
//初始化线索
|
|
|
|
//初始化线索
|
|
|
|
ClueMiddle clueMiddle = new ClueMiddle();
|
|
|
|
ClueMiddle clueMiddle = new ClueMiddle();
|
|
|
@ -862,7 +825,7 @@ public class ClueServiceImpl implements ClueService {
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
clueIds = clueMiddleRepository.findByTaskIdAndMemberStatus(taskId, DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
clueIds = clueMiddleRepository.findByTaskIdAndMemberStatus(taskId, DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CommonResponse<DynamicTaskDistributionDTO> response = taskClient.findTaskDistribution(taskId);
|
|
|
|
CommonResponse<DynamicTaskDistributionDTO> response = taskClient.findTaskDistribution(taskId, SecurityConstants.FROM_IN);
|
|
|
|
|
|
|
|
|
|
|
|
if (response.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
if (response.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
DynamicTaskDistributionDTO dynamicTaskDistributionDTO = response.getData();
|
|
|
|
DynamicTaskDistributionDTO dynamicTaskDistributionDTO = response.getData();
|
|
|
|