|
|
|
@ -18,11 +18,13 @@ import com.baiye.modules.system.service.dto.*;
|
|
|
|
|
import com.baiye.modules.system.service.mapstruct.OrganizeMapper;
|
|
|
|
|
import com.baiye.modules.system.service.mapstruct.OrganizeUserMapper;
|
|
|
|
|
import com.baiye.modules.system.service.mapstruct.TaskOrganizeMapper;
|
|
|
|
|
import com.baiye.modules.telemarkting.dao.ExtensionUserRepository;
|
|
|
|
|
import com.baiye.modules.telemarkting.service.ExtensionNumberService;
|
|
|
|
|
import com.baiye.util.*;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
|
import org.springframework.cache.annotation.CacheEvict;
|
|
|
|
|
import org.springframework.data.domain.Page;
|
|
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
|
@ -55,7 +57,9 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
private final RoleService roleService;
|
|
|
|
|
private final RedisUtils redisUtils;
|
|
|
|
|
private final UserMessageService userMessageService;
|
|
|
|
|
private final ExtensionNumberService ExtensionNumberService;
|
|
|
|
|
private final ExtensionNumberService extensionNumberService;
|
|
|
|
|
private final CompanyRepository companyRepository;
|
|
|
|
|
private final ExtensionUserRepository extensionUserRepository;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 新增小组
|
|
|
|
@ -68,7 +72,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
organize.setCreateBy(SecurityUtils.getCurrentUserId());
|
|
|
|
|
Organize saveOrganize = organizeRepository.save(organize);
|
|
|
|
|
//添加分机号
|
|
|
|
|
ExtensionNumberService.assignExtensionNum(saveOrganize.getId(),organize.getUserId());
|
|
|
|
|
extensionNumberService.assignExtensionNum(saveOrganize.getId(), organize.getUserId());
|
|
|
|
|
// 添加小组成员信息
|
|
|
|
|
OrganizeUser organizeUser = new OrganizeUser();
|
|
|
|
|
organizeUser.setOrganizeId(saveOrganize.getId());
|
|
|
|
@ -87,10 +91,19 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
@CacheEvict(value = "organize",key = "'organize:' + #organize.getId()")
|
|
|
|
|
@CacheEvict(value = "organize", key = "'organize:' + #organize.getId()")
|
|
|
|
|
public void updateOrganize(Organize organize) {
|
|
|
|
|
Organize updateOrganize = organizeRepository.findById(organize.getId()).orElseGet(Organize::new);
|
|
|
|
|
//添加(删除)分机号
|
|
|
|
|
if (organize.getCallMode() != null && organize.getCallMode() != updateOrganize.getCallMode()){
|
|
|
|
|
List<OrganizeUser> organizeList = organizeUserRepository.findByOrganizeId(organize.getId());
|
|
|
|
|
if (organize.getCallMode() == 1) {
|
|
|
|
|
organizeList.forEach(oe -> extensionNumberService.assignExtensionNum(oe.getOrganizeId(), oe.getUserId()));
|
|
|
|
|
}else if (updateOrganize.getCallMode() == 1){
|
|
|
|
|
extensionUserRepository.deleteByOrganizeId(updateOrganize.getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (organize.getOrganizeName() != null) {
|
|
|
|
|
Organize updateOrganize = organizeRepository.findById(organize.getId()).orElseGet(Organize::new);
|
|
|
|
|
updateOrganize.setOrganizeName(organize.getOrganizeName());
|
|
|
|
|
updateOrganize.setCallMode(organize.getCallMode());
|
|
|
|
|
// 设置一个无用的字段,save方法会验证validation的验证参数
|
|
|
|
@ -138,7 +151,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
addOrganizeUser.setCreateBy(currentUserId);
|
|
|
|
|
OrganizeUser saveOrganizeUser = organizeUserRepository.save(addOrganizeUser);
|
|
|
|
|
//添加分机号
|
|
|
|
|
ExtensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(),saveOrganizeUser.getUserId());
|
|
|
|
|
extensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(), saveOrganizeUser.getUserId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -193,33 +206,6 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询封装用户信息
|
|
|
|
|
*/
|
|
|
|
|
public List<Map<String, Object>> findUser(List<Long> userIdList, OrganizeUserQueryCriteria organizeUserQueryCriteria) {
|
|
|
|
|
List<User> userList = new ArrayList<>();
|
|
|
|
|
if (organizeUserQueryCriteria.getBlurry() != null) {
|
|
|
|
|
userList = userRepository.findUserIdsByNiceName(userIdList, organizeUserQueryCriteria.getBlurry());
|
|
|
|
|
} else {
|
|
|
|
|
userList = userRepository.findAllById(userIdList);
|
|
|
|
|
}
|
|
|
|
|
List<Map<String, Object>> list = Lists.newArrayList();
|
|
|
|
|
if (userList.size() > 0) {
|
|
|
|
|
for (User user : userList) {
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
map.put("id", user.getId());
|
|
|
|
|
map.put("nickName", user.getNickName());
|
|
|
|
|
map.put("gender", user.getGender());
|
|
|
|
|
map.put("email", user.getEmail());
|
|
|
|
|
map.put("phone", user.getPhone());
|
|
|
|
|
map.put("username", user.getUsername());
|
|
|
|
|
map.put("avatarPath", user.getAvatarPath());
|
|
|
|
|
list.add(map);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 管理员分配任务
|
|
|
|
|
*/
|
|
|
|
@ -274,7 +260,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
if (data != null && data.size() > 0) {
|
|
|
|
|
int index = 0;
|
|
|
|
|
for (DistributeResponseDTO distributeResponseDTO : data) {
|
|
|
|
|
if (distributeResponseDTO.getResponseList().size() <= 0 ){
|
|
|
|
|
if (distributeResponseDTO.getResponseList().size() <= 0) {
|
|
|
|
|
String organizeName = organizeRepository.findOrganizeById(distributeResponseDTO.getDeptId()).getOrganizeName();
|
|
|
|
|
throw new BadRequestException(organizeName + "比例过低,分配数不低于0");
|
|
|
|
|
}
|
|
|
|
@ -291,7 +277,8 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
taskOrganize.setRatio(weights.get(index));
|
|
|
|
|
taskOrganize.setRemark(organizeList.get(index).getRemark());
|
|
|
|
|
index++;
|
|
|
|
|
taskOrganizeRepository.save(taskOrganize);
|
|
|
|
|
TaskOrganize saveTaskOrganize = taskOrganizeRepository.save(taskOrganize);
|
|
|
|
|
redisUtils.set(String.valueOf(saveTaskOrganize.getTaskId()), saveTaskOrganize.getOrganizeTaskName(), 2592000);//缓存时间三十天
|
|
|
|
|
// 发送通知的用户id
|
|
|
|
|
OrganizeUser organizeUser = organizeUserRepository.findByOrganizeIdAndIsLeader(distributeResponseDTO.getDeptId(), true);
|
|
|
|
|
userIdList.add(organizeUser.getUserId());
|
|
|
|
@ -324,6 +311,34 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
return PageUtil.toPage(map);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询组(分页 + 组人员列表)
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> queryUserAll(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) {
|
|
|
|
|
organizeQueryCriteria.setCreateBy(SecurityUtils.getCurrentUserId());
|
|
|
|
|
Page<Organize> organizePage = organizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder), pageable);
|
|
|
|
|
Page<OrganizeDto> map = organizePage.map(organizeMapper::toDto);
|
|
|
|
|
for (OrganizeDto organizeDto : map) {
|
|
|
|
|
List<OrganizeUser> organizeUserList = organizeUserRepository.findByOrganizeId(organizeDto.getId());
|
|
|
|
|
List<Long> userIds = new ArrayList<>();
|
|
|
|
|
for (OrganizeUser organizeUser : organizeUserList) {
|
|
|
|
|
// 组长单独设置字段
|
|
|
|
|
if (organizeUser.getIsLeader()){
|
|
|
|
|
UserDto userDto = userService.findById(organizeUser.getUserId());
|
|
|
|
|
organizeDto.setUserId(userDto.getId());
|
|
|
|
|
organizeDto.setUserNickName(userDto.getNickName());
|
|
|
|
|
}else {
|
|
|
|
|
userIds.add(organizeUser.getUserId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 查询组员用户信息(注意:循环中查询,一个小组查询一次库)
|
|
|
|
|
List<Map<String, Object>> userList = findUser(userIds, new OrganizeUserQueryCriteria());
|
|
|
|
|
organizeDto.setUserMapList(userList);
|
|
|
|
|
}
|
|
|
|
|
return PageUtil.toPage(map);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询组(列表)
|
|
|
|
|
*/
|
|
|
|
@ -340,7 +355,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询组(详情)
|
|
|
|
|
* 查询组任务(详情)
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public TaskOrganize queryDetails(OrganizeQueryCriteria organizeQueryCriteria) {
|
|
|
|
@ -377,7 +392,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
public Map<String, Object> queryLeaderTaskList(TaskOrganizeQueryCriteria taskOrganizeQueryCriteria, Pageable pageable) {
|
|
|
|
|
|
|
|
|
|
PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(Sort.Direction.DESC, "updateTime")
|
|
|
|
|
.and( Sort.by(Sort.Direction.ASC,"taskStatus")));
|
|
|
|
|
.and(Sort.by(Sort.Direction.ASC, "taskStatus")));
|
|
|
|
|
Long currentUserId = SecurityUtils.getCurrentUserId();
|
|
|
|
|
Organize organize = organizeRepository.findOrganize(currentUserId);
|
|
|
|
|
if (organize != null) {
|
|
|
|
@ -417,7 +432,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
organizeUser.setCreateBy(SecurityUtils.getCurrentUserId());
|
|
|
|
|
OrganizeUser saveOrganizeUser = organizeUserRepository.save(organizeUser);
|
|
|
|
|
//添加分机号
|
|
|
|
|
ExtensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(),saveOrganizeUser.getUserId());
|
|
|
|
|
extensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(), saveOrganizeUser.getUserId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//分配组员资源
|
|
|
|
@ -429,7 +444,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
if (rse.getBody() != null) {
|
|
|
|
|
Long userId = rse.getBody();
|
|
|
|
|
UserDto user = userService.findById(userId);
|
|
|
|
|
throw new BadRequestException(user.getNickName() + "比例过低,分配数量不能低于0");
|
|
|
|
|
throw new BadRequestException(user.getNickName() + "比例过低,分配数量不能低于0");
|
|
|
|
|
}
|
|
|
|
|
//修改小组任务信息
|
|
|
|
|
TaskOrganize updateTaskOrganize = taskOrganizeRepository.findByOrganizeIdAndTaskId(organizeId, taskId);
|
|
|
|
@ -464,7 +479,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
// 判断角色,管理员只查组长角色的用户
|
|
|
|
|
if (roleId != RoleNumberConstants.MINUS_EIGHT_NUMBER) {
|
|
|
|
|
roles.add(RoleNumberConstants.MINUS_FIVE_NUMBER);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
roles.add(RoleNumberConstants.MINUS_NINE_NUMBER);
|
|
|
|
|
}
|
|
|
|
|
//查询角色下所有用户
|
|
|
|
@ -489,7 +504,7 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 小组分配资源时,显示组长自己的信息,组长给自己分配资源
|
|
|
|
|
if (organizeQueryCriteria.getIsShowLeader() == 1){
|
|
|
|
|
if (organizeQueryCriteria.getIsShowLeader() == 1) {
|
|
|
|
|
UserDto leaderUser = userService.findById(SecurityUtils.getCurrentUserId());
|
|
|
|
|
userDtoList.add(leaderUser);
|
|
|
|
|
}
|
|
|
|
@ -502,21 +517,20 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, List<String>> getLabel(Long taskId, Long organizeId) {
|
|
|
|
|
TaskOrganizeQueryCriteria taskOrganizeQueryCriteria = new TaskOrganizeQueryCriteria();
|
|
|
|
|
if (organizeId != 0) {
|
|
|
|
|
if (organizeId != null) {
|
|
|
|
|
taskOrganizeQueryCriteria.setOrganizeId(organizeId);
|
|
|
|
|
}
|
|
|
|
|
taskOrganizeQueryCriteria.setTaskId(taskId);
|
|
|
|
|
List<TaskOrganizeDto> taskOrganizeDtos = taskOrganizeMapper.toDto(taskOrganizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, taskOrganizeQueryCriteria, criteriaBuilder)));
|
|
|
|
|
TaskOrganizeDto taskOrganizeDto = taskOrganizeDtos.get(0);
|
|
|
|
|
Map<String, List<String>> map = new HashMap<>();
|
|
|
|
|
if (organizeId == 0) {
|
|
|
|
|
if (!redisUtils.hasKey(String.valueOf(taskOrganizeDto.getTaskId()))) {
|
|
|
|
|
int duration = new Random().nextInt(259200 - 172800 + 1) + 172800;//缓存时间两天到三天随机
|
|
|
|
|
redisUtils.set(String.valueOf(taskOrganizeDto.getTaskId()), taskOrganizeDto.getOrganizeTaskName(), duration);
|
|
|
|
|
List<String> list = new ArrayList<>();
|
|
|
|
|
list.add(taskOrganizeDto.getOrganizeTaskName());
|
|
|
|
|
map.put("taskName", list);
|
|
|
|
|
}
|
|
|
|
|
//判断redis中是否有值,线索列表时查询任务名称,任务id作为key,任务名称为val,任务名称不能修改
|
|
|
|
|
String taskName = (String) redisUtils.get(taskOrganizeDto.getTaskId() + "");
|
|
|
|
|
if (organizeId == null && StringUtils.isBlank(taskName)) {
|
|
|
|
|
List<String> list = new ArrayList<>();
|
|
|
|
|
list.add(taskOrganizeDto.getOrganizeTaskName());
|
|
|
|
|
map.put("taskName", list);
|
|
|
|
|
redisUtils.set(String.valueOf(taskOrganizeDto.getTaskId()), taskOrganizeDto.getOrganizeTaskName(), 2592000);// 缓存三十天
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
map.put("organizeLabel", taskOrganizeDto.getOrganizeLabel());
|
|
|
|
@ -533,7 +547,31 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
@Override
|
|
|
|
|
// @Cacheable(cacheNames = "organizeCache",key = "#teamId")
|
|
|
|
|
public Organize findByOrganizeId(Long teamId) {
|
|
|
|
|
return organizeRepository.findById(teamId).orElseGet(Organize::new);
|
|
|
|
|
return organizeRepository.findById(teamId).orElseGet(Organize::new);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询呼叫方式和分机号
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> selectCallMode() {
|
|
|
|
|
Map<String, Object> callModeMap = new HashMap<>();
|
|
|
|
|
String tel = "";
|
|
|
|
|
Long userId = SecurityUtils.getCurrentUserId();
|
|
|
|
|
User user = userRepository.findById(userId).orElseGet(User::new);
|
|
|
|
|
OrganizeUser organizeUser = organizeUserRepository.findByUserId(userId);
|
|
|
|
|
Organize organize = organizeRepository.findById(organizeUser.getOrganizeId()).orElseGet(Organize::new);
|
|
|
|
|
if (organize.getCallMode() == 1){
|
|
|
|
|
// (点呼)获取分机号
|
|
|
|
|
tel = String.valueOf(extensionNumberService.getExtension(userId).getNumber());
|
|
|
|
|
}else if (organize.getCallMode() == 2){
|
|
|
|
|
Company company = companyRepository.findById(user.getCompanyId()).orElseGet(Company::new);
|
|
|
|
|
tel = company.getTelX();
|
|
|
|
|
}
|
|
|
|
|
callModeMap.put("callMode",organize.getCallMode());
|
|
|
|
|
callModeMap.put("callNum",tel);
|
|
|
|
|
return callModeMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -544,5 +582,31 @@ public class OrganizeServiceImpl implements OrganizeService {
|
|
|
|
|
UserDto userDto = userService.findById(organizeUser.getUserId());
|
|
|
|
|
return userDto;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 查询封装用户信息
|
|
|
|
|
*/
|
|
|
|
|
public List<Map<String, Object>> findUser(List<Long> userIdList, OrganizeUserQueryCriteria organizeUserQueryCriteria) {
|
|
|
|
|
List<User> userList = new ArrayList<>();
|
|
|
|
|
if (organizeUserQueryCriteria.getBlurry() != null) {
|
|
|
|
|
userList = userRepository.findUserIdsByNiceName(userIdList, organizeUserQueryCriteria.getBlurry());
|
|
|
|
|
} else {
|
|
|
|
|
userList = userRepository.findAllById(userIdList);
|
|
|
|
|
}
|
|
|
|
|
List<Map<String, Object>> list = Lists.newArrayList();
|
|
|
|
|
if (userList.size() > 0) {
|
|
|
|
|
for (User user : userList) {
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
map.put("id", user.getId());
|
|
|
|
|
map.put("nickName", user.getNickName());
|
|
|
|
|
map.put("gender", user.getGender());
|
|
|
|
|
map.put("email", user.getEmail());
|
|
|
|
|
map.put("phone", user.getPhone());
|
|
|
|
|
map.put("username", user.getUsername());
|
|
|
|
|
map.put("avatarPath", user.getAvatarPath());
|
|
|
|
|
list.add(map);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|