修改删除用户逻辑和开放接口授权

master
yqy 2 years ago
parent 9e88626e06
commit afd297adeb

@ -1,5 +1,6 @@
package com.baiye.modules.platform.rest;
import com.baiye.annotation.Inner;
import com.baiye.http.CommonResponse;
import com.baiye.http.ResponseCode;
import com.baiye.model.dto.ClueDto;
@ -145,6 +146,12 @@ public class OrganizeController {
return new ResponseEntity<>(organizeService.selectMemberList(organizeQueryCriteria), HttpStatus.OK);
}
@ApiOperation("根据删除用户,查询可用角色的用户")
@GetMapping("/findDelUser")
public ResponseEntity<Object> findDelUser(@RequestParam("userId") Long userId) {
return new ResponseEntity<>(organizeService.findDelUser(userId), HttpStatus.OK);
}
@ApiOperation("查询所有的组和组线索数量")
@GetMapping("/selectAll")
public ResponseEntity<Object> selectAllOrganize() {

@ -61,14 +61,12 @@ public class TaskController {
@ApiOperation("查询任务列表")
@GetMapping("/list")
@Inner(value = false)
public ResponseEntity<Object> list(TaskQueryCriteria taskQueryCriteria) {
return new ResponseEntity<>(taskService.list(taskQueryCriteria), HttpStatus.OK);
}
@ApiOperation("查询任务详情")
@GetMapping("/queryDetails")
@Inner
public ResponseEntity<Task> queryDetails(@RequestParam("taskId") Long taskId) {
return new ResponseEntity<>(taskService.queryDetails(taskId), HttpStatus.OK);
}
@ -85,7 +83,7 @@ public class TaskController {
return new ResponseEntity<>(taskService.findTaskLabel(userId), HttpStatus.OK);
}
@Inner
@Inner(value = false)
@ApiOperation("修改任务信息")
@PostMapping("/update")
public CommonResponse<Object> updateTask(@RequestBody Task task) {
@ -100,14 +98,7 @@ public class TaskController {
return CommonResponse.createBySuccess();
}
@ApiOperation("删除动态任务")
@GetMapping("/delDynamic")
public CommonResponse<Object> delDynamicTask(@RequestParam("taskId") Long taskId) {
taskService.delTask(taskId);
return CommonResponse.createBySuccess();
}
@Inner
@Inner(value = false)
@ApiOperation("websocket发送错误信息")
@GetMapping("/sendErrMessage")
public void sendErrMessage(String errorMessage, Long userId) {
@ -128,7 +119,7 @@ public class TaskController {
return CommonResponse.createBySuccessMessage("操作成功");
}
@Inner
@Inner(value = false)
@ApiOperation("查询动态任务(自动)分配比率")
@GetMapping("/findTaskDistribution")
public CommonResponse<DynamicTaskDistributionDTO> findTaskDistribution(@RequestParam("taskId") Long taskId) {

@ -96,6 +96,11 @@ public interface OrganizeService {
*/
List<UserDto> selectMemberList(OrganizeQueryCriteria organizeQueryCriteria);
/**
* ,
*/
Object findDelUser(Long userId);
/**
*
*/

@ -70,11 +70,6 @@ public interface TaskService {
*/
void delTask(Long taskId);
/**
*
*/
// void delDynamicTask(Long taskId);
/**
*
*/

@ -18,6 +18,7 @@ import com.baiye.modules.platform.service.mapstruct.OrganizeMapper;
import com.baiye.modules.platform.service.mapstruct.OrganizeUserMapper;
import com.baiye.modules.platform.service.mapstruct.TaskOrganizeMapper;
import com.baiye.modules.system.domain.User;
import com.baiye.modules.system.dto.UserQueryCriteria;
import com.baiye.modules.system.repository.UserRepository;
import com.baiye.modules.system.service.RoleService;
import com.baiye.modules.system.service.UserService;
@ -39,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
@RequiredArgsConstructor
@ -549,10 +551,11 @@ public class OrganizeServiceImpl implements OrganizeService {
// 判断角色,管理员只查组长角色的用户
if (roleId.equals(RoleNumberConstants.MINUS_EIGHT_NUMBER) || roleId.equals(RoleNumberConstants.MINUS_TEN_NUMBER)) {
roles.add(RoleNumberConstants.MINUS_NINE_NUMBER);
roles.add(RoleNumberConstants.MINUS_TEN_NUMBER);
} else {
roles.add(RoleNumberConstants.MINUS_FIVE_NUMBER);
}
//查询角色下所有用户
//查询本公司-角色下所有用户
List<UserDto> userDtoList = userService.findByManager(roles);
//查询所有组员
List<OrganizeUser> organizeUserAll = organizeUserRepository.findAll();
@ -567,6 +570,40 @@ public class OrganizeServiceImpl implements OrganizeService {
return userDtos;
}
@Override
public Object findDelUser(Long userId) {
UserDto userInfo = userService.findUserInfo(userId);
List<Long> delRoleIdList = userInfo.getRoles().stream().map(RoleSmallDto::getId).collect(Collectors.toList());
UserQueryCriteria userQueryCriteria = new UserQueryCriteria();
userQueryCriteria.setCompanyId(userInfo.getCompanyId());
List<UserDto> userDtoList = userService.queryAll(userQueryCriteria);
//筛选本公司下相同角色的用户
List<UserDto> list = new ArrayList<>();
for (UserDto userDto : userDtoList) {
Set<RoleSmallDto> roles = userDto.getRoles();
for (RoleSmallDto role : roles) {
if (delRoleIdList.contains(role.getId())) {
list.add(userDto);
break;
}
}
}
//查询所有组员,去重后返回(去重删除人不同组的,还有删除者本人)
List<OrganizeUser> organizeUserAll = organizeUserRepository.findAll();
OrganizeUser organizeUser = organizeUserAll.stream().filter(org -> org.getUserId().equals(userId)).findAny().orElseGet(OrganizeUser::new);
Set<Long> delUserIdList = organizeUserAll.stream()
.filter(org -> !org.getOrganizeId().equals(organizeUser.getOrganizeId()))
.map(OrganizeUser::getUserId).collect(Collectors.toSet());
delUserIdList.add(userId);
//如果删除小组用户是呼叫员,也可以查询出组长,把资源转给组长
Set<UserDto> returnUserDto = list.stream().filter(users -> !delUserIdList.contains(users.getId())).collect(Collectors.toSet());
if (delRoleIdList.contains(RoleNumberConstants.MINUS_FIVE_NUMBER)) {
UserDto userDto = userDtoList.stream().filter(user -> user.getId().equals(organizeUser.getCreateBy())).findAny().orElseGet(UserDto::new);
returnUserDto.add(userDto);
}
return returnUserDto;
}
@Override
public List<Organize> selectAllOrganize() {
return organizeRepository.findAll();

@ -73,7 +73,6 @@ public class TaskServiceImpl implements TaskService {
public void saveTask(Task task) {
if (task.getId() == null) task.setId(IdUtil.getSnowflake(workerId, datacenterId).nextId());
if (CollUtil.isNotEmpty(task.getOrganizeList())) task.setOrganizeList(task.getOrganizeList());
task.setCreateBy(SecurityUtils.getCurrentUserId());
task.setIsDistribution(DefaultNumberConstants.ZERO_NUMBER);
taskRepository.save(task);
}
@ -391,22 +390,6 @@ public class TaskServiceImpl implements TaskService {
}
}
// @Override
// @Transactional(rollbackOn = Exception.class)
// public void delTask(Long taskId) {
// List<TaskOrganize> taskOrganizeList = taskOrganizeRepository.findByTaskId(taskId);
// if (CollUtil.isNotEmpty(taskOrganizeList)) {
// throw new BadRequestException("任务已分配,无法删除");
// }
// taskRepository.deleteById(taskId);
// Set<Long> taskIdList = new HashSet<>();
// taskIdList.add(taskId);
// sourceClueClient.delClueAll(taskIdList);
// }
/**
* TODO
*/
@Override
@Transactional(rollbackOn = Exception.class)
public void delTask(Long taskId) {
@ -434,16 +417,6 @@ public class TaskServiceImpl implements TaskService {
webSocketServer.sendMessage(message, userId);
}
// @Override
// public void delDynamicTask(Long taskId) {
// Task task = taskRepository.findById(taskId).orElseGet(Task::new);
// if (task.getTotalNumber() == null || task.getTotalNumber() == 0) {
// taskRepository.deleteById(taskId);
// } else {
// throw new BadRequestException("任务已导入资源,无法删除");
// }
// }
@Override
public void updateTaskEncryption(Long taskId) {
Task task = taskRepository.findById(taskId).orElseGet(Task::new);

@ -56,6 +56,7 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@ -213,7 +214,6 @@ public class UserServiceImpl implements UserService {
companyDto.setCompanyType(userDTO.getCompanyType());
companyDto.setStatus(DefaultNumberConstants.ZERO_NUMBER);
companyId = companyService.createCompany(companyDto).getId();
}
companyId = companyId != null ? companyId :
SecurityUtils.getCompanyId();
@ -236,8 +236,6 @@ public class UserServiceImpl implements UserService {
//todo 如果是管理员 则创建任务
if (flag) {
//todo 新建标签组
Long labelOrganizeId = labelOrganizeService.saveDefault(userCreateResult.getId());
if (userDTO.getCompanyType() != null && userDTO.getCompanyType() == 1) {
//抖音(飞鱼)
createTask(userCreateResult.getId(), "抖音任务", DefaultNumberConstants.THREE_NUMBER);
@ -555,6 +553,9 @@ public class UserServiceImpl implements UserService {
Boolean isDel = delUserDTO.getIsDel();
UserDto user = findById(userId);
Set<Long> roleIds = user.getRoles().stream().map(RoleSmallDto::getId).collect(Collectors.toSet());
Set<Long> replaceRoleIds = new HashSet<>();
if (replaceUserId != null)
replaceRoleIds = findById(replaceUserId).getRoles().stream().map(RoleSmallDto::getId).collect(Collectors.toSet());
// 一: 删除业务管理员账号(删除公司)
if (roleIds.contains(RoleNumberConstants.MINUS_EIGHT_NUMBER) || roleIds.contains(RoleNumberConstants.MINUS_TEN_NUMBER)) {
UserQueryCriteria userQueryCriteria = new UserQueryCriteria();
@ -563,9 +564,7 @@ public class UserServiceImpl implements UserService {
Set<Long> userIds = userDtos.stream().map(UserDto::getId).collect(Collectors.toSet());
Set<Long> taskIds = taskRepository.findByCreateBy(userId).stream().map(Task::getId).collect(Collectors.toSet());
//1、清理缓存 删除用户
for (UserDto userDto : userDtos) {
delCaches(userDto.getId(), userDto.getUsername());
}
for (UserDto userDto : userDtos) this.delCaches(userDto.getId(), userDto.getUsername());
userRepository.deleteAllByIdIn(userIds);
//2、删除公司信息
companyService.deleteCompanyByCompanyId(user.getCompanyId());
@ -585,27 +584,28 @@ public class UserServiceImpl implements UserService {
taskUserDistributionRepository.deleteAllByUserIdIn(userIds);
//10、删除资源相关数据
ResponseEntity<Object> response = sourceClueClient.delClueAll(taskIds);
if (response.getStatusCode().value() != 200) {
if (response.getStatusCode().value() != DefaultNumberConstants.TWO_HUNDRED)
throw new BadRequestException("删除失败");
}
//TODO 删除逻辑待补充?
return;
} else if (roleIds.contains(RoleNumberConstants.MINUS_NINE_NUMBER)) {
// 二: 删除组长
// 二: 删除或者替换组长
if (replaceUserId == null) throw new BadRequestException("请选择替换组长");
if (CollUtil.isNotEmpty(replaceRoleIds) && !roleIds.contains(RoleNumberConstants.MINUS_NINE_NUMBER))
throw new BadRequestException("请选择组长角色的用户");
organizeUserRepository.updateUser(userId, replaceUserId);
organizeUserRepository.updateCreateBy(replaceUserId, userId);
this.sourceDel(isDel, userId, replaceUserId);
} else if (roleIds.contains(RoleNumberConstants.MINUS_FIVE_NUMBER)) {
// 三: 删除业务员
if (isDel) {
organizeUserRepository.deleteByUserId(userId);
this.sourceDel(true, userId, replaceUserId);
} else {
// 三: 删除或者替换业务员
if (isDel) organizeUserRepository.deleteByUserId(userId);
else {
if (replaceUserId == null) throw new BadRequestException("请选择替换人员");
if (CollUtil.isNotEmpty(replaceRoleIds) && !roleIds.contains(RoleNumberConstants.MINUS_FIVE_NUMBER))
throw new BadRequestException("请选择业务管理员角色的用户");
organizeUserRepository.updateUser(userId, replaceUserId);
this.sourceDel(false, userId, replaceUserId);
}
this.sourceDel(isDel, userId, replaceUserId);
}
// 清理缓存
delCaches(userId, user.getUsername());

@ -1,14 +1,12 @@
package com.baiye.modules.telemarkting.entity;
import com.baiye.model.entity.BaseAllCallInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author wujingtao
@ -20,7 +18,7 @@ import java.util.Date;
@Entity
@Table(name = "tb_call_info")
@EntityListeners(AuditingEntityListener.class)
public class AllCallInfo implements Serializable {
public class AllCallInfo extends BaseAllCallInfo {
private static final long serialVersionUID = -4568384407605608189L;
@Id
@ -28,48 +26,4 @@ public class AllCallInfo implements Serializable {
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "status")
@ApiModelProperty(value = "状态")
private Integer status;
@Column(name = "type")
@ApiModelProperty(value = "类型")
private Integer type;
@Column(name = "session_id")
@ApiModelProperty(value = "回调的sessionId")
private String sessionId;
@Column(name = "request_id")
@ApiModelProperty(value = "请求的唯一id")
private String requestId;
@Column(name = "clue_id")
@ApiModelProperty(value = "线索id")
private Long clueId;
@Column(name = "clue_type")
@ApiModelProperty(value = "线索类型")
private Integer clueType;
@Column(name = "member_id")
@ApiModelProperty(value = "所属人id")
private Long memberId;
@LastModifiedDate
@Column(name = "create_time")
@ApiModelProperty(value = "创建时间")
private Date createTime;
@Column(name = "duration")
@ApiModelProperty(value = "通话时长")
private Integer duration = 0;
@Column(name = "record_flag")
@ApiModelProperty(value = "该字段用于录音标识 0未有 1有")
private Integer recordFlag;
@Column(name = "record_file_download_url")
@ApiModelProperty(value = "录音下载地址")
private String recordFileDownloadUrl;
}

@ -12,6 +12,6 @@ public class DelUserDTO {
@ApiModelProperty("替换人用户ID")
private Long replaceUserId;
@ApiModelProperty("是否删除")
@ApiModelProperty("是否删除资源")
private Boolean isDel;
}

@ -0,0 +1,65 @@
package com.baiye.model.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author wujingtao
* @date 2022/02/10
*
*/
@EntityListeners(AuditingEntityListener.class)
@Data
@MappedSuperclass
public class BaseAllCallInfo implements Serializable {
@Column(name = "status")
@ApiModelProperty(value = "状态")
private Integer status;
@Column(name = "type")
@ApiModelProperty(value = "类型")
private Integer type;
@Column(name = "session_id")
@ApiModelProperty(value = "回调的sessionId")
private String sessionId;
@Column(name = "request_id")
@ApiModelProperty(value = "请求的唯一id")
private String requestId;
@Column(name = "clue_id")
@ApiModelProperty(value = "线索id")
private Long clueId;
@Column(name = "clue_type")
@ApiModelProperty(value = "线索类型")
private Integer clueType;
@Column(name = "member_id")
@ApiModelProperty(value = "所属人id")
private Long memberId;
@LastModifiedDate
@Column(name = "create_time")
@ApiModelProperty(value = "创建时间")
private Date createTime;
@Column(name = "duration")
@ApiModelProperty(value = "通话时长")
private Integer duration = 0;
@Column(name = "record_flag")
@ApiModelProperty(value = "该字段用于录音标识 0未有 1有")
private Integer recordFlag;
@Column(name = "record_file_download_url")
@ApiModelProperty(value = "录音下载地址")
private String recordFileDownloadUrl;
}

@ -58,6 +58,7 @@ public class BaseTask implements Serializable {
@ApiModelProperty(value = "创建人")
@Column(name = "create_by")
@NotNull(groups = AddGroup.class, message = "用户不能为空")
private Long createBy;
@ApiModelProperty(value = "更新人")

@ -2,6 +2,7 @@ package com.baiye.api;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.annotation.Inner;
import com.baiye.http.CommonResponse;
import com.baiye.model.dto.DistributeDTO;
import com.baiye.model.dto.DistributeResponseDTO;
@ -32,6 +33,7 @@ public class AssignDataController {
private final AssignDataService assignDataService;
@Inner(value = false)
@ApiOperation(value = "分配资源")
@PostMapping("/allocation")
public CommonResponse<List<DistributeResponseDTO>> resourceAllocation(@Validated @RequestBody DistributeDTO distribution) {

@ -1,6 +1,5 @@
package com.baiye.feign;
import com.baiye.constant.SecurityConstants;
import com.baiye.feign.fallback.TaskClientFallback;
import com.baiye.http.CommonResponse;
import com.baiye.model.dto.DynamicTaskDistributionDTO;
@ -22,7 +21,7 @@ public interface TaskClient {
@ApiOperation("添加任务")
@PostMapping(value = PAY_PREFIX + "/saveTask")
ResponseEntity<Object> saveTask(@RequestBody Task task, @RequestHeader(SecurityConstants.FROM) String from);
ResponseEntity<Object> saveTask(@RequestBody Task task);
@ApiOperation("查询任务列表")
@PostMapping(PAY_PREFIX + "/query")
@ -34,25 +33,25 @@ public interface TaskClient {
@ApiOperation("websocket发送错误信息")
@GetMapping(PAY_PREFIX + "/sendErrMessage")
void sendErrMessage(@RequestParam("errorMessage") String errorMessage, @RequestParam("userId") Long userId, @RequestHeader(SecurityConstants.FROM) String from);
void sendErrMessage(@RequestParam("errorMessage") String errorMessage, @RequestParam("userId") Long userId);
@ApiOperation("查询任务详情")
@GetMapping(PAY_PREFIX + "/queryDetails")
ResponseEntity<Task> queryDetails(@RequestParam("taskId") Long taskId,@RequestHeader(SecurityConstants.FROM) String from);
ResponseEntity<Task> queryDetails(@RequestParam("taskId") Long taskId);
@ApiOperation("修改任务信息")
@PostMapping(PAY_PREFIX + "/update")
CommonResponse<Object> updateTask(@RequestBody Task task, @RequestHeader(SecurityConstants.FROM) String from);
CommonResponse<Object> updateTask(@RequestBody Task task);
@ApiOperation("查询动态任务(自动)分配比率")
@GetMapping(PAY_PREFIX + "/findTaskDistribution")
CommonResponse<DynamicTaskDistributionDTO> findTaskDistribution(@RequestParam("taskId") Long taskId, @RequestHeader(SecurityConstants.FROM) String from);
CommonResponse<DynamicTaskDistributionDTO> findTaskDistribution(@RequestParam("taskId") Long taskId);
@ApiOperation("查询任务列表")
@GetMapping(PAY_PREFIX + "/list")
ResponseEntity<Object> list(@RequestParam("isForms") List<Integer> isForms,
@RequestParam("createBy") Long createBy,
@RequestParam("isDistribution") Integer isDistribution, @RequestHeader(SecurityConstants.FROM) String from);
@RequestParam("isDistribution") Integer isDistribution);
/**
*

@ -17,7 +17,7 @@ import java.util.Set;
@Component
public class TaskClientFallback implements TaskClient {
@Override
public ResponseEntity<Object> saveTask(Task task, String from) {
public ResponseEntity<Object> saveTask(Task task) {
return null;
}
@ -32,27 +32,27 @@ public class TaskClientFallback implements TaskClient {
}
@Override
public void sendErrMessage(String errorMessage, Long userId, String from) {
public void sendErrMessage(String errorMessage, Long userId) {
}
@Override
public ResponseEntity<Task> queryDetails(Long taskId, String from) {
public ResponseEntity<Task> queryDetails(Long taskId) {
return null;
}
@Override
public CommonResponse<Object> updateTask(Task task, String from) {
public CommonResponse<Object> updateTask(Task task) {
return null;
}
@Override
public CommonResponse<DynamicTaskDistributionDTO> findTaskDistribution(Long taskId, String from) {
public CommonResponse<DynamicTaskDistributionDTO> findTaskDistribution(Long taskId) {
return null;
}
@Override
public ResponseEntity<Object> list(List<Integer> isForms, Long createBy, Integer isDistribution, String from) {
public ResponseEntity<Object> list(List<Integer> isForms, Long createBy, Integer isDistribution) {
return null;
}
@Override

@ -0,0 +1,20 @@
package com.baiye.module.dao;
import com.baiye.module.entity.AllCallInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author wujingtao
* @date 2022/02/10
*/
@Repository
public interface AllCallInfoRepository extends JpaRepository<AllCallInfo, Long>, JpaSpecificationExecutor<AllCallInfo> {
void deleteAllByClueIdIn(Set<Long> clueIds);
}

@ -0,0 +1,22 @@
package com.baiye.module.dao;
import com.baiye.module.entity.CallClueInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author wjt
* @date 2021/12/13
*/
@Repository
public interface CallClueRepository extends JpaRepository<CallClueInfo, Long>, JpaSpecificationExecutor<CallClueInfo> {
void deleteByTaskIdIn(Set<Long> taskIds);
void deleteAllByClueIdIn(Set<Long> clueIds);
}

@ -127,9 +127,9 @@ public class ClueJpa {
List<Timestamp> newestCallTimeList = clueQueryCriteria.getNewestCallTime();
List<Timestamp> createTime = clueQueryCriteria.getCreateTime();
if (clueQueryCriteria.getTaskIds() == null && clueQueryCriteria.getTaskName() != null) {
return entityManager.createNativeQuery(sql.toString()).getResultList();
}
// if (clueQueryCriteria.getTaskIds() == null && clueQueryCriteria.getTaskName() != null) {
// return entityManager.createNativeQuery(sql.toString()).getResultList();
// }
if (id != null) {
sql.append("and c.id = :id ");
}
@ -390,7 +390,8 @@ public class ClueJpa {
}
public Long getPoolCount(PublicCluePoolQueryCriteria clueQueryCriteria) {
StringBuilder sql = new StringBuilder("select count(*) as countNum from tb_public_clue_pool as p left join tb_clue_middle as cm on p.clue_id=cm.clue_id where 1=1 ");
StringBuilder sql = new StringBuilder("select count(*) as countNum from tb_public_clue_pool as p left join tb_clue_middle as cm on p.clue_id=cm.clue_id " +
"left join tb_clue as c on c.id =p.clue_id where 1=1");
List confirmReceipt = getCluePoolListCondition(clueQueryCriteria, sql, null);
long count = 0L;
for (Object obj : confirmReceipt) {

@ -56,9 +56,6 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
/**
* ID
*
* @param memberId
* @return
*/
List<ClueMiddle> findByMemberId(Long memberId);
@ -67,12 +64,6 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
*/
List<ClueMiddle> findByTaskIdAndOrganizeId(Long taskId, Long organizeId);
/**
*
*/
@Query(value = " select optimistic_version from tb_clue_middle where clue_id = ?1 ", nativeQuery = true)
Integer lookUpOptimisticVersion(Long clueId);
@Query(value = "select clue_id from tb_clue_middle where member_id = ?1 limit 0 ,1 ", nativeQuery = true)
Long judgeMember(Long memberId);
@ -83,24 +74,8 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
@Query(value = "select count(*) from tb_clue_middle where task_id = ?1", nativeQuery = true)
Integer findTaskNum(Long taskId);
/**
* Id
*
* @param clueIdSet
*/
void deleteAllByClueIdIn(Set<Long> clueIdSet);
/**
* id
*
* @param taskIds
*/
List<ClueMiddle> findByTaskIdIn(Set<Long> taskIds);
/**
*
*
* @param taskIds
*/
void deleteByTaskIdIn(Set<Long> taskIds);
@ -108,9 +83,6 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
@Query(value = " update tb_clue_middle set member_id = ?2, member_status = 1 where clue_id in ?1 ", nativeQuery = true)
void updateMemberIdByClueIdIn(List<Long> clueIdList, Long userId);
@Query(value = "select clue_id from tb_clue_middle where task_id = ?1", nativeQuery = true)
Set<Long> findByTaskIdReturnClueId(Long taskId);
/**
* 线
*/
@ -157,9 +129,6 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
/**
* 线
*
* @param userId
* @return
*/
@Query(value = " select tcm.* from tb_clue_middle as tcm left join tb_clue as tc on tcm.clue_id =tc.id" +
" where tc.create_by = ?1", nativeQuery = true)

@ -12,8 +12,6 @@ import java.util.Set;
public interface ClueRepository extends JpaRepository<Clue, Long>, JpaSpecificationExecutor<Clue> {
/**
* Id
*
* @param clueIdList
*/
void deleteAllByIdIn(Set<Long> clueIdList);
}

@ -76,4 +76,11 @@ public interface ClueTalkRepository extends JpaRepository<ClueTalk, Long>, JpaSp
@Modifying
@Query(value = " update tb_clue_talk set member_id = ?2 where member_id = ?1 ", nativeQuery = true)
void updateMember(Long userId, Long replaceUserId);
void deleteByTaskIdIn(Set<Long> taskIds);
/**
* ID
*/
void deleteByMemberId(Long userId);
}

@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author wjt
@ -37,4 +38,9 @@ public interface PublicCluePoolRepository extends JpaRepository<PublicCluePool,
@Modifying
@Query(value = " update tb_public_clue_pool set member_id = ?2, member_name = ?3 where member_id = ?1 ", nativeQuery = true)
void updateMember(Long userId, Long replaceUserId, String userName);
/**
* ID
*/
void deleteAllByClueIdIn(Set<Long> clueIds);
}

@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
import java.util.Set;
/**
* @author jt
@ -50,4 +51,9 @@ public interface TurnoverRecordRepository extends JpaRepository<TurnoverRecord,
@Query(value = "select * from tb_clue_turnover_record d where d.turnover_time< ?1 and d.turnover_status = ?2", nativeQuery = true)
List<TurnoverRecord> findTimeOutByAndTurnoverTimeAndStatus(String beninTime, Integer status);
/**
* ID
*/
void deleteAllByClueIdIn(Set<Long> clueIds);
}

@ -0,0 +1,29 @@
package com.baiye.module.entity;
import com.baiye.model.entity.BaseAllCallInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
/**
* @author wujingtao
* @date 2022/02/10
*
*/
@Getter
@Setter
@Entity
@Table(name = "tb_call_info")
@EntityListeners(AuditingEntityListener.class)
public class AllCallInfo extends BaseAllCallInfo {
private static final long serialVersionUID = -4568384407605608189L;
@Id
@ApiModelProperty(value = "主键id自动递增")
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}

@ -0,0 +1,41 @@
package com.baiye.module.entity;
import cn.hutool.core.date.DatePattern;
import com.baiye.model.entity.BaseCallClueInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author wjt
* @date 2021/12/13
* 线
*/
@Entity
@Getter
@Setter
@Table(name = "tb_call_clue")
@EntityListeners(AuditingEntityListener.class)
public class CallClueInfo extends BaseCallClueInfo implements Serializable {
private static final long serialVersionUID = -2063303635710762496L;
@Id
@Column(name = "clue_id")
private Long clueId;
@LastModifiedDate
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8")
@Column(name = "create_time")
private Date createTime;
@Transient
@ApiModelProperty(value = "通话总时长")
private Integer breatheTotalDuration;
}

@ -61,11 +61,6 @@ public interface ClueService {
*/
List<ClueDto> query(ClueQueryCriteria clueQueryCriteria);
// /**
// * 导出资源(客户列表)
// */
// void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria);
/**
*
*/

@ -58,6 +58,10 @@ public class ClueServiceImpl implements ClueService {
private final WeChatAddFriendClient weChatAddFriendClient;
private final OceanEngineClueIdRepository oceanEngineClueIdRepository;
private final ClueFailRecordRepository clueFailRecordRepository;
private final TurnoverRecordRepository turnoverRecordRepository;
private final PublicCluePoolRepository publicCluePoolRepository;
private final CallClueRepository callClueRepository;
private final AllCallInfoRepository allCallInfoRepository;
private final AssignDataClient assignDataClient;
private final CompanyService companyService;
@ -461,7 +465,7 @@ public class ClueServiceImpl implements ClueService {
}
if (taskNum == null || taskNum == 0) {
try {
taskClient.sendErrMessage("导入资源合规条数0条,请检查文件重新导入", userId, SecurityConstants.FROM_IN);
taskClient.sendErrMessage("导入资源合规条数0条,请检查文件重新导入", userId);
} catch (Exception e) {
throw new BadRequestException("发送websocket失败");
}
@ -480,7 +484,7 @@ public class ClueServiceImpl implements ClueService {
task.setTaskType(DefaultNumberConstants.ONE_NUMBER);
task.setIsForm(DefaultNumberConstants.FIVE_NUMBER);
}
ResponseEntity<Object> response = taskClient.saveTask(task, SecurityConstants.FROM_IN);
ResponseEntity<Object> response = taskClient.saveTask(task);
if (response.getStatusCode().value() != 200) throw new BadRequestException("创建任务失败");
}
@ -491,20 +495,20 @@ public class ClueServiceImpl implements ClueService {
ClueQueryCriteria clueQueryCriteria = new ClueQueryCriteria();
clueQueryCriteria.setTaskIds(taskIds);
List<ClueDto> clueList = clueJpa.getClueList(clueQueryCriteria, null);
List<ClueDto> talkClueList = clueJpa.getTalkClueList(clueQueryCriteria, null);
clueList.addAll(talkClueList);
Set<Long> clueIds = clueList.stream().map(ClueDto::getId).collect(Collectors.toSet());
Set<Long> clueRecordId = clueRecordRepository.findByTaskIdIn(taskIds).stream().map(ClueRecord::getId).collect(Collectors.toSet());
//1、备份数据
clueBackupsTask.clueBackups(clueList);
//2、删除资源数据
clueRepository.deleteAllByIdIn(clueIds);
//3、删除资源-任务关联表
//1、删除备份数据
this.delete(clueList, clueIds);
//2、删除资源-任务关联表
clueMiddleRepository.deleteByTaskIdIn(taskIds);
//4、删除上传记录
//3、删除上传记录
clueRecordRepository.deleteByTaskIdIn(taskIds);
//5、删除上传记录中错误资源数据
//4、删除上传记录中错误资源数据
clueFailRecordRepository.deleteAllByRecordIdIn(clueRecordId);
//6、删除跟进记录
conductRecordRepository.deleteAllByClueIdIn(clueIds);
//5、删除拓客或者DMP资源数据
clueTalkRepository.deleteByTaskIdIn(taskIds);
}
return true;
}
@ -517,16 +521,30 @@ public class ClueServiceImpl implements ClueService {
List<ClueDto> clueAll = clueJpa.getClueList(clueQueryCriteria, null);
Set<Long> clueIds = clueAll.stream().map(ClueDto::getId).collect(Collectors.toSet());
Set<Long> taskIds = clueAll.stream().map(ClueDto::getTaskId).collect(Collectors.toSet());
//1、删除备份数据
this.delete(clueAll, clueIds);
//2、删除资源-任务关联表
clueMiddleRepository.deleteByMemberId(userId);
//3、删除拓客或者DMP资源数据
clueTalkRepository.deleteByMemberId(userId);
return clueMiddleRepository.findTaskIdCount(taskIds);
}
public void delete(List<ClueDto> clueAll, Set<Long> clueIds){
//1、备份数据
clueBackupsTask.clueBackups(clueAll);
//2、删除资源数据
clueRepository.deleteAllByIdIn(clueIds);
//3、删除资源-任务关联表
clueMiddleRepository.deleteByMemberId(userId);
//4、删除跟进记录
//3、删除跟进记录
conductRecordRepository.deleteAllByClueIdIn(clueIds);
// TODO 事务是否提交后进行的方法?
return taskCount(taskIds);
//4、删除回款信息
turnoverRecordRepository.deleteAllByClueIdIn(clueIds);
//5、删除公海资源
publicCluePoolRepository.deleteAllByClueIdIn(clueIds);
//6、删除详细通话记录
allCallInfoRepository.deleteAllByClueIdIn(clueIds);
//7、删除通话记录
callClueRepository.deleteAllByClueIdIn(clueIds);
}
@Override
@ -576,6 +594,7 @@ public class ClueServiceImpl implements ClueService {
clueTalk.setMemberId(null);
clueTalk.setOrganizeId(null);
clueTalk.setClueStage(0);
clueTalk.setLabelTime(null);
clueList.add(clueTalk);
} else {
throw new BadRequestException("存在已通话资源,无法撤回");
@ -594,6 +613,7 @@ public class ClueServiceImpl implements ClueService {
clueMiddle.setMemberId(null);
clueMiddle.setOrganizeId(null);
clueMiddle.setClueStage(0);
clueMiddle.setLabelTime(null);
clueList.add(clueMiddle);
} else {
throw new BadRequestException("存在已通话资源,无法撤回");
@ -684,11 +704,6 @@ public class ClueServiceImpl implements ClueService {
ClueMiddle clueMiddle = new ClueMiddle();
clueMiddle.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER);
if (flag) {
clueMiddle.setMemberId(dynamicTaskDto.getUserId());
clueMiddle.setMemberStatus(DefaultNumberConstants.ONE_NUMBER);
}
clueMiddle.setClueId(save.getId());
clueMiddle.setTaskId(taskId);
clueMiddle.setOptimisticVersion(DefaultNumberConstants.ZERO_NUMBER);
@ -700,16 +715,22 @@ public class ClueServiceImpl implements ClueService {
}
//查询任务信息
ResponseEntity<Task> response = taskClient.queryDetails(taskId, SecurityConstants.FROM_IN);
ResponseEntity<Task> response = taskClient.queryDetails(taskId);
if (response.getStatusCode().value() != 200 || response.getBody() == null) {
throw new BadRequestException("查询错误");
}
Task task = response.getBody();
task.setTotalNumber(task.getTotalNumber() + 1);
task.setIsDistribution(1);
taskClient.updateTask(task, SecurityConstants.FROM_IN);
taskClient.updateTask(task);
clueMiddle.setClueType(task.getIsForm());
if (flag) {
clueMiddle.setMemberId(dynamicTaskDto.getUserId());
clueMiddle.setMemberStatus(DefaultNumberConstants.ONE_NUMBER);
}
clueMiddleRepository.save(clueMiddle);
// 自动分配手动上传的任务
if (!flag && task.getIsOpen() == 1) this.dynamicTaskDistribution(task.getId(), task.getIsForm());
}
@Override
@ -800,7 +821,7 @@ public class ClueServiceImpl implements ClueService {
Task crmTask = new Task();
crmTask.setId(crmTaskId);
crmTask.setTotalNumber(crmTotalNumber + 1);
taskClient.updateTask(crmTask, SecurityConstants.FROM_IN);
taskClient.updateTask(crmTask);
//初始化线索
ClueMiddle clueMiddle = new ClueMiddle();
@ -827,7 +848,7 @@ public class ClueServiceImpl implements ClueService {
} else {
clueIds = clueMiddleRepository.findByTaskIdAndMemberStatus(taskId, DefaultNumberConstants.ZERO_NUMBER);
}
CommonResponse<DynamicTaskDistributionDTO> response = taskClient.findTaskDistribution(taskId, SecurityConstants.FROM_IN);
CommonResponse<DynamicTaskDistributionDTO> response = taskClient.findTaskDistribution(taskId);
if (response.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
DynamicTaskDistributionDTO dynamicTaskDistributionDTO = response.getData();
@ -975,7 +996,7 @@ public class ClueServiceImpl implements ClueService {
String taskNameKey = KeyFieldConstants.TASK_NAME_KEY + taskId;
String str = (String) redisUtils.get(taskNameKey);
if (StringUtils.isEmpty(str) || "null".equals(str)) {
ResponseEntity<Task> response = taskClient.queryDetails(taskId, SecurityConstants.FROM_IN);
ResponseEntity<Task> response = taskClient.queryDetails(taskId);
if (response.getStatusCode().value() != 200) {
throw new BadRequestException("查询错误");
}
@ -1020,14 +1041,6 @@ public class ClueServiceImpl implements ClueService {
}
}
/**
* ,Map
*/
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public Map<Long, Integer> taskCount(Set<Long> taskIds) {
return clueMiddleRepository.findTaskIdCount(taskIds);
}
/**
*
*/

@ -118,7 +118,7 @@ public class FormSourceServiceImpl implements FormSourceService {
task.setId(taskId);
task.setTotalNumber(taskNum);
task.setIsDistribution(1);
taskClient.updateTask(task, SecurityConstants.FROM_IN);
taskClient.updateTask(task);
map.put("status", 0);
map.put("msg", "推送成功");

@ -426,7 +426,7 @@ public class ReportCrmServiceImpl implements ReportCrmService {
if (userId == null) {
throw new BadRequestException("参数异常,缺失用户id");
}
Object taskInfos = taskClient.list(Arrays.asList(ClueTypeConstants.SCREEN_TYPE), userId, DefaultNumberConstants.ONE_NUMBER, SecurityConstants.FROM_IN).getBody();
Object taskInfos = taskClient.list(Arrays.asList(ClueTypeConstants.SCREEN_TYPE), userId, DefaultNumberConstants.ONE_NUMBER).getBody();
List<Long> taskSet = new ArrayList<>();
JSONArray taskList = JSONUtil.parseArray(taskInfos);
if (CollUtil.isNotEmpty(taskList)) {
@ -443,7 +443,7 @@ public class ReportCrmServiceImpl implements ReportCrmService {
@Cacheable(value = "taskName", key = "'task:name:' + #p0")
public String findByTaskId(Long taskId) {
Task body = taskClient.queryDetails(taskId, SecurityConstants.FROM_IN).getBody();
Task body = taskClient.queryDetails(taskId).getBody();
if (body != null) {
return body.getTaskName();
}

@ -350,7 +350,7 @@ public class ReportTokerServiceImpl implements ReportTokerService {
@Cacheable(value = "taskName", key = "'task:name:' + #p0")
public String findByTaskId(Long taskId) {
Task body = taskClient.queryDetails(taskId, SecurityConstants.FROM_IN).getBody();
Task body = taskClient.queryDetails(taskId).getBody();
if (body != null) {
return body.getTaskName();
}
@ -504,7 +504,7 @@ public class ReportTokerServiceImpl implements ReportTokerService {
if (userId == null) {
throw new BadRequestException("参数异常,缺失用户id");
}
Object taskInfos = taskClient.list(Arrays.asList(ClueTypeConstants.TOKER_TYPE), userId, DefaultNumberConstants.ONE_NUMBER, SecurityConstants.FROM_IN).getBody();
Object taskInfos = taskClient.list(Arrays.asList(ClueTypeConstants.TOKER_TYPE), userId, DefaultNumberConstants.ONE_NUMBER).getBody();
List<Long> taskSet = new ArrayList<>();
JSONArray taskList = JSONUtil.parseArray(taskInfos);
if (CollUtil.isNotEmpty(taskList)) {

@ -1,6 +1,7 @@
package com.baiye.task;
import cn.hutool.core.collection.CollUtil;
import com.baiye.constant.FileConstant;
import com.baiye.model.dto.ClueDto;
import com.baiye.module.dao.ClueBackupsRepository;
import com.baiye.module.entity.Clue;
@ -34,8 +35,12 @@ public class ClueBackupsTask {
ClueBackups clueBackups = new ClueBackups();
BeanUtils.copyProperties(clue, clueBackups,"createTime");
list.add(clueBackups);
if (list.size() >= FileConstant.ONE_THOUSAND_NUMBER){
clueBackupsRepository.saveAll(list);
list.clear();
}
}
clueBackupsRepository.saveAll(list);
if (CollUtil.isNotEmpty(list)) clueBackupsRepository.saveAll(list);
}
}
}

@ -85,28 +85,23 @@ public class FileAnalysisTask {
}
}
} catch (Exception e) {
taskClient.sendErrMessage("导入资源错误,请检查数据格式后重新导入", clueRecords.get(0).getCreateBy(), SecurityConstants.FROM_IN);
taskClient.sendErrMessage("导入资源错误,请检查数据格式后重新导入", clueRecords.get(0).getCreateBy());
//导入文件记录失败修改状态
updateList(clueRecords);
e.printStackTrace();
throw new BadRequestException("=========读取资源错误============");
}
//动态任务不需要创建任务,更新后结束方法拓客任务不指定任务ID也要新建任务)
//动态任务不需要创建任务,更新数据return结束(注:拓客任务不指定任务ID也要新建任务
Integer uploadType = clueRecords.get(0).getUploadType();
if (uploadType == FileConstant.FIVE_NUMBER || (uploadType == FileConstant.SIX_NUMBER && !isCreateTask)) {
Long taskId = clueRecords.get(0).getTaskId();
Integer taskNum;
if (uploadType == FileConstant.SIX_NUMBER) {
taskNum = clueTalkRepository.findTaskNum(taskId);
} else {
taskNum = clueMiddleRepository.findTaskNum(taskId);
}
Integer taskNum = clueMiddleRepository.findTaskNum(taskId);
if (uploadType == FileConstant.SIX_NUMBER) taskNum = clueTalkRepository.findTaskNum(taskId);
Task task = new Task();
task.setId(taskId);
task.setTotalNumber(taskNum);
task.setIsDistribution(1);
taskClient.updateTask(task, SecurityConstants.FROM_IN);
taskClient.updateTask(task);
// 查看此任务是否开启自动分配,开启了就分配掉
clueService.dynamicTaskDistribution(taskId, uploadType);
return;

@ -153,7 +153,7 @@ public class MailSourceTask {
// 删除邮件 删除文件
FileUtil.del(path);
FileUtil.del(unzipPath);
taskClient.updateTask(task, SecurityConstants.FROM_IN);
taskClient.updateTask(task);
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, taskName);
log.info("============== message parsing succeeded file path as {} unzip path as {} ===============", path, unzipPath);
}

@ -167,7 +167,7 @@ public class OceanEngineSync {
task.setId(taskId);
task.setTotalNumber(taskNum);
task.setIsDistribution(1);
taskClient.updateTask(task, SecurityConstants.FROM_IN);
taskClient.updateTask(task);
OceanEngineClueId oceanEngineClueId = new OceanEngineClueId();
oceanEngineClueId.setLocalClueId(save.getId());

Loading…
Cancel
Save