代码提交

master
yqy 3 years ago
parent 6b68ce0df0
commit a14de5df7a

@ -0,0 +1,49 @@
package com.baiye.constant;
/**
* ID
*
* @author YQY
* @date : 2021/12/30
*/
public class RoleNumberConstants {
private RoleNumberConstants() {
}
/**
*
*/
public static final Long MINUS_ONE_NUMBER = 1L;
/**
*
*/
public static final Long MINUS_TWO_NUMBER = 2L;
/**
*
*/
public static final Long MINUS_THREE_NUMBER = 3L;
/**
*
*/
public static final Long MINUS_FIVE_NUMBER = 5L;
/**
*
*/
public static final Long MINUS_SEVEN_NUMBER = 7L;
/**
*
*/
public static final Long MINUS_EIGHT_NUMBER = 8L;
/**
*
*/
public static final Long MINUS_NINE_NUMBER = 9L;
}

@ -8,6 +8,7 @@ import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
@Getter @Getter
@Setter @Setter
@ -47,9 +48,6 @@ public class ClueDto implements Serializable {
@ApiModelProperty(value = "所属组员id") @ApiModelProperty(value = "所属组员id")
private Long memberId; private Long memberId;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
private Integer memberStatus;
@ApiModelProperty(value = "创建人") @ApiModelProperty(value = "创建人")
private Long createBy; private Long createBy;
@ -63,4 +61,16 @@ public class ClueDto implements Serializable {
private String remark; private String remark;
private Long taskId; private Long taskId;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
private Integer memberStatus;
@ApiModelProperty(value = "标签")
private Object sourceLabel;
@ApiModelProperty(value = "组长标签")
private List<String> organizeLabel;
@ApiModelProperty(value = "任务(管理员)标签")
private List<String> baseLabel;
} }

@ -18,11 +18,9 @@ public class ClueQueryCriteria {
private Long id; private Long id;
@ApiModelProperty(value = "小组id") @ApiModelProperty(value = "小组id")
@Query
private Long organizeId; private Long organizeId;
@ApiModelProperty(value = "所属组员id") @ApiModelProperty(value = "所属组员id")
@Query
private Long memberId; private Long memberId;
@ApiModelProperty(value = "数据来源 0:自定义模板 1:UC 2:快手 3:抖音 4:百度") @ApiModelProperty(value = "数据来源 0:自定义模板 1:UC 2:快手 3:抖音 4:百度")
@ -34,7 +32,6 @@ public class ClueQueryCriteria {
private String name; private String name;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成") @ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
@Query
private Integer memberStatus; private Integer memberStatus;
@ApiModelProperty(value = "选取的组员ID") @ApiModelProperty(value = "选取的组员ID")

@ -1,11 +1,9 @@
package com.baiye.modules.system.service.dto; package com.baiye.model.dto;
import com.baiye.annotation.Query; import com.baiye.annotation.Query;
import com.baiye.modules.system.domain.Organize;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List; import java.util.List;
@ -36,6 +34,4 @@ public class OrganizeQueryCriteria {
@ApiModelProperty(value = "标签名称") @ApiModelProperty(value = "标签名称")
private List<String> labelNameList; private List<String> labelNameList;
private List<Organize> organizeList;
} }

@ -57,17 +57,17 @@ public class BaseClue implements Serializable {
@Column(name = "record_id") @Column(name = "record_id")
private Long recordId; private Long recordId;
@ApiModelProperty(value = "小组id") // @ApiModelProperty(value = "小组id")
@Column(name = "organize_id") // @Column(name = "organize_id")
private Long organizeId; // private Long organizeId;
//
@ApiModelProperty(value = "所属组员id") // @ApiModelProperty(value = "所属组员id")
@Column(name = "member_id") // @Column(name = "member_id")
private Long memberId; // private Long memberId;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成") // @ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
@Column(name = "member_status") // @Column(name = "member_status")
private Integer memberStatus; // private Integer memberStatus;
@ApiModelProperty(value = "创建人") @ApiModelProperty(value = "创建人")
@Column(name = "create_by") @Column(name = "create_by")
@ -87,7 +87,7 @@ public class BaseClue implements Serializable {
@Column(name = "remark") @Column(name = "remark")
private String remark; private String remark;
@Convert(converter = JpaConverterListJson.class) // @Convert(converter = JpaConverterListJson.class)
private List<String> sourceLabel; // private List<String> sourceLabel;
} }

@ -127,6 +127,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.antMatchers( "/api/users/admin").permitAll() .antMatchers( "/api/users/admin").permitAll()
.antMatchers( "/api/task/query").permitAll() .antMatchers( "/api/task/query").permitAll()
.antMatchers( "/api/organize/queryAll").permitAll()
// 自定义匿名访问所有url放行允许匿名和带Token访问细腻化到每个 Request 类型 // 自定义匿名访问所有url放行允许匿名和带Token访问细腻化到每个 Request 类型
// GET // GET
.antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll() .antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll()

@ -1,6 +1,7 @@
package com.baiye.modules.system.domain; package com.baiye.modules.system.domain;
import com.baiye.modules.system.service.dto.UserDto; import com.baiye.modules.system.service.dto.UserDto;
import com.baiye.util.JpaConverterListJson;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import javax.persistence.*; import javax.persistence.*;
@ -89,6 +90,10 @@ public class Organize implements Serializable {
@Column(name = "remark") @Column(name = "remark")
private String remark; private String remark;
@ApiModelProperty(value = "组长标签")
@Convert(converter = JpaConverterListJson.class)
private List<String> organizeLabel;
@Transient @Transient

@ -3,15 +3,12 @@ package com.baiye.modules.system.domain;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import javax.persistence.*; import javax.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
* OrganizeUser * OrganizeUser
@ -63,5 +60,4 @@ public class OrganizeUser implements Serializable {
@ApiModelProperty(value = "更新人") @ApiModelProperty(value = "更新人")
@Column(name = "update_by") @Column(name = "update_by")
private Long updateBy; private Long updateBy;
} }

@ -2,11 +2,11 @@ package com.baiye.modules.system.rest;
import com.baiye.http.CommonResponse; import com.baiye.http.CommonResponse;
import com.baiye.http.ResponseCode; import com.baiye.http.ResponseCode;
import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.OrganizeQueryCriteria;
import com.baiye.modules.system.service.dto.OrganizeDto;
import com.baiye.modules.system.service.dto.OrganizeMemberDistributionDTO; import com.baiye.modules.system.service.dto.OrganizeMemberDistributionDTO;
import com.baiye.modules.system.service.dto.OrganizeSaveDTO; import com.baiye.modules.system.service.dto.OrganizeSaveDTO;
import com.baiye.modules.system.service.OrganizeService; import com.baiye.modules.system.service.OrganizeService;
import com.baiye.modules.system.service.dto.OrganizeQueryCriteria;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -16,6 +16,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
/** /**
* @author YQY * @author YQY
* @date 2021-12-13 * @date 2021-12-13
@ -36,7 +38,7 @@ public class OrganizeController {
@ApiOperation("查询组") @ApiOperation("查询组")
@PostMapping("/queryAll") @PostMapping("/queryAll")
public ResponseEntity<Object> queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria){ public ResponseEntity<List<OrganizeDto>> queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria){
return new ResponseEntity<>(organizeService.queryAll(organizeQueryCriteria),HttpStatus.OK); return new ResponseEntity<>(organizeService.queryAll(organizeQueryCriteria),HttpStatus.OK);
} }

@ -17,6 +17,7 @@ package com.baiye.modules.system.rest;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baiye.config.properties.RsaProperties; import com.baiye.config.properties.RsaProperties;
import com.baiye.constant.RoleNumberConstants;
import com.baiye.exception.BadRequestException; import com.baiye.exception.BadRequestException;
import com.baiye.modules.system.domain.Dept; import com.baiye.modules.system.domain.Dept;
import com.baiye.modules.system.domain.User; import com.baiye.modules.system.domain.User;
@ -178,6 +179,7 @@ public class UserController {
*/ */
private void checkLevel(User resources) { private void checkLevel(User resources) {
Integer currentLevel = Collections.min(roleService.findByUsersId(SecurityUtils.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); Integer currentLevel = Collections.min(roleService.findByUsersId(SecurityUtils.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()));
Integer optLevel = roleService.findByRoles(resources.getRoles()); Integer optLevel = roleService.findByRoles(resources.getRoles());
if (currentLevel > optLevel) { if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足"); throw new BadRequestException("角色权限不足");
@ -189,4 +191,10 @@ public class UserController {
public ResponseEntity<Object> getAdminInfo(@RequestBody List<Long> roleIds) { public ResponseEntity<Object> getAdminInfo(@RequestBody List<Long> roleIds) {
return new ResponseEntity<>(userService.findByManager(roleIds), HttpStatus.OK); return new ResponseEntity<>(userService.findByManager(roleIds), HttpStatus.OK);
} }
@ApiOperation("查询所有的组长")
@GetMapping(value = "/leader")
public ResponseEntity<Object> getLeaderList() {
return new ResponseEntity<>(userService.queryRoleUser(RoleNumberConstants.MINUS_NINE_NUMBER), HttpStatus.OK);
}
} }

@ -1,16 +1,13 @@
package com.baiye.modules.system.service; package com.baiye.modules.system.service;
import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.OrganizeQueryCriteria;
import com.baiye.modules.system.domain.Organize;
import com.baiye.modules.system.service.dto.OrganizeMemberDistributionDTO; import com.baiye.modules.system.service.dto.OrganizeMemberDistributionDTO;
import com.baiye.modules.system.service.dto.OrganizeSaveDTO; import com.baiye.modules.system.service.dto.OrganizeSaveDTO;
import com.baiye.modules.system.service.dto.OrganizeDto; import com.baiye.modules.system.service.dto.OrganizeDto;
import com.baiye.modules.system.service.dto.OrganizeQueryCriteria;
import com.baiye.modules.system.service.dto.UserDto; import com.baiye.modules.system.service.dto.UserDto;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -34,14 +31,7 @@ public interface OrganizeService {
* *
* @return * @return
*/ */
HashMap<String, Object> queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable); Map<String, Object> queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable);
/**
*
* @param organize
* @return
*/
ResponseEntity<Object> updateOrganize(Organize organize);
/** /**
* *

@ -134,4 +134,11 @@ public interface UserService {
* @return * @return
*/ */
List<UserDto> findByManager(List<Long> roleIds); List<UserDto> findByManager(List<Long> roleIds);
/**
*
* @param roleId
* @return
*/
List<UserDto> queryRoleUser(Long roleId);
} }

@ -7,8 +7,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Transient;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -56,4 +54,10 @@ public class OrganizeDto implements Serializable {
@ApiModelProperty(value = "小组下的任务信息") @ApiModelProperty(value = "小组下的任务信息")
private Task organizeTask; private Task organizeTask;
@ApiModelProperty(value = "组长标签")
private List<String> organizeLabel;
@ApiModelProperty(value = "返回的任务内管理员定义标签")
private List<String> baseLabel;
} }

@ -1,13 +1,12 @@
package com.baiye.modules.system.service.dto; package com.baiye.modules.system.service.dto;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.sun.istack.internal.NotNull; import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List; import java.util.List;

@ -1,6 +1,5 @@
package com.baiye.modules.system.service.dto; package com.baiye.modules.system.service.dto;
import com.baiye.modules.system.domain.Organize; import com.baiye.modules.system.domain.Organize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@ -33,4 +32,6 @@ public class TaskDto implements Serializable {
private Date updateTime; private Date updateTime;
private List<Organize> organizeList; private List<Organize> organizeList;
private List<String> baseLabel;
} }

@ -1,7 +1,6 @@
package com.baiye.modules.system.service.impl; package com.baiye.modules.system.service.impl;
import cn.hutool.json.JSONUtil; import com.baiye.constant.RoleNumberConstants;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.feign.AssignDataClient; import com.baiye.feign.AssignDataClient;
import com.baiye.feign.SourceClueClient; import com.baiye.feign.SourceClueClient;
import com.baiye.http.CommonResponse; import com.baiye.http.CommonResponse;
@ -9,28 +8,27 @@ import com.baiye.http.ResponseCode;
import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.ClueQueryCriteria;
import com.baiye.model.dto.DistributeDTO; import com.baiye.model.dto.DistributeDTO;
import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.model.dto.DistributeResponseDTO;
import com.baiye.model.dto.OrganizeQueryCriteria;
import com.baiye.modules.system.domain.*; import com.baiye.modules.system.domain.*;
import com.baiye.modules.system.repository.OrganizeRepository; import com.baiye.modules.system.repository.OrganizeRepository;
import com.baiye.modules.system.repository.OrganizeUserRepository; import com.baiye.modules.system.repository.OrganizeUserRepository;
import com.baiye.modules.system.repository.TaskRepository; import com.baiye.modules.system.repository.TaskRepository;
import com.baiye.modules.system.service.LabelService;
import com.baiye.modules.system.service.OrganizeService; import com.baiye.modules.system.service.OrganizeService;
import com.baiye.modules.system.service.UserService; import com.baiye.modules.system.service.UserService;
import com.baiye.modules.system.service.dto.*; import com.baiye.modules.system.service.dto.*;
import com.baiye.modules.system.service.mapstruct.OrganizeMapper; import com.baiye.modules.system.service.mapstruct.OrganizeMapper;
import com.baiye.modules.system.service.mapstruct.OrganizeUserMapper; import com.baiye.modules.system.service.mapstruct.OrganizeUserMapper;
import com.baiye.util.PageUtil;
import com.baiye.util.QueryHelp; import com.baiye.util.QueryHelp;
import com.baiye.util.SecurityUtils; import com.baiye.util.SecurityUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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.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.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*; import java.util.*;
@ -47,8 +45,6 @@ public class OrganizeServiceImpl implements OrganizeService {
private final SourceClueClient sourceClueClient; private final SourceClueClient sourceClueClient;
private final TaskRepository taskRepository; private final TaskRepository taskRepository;
private final UserService userService; private final UserService userService;
private final LabelService labelService;
/** /**
* *
@ -75,8 +71,13 @@ public class OrganizeServiceImpl implements OrganizeService {
organizeUserRepository.save(organizeUser); organizeUserRepository.save(organizeUser);
deptIds.add(saveOrganize.getId()); deptIds.add(saveOrganize.getId());
clueList = sourceClueClient.queryList(organizeSaveDTO.getTaskId()).getBody(); clueList = sourceClueClient.queryList(organizeSaveDTO.getTaskId()).getBody();
//任务状态更新 //任务状态更新,创建标签
taskRepository.updateIsDistribution(1, organizeSaveDTO.getTaskId()); Task task = taskRepository.findById(organizeSaveDTO.getTaskId()).orElseGet(Task::new);
// 标签去重
List<String> labelNameList = organizeSaveDTO.getLabelNameList();
List<String> labelName = new ArrayList<>(new TreeSet<String>(labelNameList));
task.setBaseLabel(labelName);
task.setIsDistribution(1);
weights.add(saveOrganize.getRatio()); weights.add(saveOrganize.getRatio());
} }
//总管理员给小组分配任务 //总管理员给小组分配任务
@ -89,21 +90,11 @@ public class OrganizeServiceImpl implements OrganizeService {
if (data.size() > 0){ if (data.size() > 0){
for (DistributeResponseDTO distributeResponseDTO : data) { for (DistributeResponseDTO distributeResponseDTO : data) {
sourceClueClient.batchUpdateOrganize(distributeResponseDTO); sourceClueClient.batchUpdateOrganize(distributeResponseDTO);
//获取小组此次获取的数据 //更新小组此次获取的数据条数
int organizeTaskNum = distributeResponseDTO.getResponseList().size(); int organizeTaskNum = distributeResponseDTO.getResponseList().size();
organizeRepository.updateByOrganizeTaskNum(distributeResponseDTO.getDeptId(),organizeTaskNum); organizeRepository.updateByOrganizeTaskNum(distributeResponseDTO.getDeptId(),organizeTaskNum);
} }
} }
//创建标签
List<String> labelNameList = organizeSaveDTO.getLabelNameList();
if (labelNameList.size() > 0) {
for (String labelName : labelNameList) {
Label label = new Label();
label.setLabelName(labelName);
label.setLevel(DefaultNumberConstants.ONE_NUMBER);
labelService.create(label);
}
}
return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK); return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK);
} }
@ -128,41 +119,30 @@ public class OrganizeServiceImpl implements OrganizeService {
* *
*/ */
@Override @Override
public HashMap<String, Object> queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) { public Map<String, Object> queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) {
List<OrganizeDto> organizeDtoList = new ArrayList<>();
Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); Sort sort = Sort.by(Sort.Direction.ASC, "createTime");
HashMap<String, Object> hashMap = new HashMap<>(); // 查询用户下的所有组ID
List<List<OrganizeDto>> organizeDtoList = new ArrayList<>();
Long userId = SecurityUtils.getCurrentUserId();
OrganizeUserQueryCriteria organizeUserQueryCriteria = new OrganizeUserQueryCriteria(); OrganizeUserQueryCriteria organizeUserQueryCriteria = new OrganizeUserQueryCriteria();
organizeUserQueryCriteria.setUserId(userId); organizeUserQueryCriteria.setUserId(SecurityUtils.getCurrentUserId());
Page<OrganizeUser> organizeUserRepositoryAll = organizeUserRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeUserQueryCriteria, criteriaBuilder), pageable); List<OrganizeUserDto> organizeUserDtos = organizeUserMapper.toDto(organizeUserRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder), sort));
Page<OrganizeUserDto> map = organizeUserRepositoryAll.map(organizeUserMapper::toDto); for (OrganizeUserDto organizeUserDto : organizeUserDtos) {
if (!map.isEmpty()) {
for (OrganizeUserDto organizeUserDto : map) {
if (organizeUserDto.getIsLeader()) { if (organizeUserDto.getIsLeader()) {
//查询组并且是组长的组信息
organizeQueryCriteria.setId(organizeUserDto.getOrganizeId()); organizeQueryCriteria.setId(organizeUserDto.getOrganizeId());
// 查询组长的组
List<OrganizeDto> organizeDtos = organizeMapper.toDto(organizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder),sort)); List<OrganizeDto> organizeDtos = organizeMapper.toDto(organizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder),sort));
if (organizeDtos.size() > 0) { //返回信息中加入任务(管理员)标签信息
organizeDtoList.add(organizeDtos); for (OrganizeDto organizeDto : organizeDtos) {
} Task task = taskRepository.findById(organizeDto.getTaskId()).orElseGet(Task::new);
} organizeDto.setBaseLabel(task.getBaseLabel());
} }
hashMap.put("content", organizeDtoList); organizeDtoList.addAll(organizeDtos);
hashMap.put("totalElements", organizeDtoList.size());
return hashMap;
} }
return null;
} }
return PageUtil.toPage(
/** PageUtil.toPage(pageable.getPageNumber(),pageable.getPageSize(), organizeDtoList),
* organizeDtoList.size()
*/ );
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseEntity<Object> updateOrganize(Organize organize) {
organizeRepository.save(organize);
return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK);
} }
/** /**
@ -173,30 +153,29 @@ public class OrganizeServiceImpl implements OrganizeService {
public ResponseEntity<Object> saveMemberDistribution(OrganizeMemberDistributionDTO organizeMemberDistributionDTO) { public ResponseEntity<Object> saveMemberDistribution(OrganizeMemberDistributionDTO organizeMemberDistributionDTO) {
List<Long> userIds = organizeMemberDistributionDTO.getUserIds(); List<Long> userIds = organizeMemberDistributionDTO.getUserIds();
Long organizeId = organizeMemberDistributionDTO.getOrganizeId(); Long organizeId = organizeMemberDistributionDTO.getOrganizeId();
// 修改组内标签
if (!CollectionUtils.isEmpty(organizeMemberDistributionDTO.getSourceLabel())) {
organizeRepository.updateOrganizeLabelById
(JSONUtil.toJsonStr(organizeMemberDistributionDTO.getSourceLabel()), organizeId);
}
// 新增小组成员 // 新增小组成员
for (Long userId : userIds) { for (Long userId : userIds) {
OrganizeUser organizeUser = new OrganizeUser(); OrganizeUser organizeUser = new OrganizeUser();
organizeUser.setUserId(userId); organizeUser.setUserId(userId);
organizeUser.setOrganizeId(organizeId); organizeUser.setOrganizeId(organizeId);
organizeUser.setCreateBy(SecurityUtils.getCurrentUserId());
organizeUserRepository.save(organizeUser); organizeUserRepository.save(organizeUser);
} }
//分配组员资源 //分配组员资源
ClueQueryCriteria clueQueryCriteria = new ClueQueryCriteria(); ClueQueryCriteria clueQueryCriteria = new ClueQueryCriteria();
clueQueryCriteria.setOrganizeId(organizeId); clueQueryCriteria.setOrganizeId(organizeId);
clueQueryCriteria.setUserIds(userIds); clueQueryCriteria.setUserIds(userIds);
//调用资源服务 //修改资源服务信息
sourceClueClient.queryOrganizeIdList(clueQueryCriteria); sourceClueClient.queryOrganizeIdList(clueQueryCriteria);
//更新小组任务信息 //修改小组任务信息
Organize updateOrganize = organizeRepository.findById(organizeMemberDistributionDTO.getOrganizeId()).orElseGet(Organize::new); Organize updateOrganize = organizeRepository.findById(organizeMemberDistributionDTO.getOrganizeId()).orElseGet(Organize::new);
updateOrganize.setTaskStatus(1); updateOrganize.setTaskStatus(1);
updateOrganize.setBeginTime(organizeMemberDistributionDTO.getBeginTime()); updateOrganize.setBeginTime(organizeMemberDistributionDTO.getBeginTime());
updateOrganize.setEndTime(organizeMemberDistributionDTO.getEndTime()); updateOrganize.setEndTime(organizeMemberDistributionDTO.getEndTime());
//标签去重
List<String> sourceLabelList = organizeMemberDistributionDTO.getSourceLabel();
List<String> sourceLabe = new ArrayList<>(new TreeSet<String>(sourceLabelList));
updateOrganize.setOrganizeLabel(sourceLabe);
organizeRepository.save(updateOrganize); organizeRepository.save(updateOrganize);
return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK); return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK);
} }
@ -206,9 +185,8 @@ public class OrganizeServiceImpl implements OrganizeService {
*/ */
@Override @Override
public List<UserDto> selectMemberList(OrganizeQueryCriteria organizeQueryCriteria) { public List<UserDto> selectMemberList(OrganizeQueryCriteria organizeQueryCriteria) {
// TODO
//查询所有用户 //查询所有用户
List<UserDto> userDtoList = userService.queryAll(new UserQueryCriteria()); List<UserDto> userDtoList = userService.queryRoleUser(RoleNumberConstants.MINUS_FIVE_NUMBER);
// 任务内组员用户ID集合 // 任务内组员用户ID集合
List<Long> userList = new ArrayList<>(); List<Long> userList = new ArrayList<>();
//查询任务下的所有组员用户 //查询任务下的所有组员用户
@ -219,7 +197,7 @@ public class OrganizeServiceImpl implements OrganizeService {
userList.add(organizeUser.getUserId()); userList.add(organizeUser.getUserId());
} }
} }
// 去除任务内重复的用户 // 去除同一个任务内重复的用户
Iterator<UserDto> it = userDtoList.iterator(); Iterator<UserDto> it = userDtoList.iterator();
while(it.hasNext()){ while(it.hasNext()){
Long id = it.next().getId(); Long id = it.next().getId();

@ -65,6 +65,7 @@ public class TaskServiceImpl implements TaskService {
Page<Task> taskRepositoryAll = taskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, taskQueryCriteria, criteriaBuilder), pageable); Page<Task> taskRepositoryAll = taskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, taskQueryCriteria, criteriaBuilder), pageable);
Page<TaskDto> map = taskRepositoryAll.map(taskMapper::toDto); Page<TaskDto> map = taskRepositoryAll.map(taskMapper::toDto);
for (TaskDto taskDto : map) { for (TaskDto taskDto : map) {
//任务下的小组信息加入
selectOrganizeUser(taskDto); selectOrganizeUser(taskDto);
} }
return PageUtil.toPage(map); return PageUtil.toPage(map);

@ -15,7 +15,6 @@
*/ */
package com.baiye.modules.system.service.impl; package com.baiye.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.baiye.config.properties.FileProperties; import com.baiye.config.properties.FileProperties;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
@ -95,6 +94,12 @@ public class UserServiceImpl implements UserService {
return userMapper.toDto(users); return userMapper.toDto(users);
} }
@Override
public List<UserDto> queryRoleUser(Long roleId) {
List<User> userList = userRepository.findByRoleId(roleId);
return userMapper.toDto(userList);
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void create(User resources) { public void create(User resources) {

@ -0,0 +1,22 @@
package com.baiye.feign;
import com.baiye.feign.fallback.OrganizeClientFallback;
import com.baiye.model.dto.OrganizeQueryCriteria;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "ad-platform-management",fallback = OrganizeClientFallback.class)
public interface OrganizeClient {
String PAY_PREFIX = "/api/organize";
/**
*
* @param organizeQueryCriteria
* @return
*/
@PostMapping(value = PAY_PREFIX + "/queryAll")
ResponseEntity<Object> queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria);
}

@ -1,6 +1,7 @@
package com.baiye.feign; package com.baiye.feign;
import com.baiye.feign.fallback.TaskClientFallback; import com.baiye.feign.fallback.TaskClientFallback;
import com.baiye.model.dto.TaskQueryCriteria;
import com.baiye.module.entity.Task; import com.baiye.module.entity.Task;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -19,4 +20,7 @@ public interface TaskClient {
*/ */
@PostMapping(value = PAY_PREFIX + "/saveTask") @PostMapping(value = PAY_PREFIX + "/saveTask")
ResponseEntity<Object> saveTask(@RequestBody Task task); ResponseEntity<Object> saveTask(@RequestBody Task task);
@PostMapping(PAY_PREFIX + "/query")
ResponseEntity<Object> query(@RequestBody TaskQueryCriteria taskQueryCriteria);
} }

@ -0,0 +1,14 @@
package com.baiye.feign.fallback;
import com.baiye.feign.OrganizeClient;
import com.baiye.model.dto.OrganizeQueryCriteria;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
@Component
public class OrganizeClientFallback implements OrganizeClient {
@Override
public ResponseEntity<Object> queryAll(OrganizeQueryCriteria organizeQueryCriteria) {
return null;
}
}

@ -1,6 +1,7 @@
package com.baiye.feign.fallback; package com.baiye.feign.fallback;
import com.baiye.feign.TaskClient; import com.baiye.feign.TaskClient;
import com.baiye.model.dto.TaskQueryCriteria;
import com.baiye.module.entity.Task; import com.baiye.module.entity.Task;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -11,4 +12,9 @@ public class TaskClientFallback implements TaskClient {
public ResponseEntity<Object> saveTask(Task task) { public ResponseEntity<Object> saveTask(Task task) {
return null; return null;
} }
@Override
public ResponseEntity<Object> query(TaskQueryCriteria taskQueryCriteria) {
return null;
}
} }

@ -5,7 +5,7 @@ import com.baiye.http.ResponseCode;
import com.baiye.model.dto.ClueDto; import com.baiye.model.dto.ClueDto;
import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.ClueQueryCriteria;
import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.model.dto.DistributeResponseDTO;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.ClueMiddle;
import com.baiye.module.service.ClueService; import com.baiye.module.service.ClueService;
import com.baiye.module.service.dto.ClueRecordCriteria; import com.baiye.module.service.dto.ClueRecordCriteria;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -72,6 +73,13 @@ public class ClueController {
return new ResponseEntity<>(clueService.query(clueQueryCriteria),HttpStatus.OK); return new ResponseEntity<>(clueService.query(clueQueryCriteria),HttpStatus.OK);
} }
@ApiOperation("更新资源信息")
@PostMapping("/update")
public CommonResponse<Object> update(@Validated @RequestBody ClueMiddle clueMiddle){
clueService.update(clueMiddle);
return CommonResponse.createBySuccess();
}
@ApiOperation("查询组员资源总数") @ApiOperation("查询组员资源总数")
@GetMapping("/queryMemberNum") @GetMapping("/queryMemberNum")
public ResponseEntity<Object> queryMemberNum(@RequestParam("memberId") Long memberId){ public ResponseEntity<Object> queryMemberNum(@RequestParam("memberId") Long memberId){

@ -0,0 +1,99 @@
package com.baiye.module.dao;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baiye.model.dto.ClueDto;
import com.baiye.model.dto.ClueQueryCriteria;
import org.apache.commons.lang.StringUtils;
import org.hibernate.query.internal.NativeQueryImpl;
import org.hibernate.transform.Transformers;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.Transactional;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
public class ClueJpa {
@PersistenceContext
EntityManager entityManager;
@Transactional(rollbackOn = Exception.class)
public List<ClueDto> getConfirmReceipt(@RequestBody ClueQueryCriteria clueQueryCriteria) {
StringBuilder sql;
sql = getSql();
String name = clueQueryCriteria.getName();
Integer origin = clueQueryCriteria.getOrigin();
if (StringUtils.isNotBlank(name)){
sql.append("and c.name = :name ");
}
if (origin != null){
sql.append("and c.origin = :origin ");
}
if (clueQueryCriteria.getMemberId() != null){
sql.append("and cm.member_id = :memberId ");
}
if (clueQueryCriteria.getMemberStatus() != null){
sql.append("and cm.member_status = :memberStatus ");
}
sql.append("ORDER BY c.create_time desc" );
Query query = entityManager.createNativeQuery(sql.toString());
if (StringUtils.isNotBlank(name)){
query.setParameter("name", name);
}
if (origin != null){
query.setParameter("origin", origin);
}
if (clueQueryCriteria.getMemberId() != null){
query.setParameter("memberId", clueQueryCriteria.getMemberId());
}
if (clueQueryCriteria.getMemberStatus() != null){
query.setParameter("memberStatus", clueQueryCriteria.getMemberStatus());
}
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List list = query.getResultList();
return getTradeInfo(list);
}
private StringBuilder getSql() {
StringBuilder sql = new StringBuilder();
sql.append("select c.id as id,c.name as name,c.nid as nid,c.wx as wx,c.origin as origin,c.collect_time as collectTime,c.address as address,c.record_id as recordId," +
"c.create_time as createTime,c.remark as remark,cm.member_status as memberStatus,cm.organize_id as organizeId,cm.member_id as memberId,cm.source_label as sourceLabel from tb_clue as c LEFT JOIN tb_clue_middle as cm on c.id = cm.clue_id where 1=1 ");
return sql;
}
private List<ClueDto> getTradeInfo(List list) {
List<ClueDto> clueDtoList = new ArrayList<>();
for (Object obj : list) {
Map row = (Map) obj;
ClueDto clueDto = new ClueDto();
BigInteger id = (BigInteger) row.get("id");
clueDto.setId(id.longValue());
JSONArray sourceLabel = JSONUtil.parseArray(row.get("sourceLabel"));
clueDto.setSourceLabel(sourceLabel);
clueDto.setMemberStatus((Integer) row.get("memberStatus"));
clueDto.setName((String) row.get("name"));
clueDto.setCreateTime((Date) row.get("createTime"));
clueDto.setNid((String) row.get("nid"));
clueDto.setWx((String) row.get("wx"));
clueDto.setAddress((String) row.get("address"));
clueDto.setRemark((String) row.get("remark"));
clueDto.setOrigin((Integer) row.get("origin"));
clueDto.setCollectTime((Date) row.get("collectTime"));
BigInteger organizeId = (BigInteger) row.get("organizeId");
clueDto.setOrganizeId(organizeId.longValue());
BigInteger memberId = (BigInteger) row.get("memberId");
clueDto.setMemberId(memberId.longValue());
clueDtoList.add(clueDto);
}
return clueDtoList;
}
}

@ -0,0 +1,53 @@
package com.baiye.module.dao;
import com.baiye.module.entity.ClueMiddle;
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;
@Repository
public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, JpaSpecificationExecutor<ClueMiddle> {
/**
* id
* @param taskId
* @return
*/
List<ClueMiddle> findByTaskId(Long taskId);
/**
*
* @param id
* @param deptId
*/
@Modifying
@Query(value = " update tb_clue_middle set organize_id = ?2 where clue_id = ?1 ",nativeQuery = true)
void updateOrganizeIdById(Long id,Long deptId);
/**
* id
* @param organizeId
* @return
*/
List<ClueMiddle> findByOrganizeId(Long organizeId);
/**
*
* @param clueId
* @param userId
*/
@Modifying
@Query(value = " update tb_clue_middle set member_id = ?3,member_status = ?2 where clue_id = ?1 ",nativeQuery = true)
void updateUserId(Long clueId, Integer memberStatus,Long userId);
/**
*
* @param memberId
* @return
*/
Long countByMemberId(Long memberId);
}

@ -3,51 +3,9 @@ package com.baiye.module.dao;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 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 org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public interface ClueRepository extends JpaRepository<Clue, Long>, JpaSpecificationExecutor<Clue> { public interface ClueRepository extends JpaRepository<Clue, Long>, JpaSpecificationExecutor<Clue> {
/**
* recordId
* @param recordId
* @return
*/
List<Clue> findByRecordId(Long recordId);
/**
*
* @param id
* @param deptId
*/
@Modifying
@Query(value = " update tb_clue set organize_id = ?2 where id = ?1 ",nativeQuery = true)
void updateOrganizeIdById(Long id,Long deptId);
/**
* id
* @param organizeId
* @return
*/
List<Clue> findByOrganizeId(Long organizeId);
/**
*
* @param clueId
* @param userId
*/
@Modifying
@Query(value = " update tb_clue set member_id = ?3,member_status = ?2 where id = ?1 ",nativeQuery = true)
void updateUserId(Long clueId, Integer memberStatus,Long userId);
/**
*
* @param memberId
* @return
*/
Long countByMemberId(Long memberId);
} }

@ -0,0 +1,56 @@
package com.baiye.module.entity;
import com.baiye.util.JpaConverterListJson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* ClueMiddle
*
* @author yqy
* @date 2021-12-07 10:40:37
*/
@Data
@Entity
@Table(name = "tb_clue_middle")
@ApiModel(value = "ClueMiddle")
public class ClueMiddle{
@Id
@ApiModelProperty(value = "线索id")
@Column(name = "clue_id")
@NotNull
private Long clueId;
@ApiModelProperty(value = "小组id")
@Column(name = "organize_id")
private Long organizeId;
@ApiModelProperty(value = "所属组员id")
@Column(name = "member_id")
private Long memberId;
@ApiModelProperty(value = "任务id")
@Column(name = "task_id")
private Long taskId;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
@Column(name = "member_status")
private Integer memberStatus;
@Convert(converter = JpaConverterListJson.class)
private List<String> sourceLabel;
@ApiModelProperty(value = "创建时间")
@Column(name = "create_time", nullable = true)
@CreationTimestamp
private Date createTime;
}

@ -2,7 +2,6 @@ package com.baiye.module.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.module.constant.FileConstant; import com.baiye.module.constant.FileConstant;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import com.baiye.module.entity.vo.BaseExcelVo; import com.baiye.module.entity.vo.BaseExcelVo;
@ -70,11 +69,10 @@ public class KsExcelListener extends AnalysisEventListener<KsVo> {
clue.setOrigin(baseExcelVo.getOrigin()); clue.setOrigin(baseExcelVo.getOrigin());
clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setRecordId(baseExcelVo.getClueRecordId());
clue.setCreateBy(baseExcelVo.getUserId()); clue.setCreateBy(baseExcelVo.getUserId());
clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER);
clues.add(clue); clues.add(clue);
} }
if (clues.size() > 0) { if (clues.size() > 0) {
clueService.saveClue(clues); clueService.saveClue(clues,baseExcelVo.getTaskId());
} }
} }
} }

@ -6,7 +6,6 @@ import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvRow; import cn.hutool.core.text.csv.CsvRow;
import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.module.constant.FileConstant; import com.baiye.module.constant.FileConstant;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import com.baiye.module.entity.vo.BaseExcelVo; import com.baiye.module.entity.vo.BaseExcelVo;
@ -52,20 +51,20 @@ public class UcCsvListener {
clue.setOrigin(baseExcelVo.getOrigin()); clue.setOrigin(baseExcelVo.getOrigin());
clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setRecordId(baseExcelVo.getClueRecordId());
clue.setCreateBy(baseExcelVo.getUserId()); clue.setCreateBy(baseExcelVo.getUserId());
clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); // clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER);
clues.add(clue); clues.add(clue);
} }
//1000条插入一次 //1000条插入一次
if (clues.size() > FileConstant.ONE_THOUSAND_NUMBER){ if (clues.size() > FileConstant.ONE_THOUSAND_NUMBER){
// if (clues.size() > 2){ // if (clues.size() > 2){
clueService.saveClue(clues); clueService.saveClue(clues,baseExcelVo.getTaskId());
clues.clear(); clues.clear();
} }
index++; index++;
} }
//清除集合数据 //清除集合数据
if (clues.size() > 0) { if (clues.size() > 0) {
clueService.saveClue(clues); clueService.saveClue(clues,baseExcelVo.getTaskId());
} }
} }
} }

@ -2,7 +2,6 @@ package com.baiye.module.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.module.constant.FileConstant; import com.baiye.module.constant.FileConstant;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import com.baiye.module.entity.vo.BaseExcelVo; import com.baiye.module.entity.vo.BaseExcelVo;
@ -65,11 +64,10 @@ public class UcExcelListener extends AnalysisEventListener<UcVo> {
clue.setOrigin(baseExcelVo.getOrigin()); clue.setOrigin(baseExcelVo.getOrigin());
clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setRecordId(baseExcelVo.getClueRecordId());
clue.setCreateBy(baseExcelVo.getUserId()); clue.setCreateBy(baseExcelVo.getUserId());
clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER);
clues.add(clue); clues.add(clue);
} }
if (clues.size() > 0) { if (clues.size() > 0) {
clueService.saveClue(clues); clueService.saveClue(clues,baseExcelVo.getTaskId());
} }
} }
} }

@ -2,7 +2,6 @@ package com.baiye.module.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.module.constant.FileConstant; import com.baiye.module.constant.FileConstant;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import com.baiye.module.entity.vo.BaseExcelVo; import com.baiye.module.entity.vo.BaseExcelVo;
@ -69,11 +68,10 @@ public class ZdyExcelListener extends AnalysisEventListener<ZdyVo> {
clue.setOrigin(baseExcelVo.getOrigin()); clue.setOrigin(baseExcelVo.getOrigin());
clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setRecordId(baseExcelVo.getClueRecordId());
clue.setCreateBy(baseExcelVo.getUserId()); clue.setCreateBy(baseExcelVo.getUserId());
clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER);
clues.add(clue); clues.add(clue);
} }
if (clues.size() > 0) { if (clues.size() > 0) {
clueService.saveClue(clues); clueService.saveClue(clues,baseExcelVo.getTaskId());
} }
} }
} }

@ -4,6 +4,7 @@ import com.baiye.model.dto.ClueDto;
import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.ClueQueryCriteria;
import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.model.dto.DistributeResponseDTO;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import com.baiye.module.entity.ClueMiddle;
import com.baiye.module.entity.ClueRecord; import com.baiye.module.entity.ClueRecord;
import com.baiye.module.service.dto.ClueRecordCriteria; import com.baiye.module.service.dto.ClueRecordCriteria;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@ -18,8 +19,9 @@ public interface ClueService {
/** /**
* *
* @param clueList * @param clueList
* @param taskId
*/ */
void saveClue(List<Clue> clueList); void saveClue(List<Clue> clueList,Long taskId);
/** /**
* id * id
@ -81,4 +83,9 @@ public interface ClueService {
* @param clueQueryCriteria * @param clueQueryCriteria
*/ */
void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria); void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria);
/**
*
*/
void update(ClueMiddle clueMiddle);
} }

@ -0,0 +1,27 @@
package com.baiye.module.service.dto;
import com.baiye.annotation.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*/
@Data
public class ClueMiddleCriteria {
@Query
private Long createBy;
@ApiModelProperty(value = "小组id")
@Query
private Long organizeId;
@ApiModelProperty(value = "所属组员id")
@Query
private Long memberId;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
@Query
private Integer memberStatus;
}

@ -0,0 +1,34 @@
package com.baiye.module.service.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ClueMiddleDto implements Serializable {
@ApiModelProperty(value = "线索id")
private Long clueId;
@ApiModelProperty(value = "小组id")
private Long organizeId;
@ApiModelProperty(value = "所属组员id")
private Long memberId;
@ApiModelProperty(value = "任务id")
private Long taskId;
@ApiModelProperty(value = "组员跟进状态 0无状态 1进行中 2已完成")
private Integer memberStatus;
private List<String> sourceLabel;
}

@ -12,6 +12,7 @@ import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
@Getter @Getter
@Setter @Setter
@ -84,4 +85,13 @@ public class ExcelClueDto implements Serializable {
@ExcelIgnore @ExcelIgnore
private Long taskId; private Long taskId;
@ExcelIgnore
private Object sourceLabel;
@ExcelIgnore
private List<String> organizeLabel;
@ExcelIgnore
private List<String> baseLabel;
} }

@ -1,38 +1,35 @@
package com.baiye.module.service.impl; package com.baiye.module.service.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
import com.baiye.model.dto.ClueDto; import com.baiye.feign.OrganizeClient;
import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.feign.TaskClient;
import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.model.dto.*;
import com.baiye.module.dao.ClueJpa;
import com.baiye.module.dao.ClueMiddleRepository;
import com.baiye.module.dao.ClueRecordRepository; import com.baiye.module.dao.ClueRecordRepository;
import com.baiye.module.dao.ClueRepository; import com.baiye.module.dao.ClueRepository;
import com.baiye.module.entity.Clue; import com.baiye.module.entity.Clue;
import com.baiye.module.entity.ClueMiddle;
import com.baiye.module.entity.ClueRecord; import com.baiye.module.entity.ClueRecord;
import com.baiye.module.service.ClueService; import com.baiye.module.service.ClueService;
import com.baiye.module.service.dto.ClueRecordCriteria; import com.baiye.module.service.dto.*;
import com.baiye.module.service.dto.ClueRecordDto;
import com.baiye.module.service.dto.ExcelClueDto;
import com.baiye.module.service.mapstruct.ClueMapper;
import com.baiye.module.service.mapstruct.ClueRecordMapper; import com.baiye.module.service.mapstruct.ClueRecordMapper;
import com.baiye.util.AverageDataUtil; import com.baiye.util.AverageDataUtil;
import com.baiye.util.ExportExcelUtil; import com.baiye.util.ExportExcelUtil;
import com.baiye.util.PageUtil; import com.baiye.util.PageUtil;
import com.baiye.util.QueryHelp; import com.baiye.util.QueryHelp;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
@Service @Service
@Slf4j @Slf4j
@ -41,26 +38,38 @@ public class ClueServiceImpl implements ClueService {
private final ClueRepository clueRepository; private final ClueRepository clueRepository;
private final ClueRecordRepository clueRecordRepository; private final ClueRecordRepository clueRecordRepository;
private final ClueMapper clueMapper;
private final ClueRecordMapper clueRecordMapper; private final ClueRecordMapper clueRecordMapper;
private final ClueMiddleRepository clueMiddleRepository;
private final ClueJpa clueJpa;
private final OrganizeClient organizeClient;
private final TaskClient taskClient;
@Override @Override
public void saveClue(List<Clue> clueList) { public void saveClue(List<Clue> clueList,Long taskId) {
if (clueList.size() > 0){ if (clueList.size() > 0){
clueRepository.saveAll(clueList); List<Clue> clueListAll = clueRepository.saveAll(clueList);
//插入中间表数据
for (Clue clue : clueListAll) {
ClueMiddle clueMiddle = new ClueMiddle();
clueMiddle.setClueId(clue.getId());
clueMiddle.setTaskId(taskId);
clueMiddle.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER);
clueMiddleRepository.save(clueMiddle);
}
} }
} }
/**
* id
*/
@Override @Override
public List<Long> queryList(Long taskId) { public List<Long> queryList(Long taskId) {
List<Long> clueLists = new ArrayList<>(); List<Long> clueLists = new ArrayList<>();
List<ClueRecord> clueRecordList = clueRecordRepository.findByTaskId(taskId); List<ClueMiddle> clueMiddleList = clueMiddleRepository.findByTaskId(taskId);
if (clueRecordList.size() > 0) { if (clueMiddleList.size() > 0) {
for (ClueRecord clueRecord : clueRecordList) { for (ClueMiddle clueMiddle : clueMiddleList) {
List<Clue> clueList = clueRepository.findByRecordId(clueRecord.getId()); // Clue clue = clueRepository.findById(clueMiddle.getClueId()).orElseGet(Clue::new);
for (Clue clue : clueList) { clueLists.add(clueMiddle.getClueId());
clueLists.add(clue.getId());
}
} }
return clueLists; return clueLists;
} }
@ -73,25 +82,31 @@ public class ClueServiceImpl implements ClueService {
return clueAll; return clueAll;
} }
/**
*
*/
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void batchUpdateOrganize(DistributeResponseDTO distributeResponseDTO) { public void batchUpdateOrganize(DistributeResponseDTO distributeResponseDTO) {
List<Long> responseList = distributeResponseDTO.getResponseList(); List<Long> responseList = distributeResponseDTO.getResponseList();
Long deptId = distributeResponseDTO.getDeptId(); Long deptId = distributeResponseDTO.getDeptId();
for (Long id : responseList) { for (Long id : responseList) {
clueRepository.updateOrganizeIdById(id,deptId); clueMiddleRepository.updateOrganizeIdById(id,deptId);
} }
} }
/**
* id
*/
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void queryOrganizeIdList(ClueQueryCriteria clueQueryCriteria) { public void queryOrganizeIdList(ClueQueryCriteria clueQueryCriteria) {
//资源id集合 //资源id集合
List<Long> clueIds = new ArrayList<>(); List<Long> clueIds = new ArrayList<>();
//查询此小组下的所有资源id //查询此小组下的所有资源id
List<Clue> clueList = clueRepository.findByOrganizeId(clueQueryCriteria.getOrganizeId()); List<ClueMiddle> clueMiddleList = clueMiddleRepository.findByOrganizeId(clueQueryCriteria.getOrganizeId());
for (Clue clue : clueList) { for (ClueMiddle clueMiddle : clueMiddleList) {
clueIds.add(clue.getId()); clueIds.add(clueMiddle.getClueId());
} }
//小组内资源分配 //小组内资源分配
//Map<Long, List<Long>>用户id -> 资源ID集合 //Map<Long, List<Long>>用户id -> 资源ID集合
@ -101,7 +116,7 @@ public class ClueServiceImpl implements ClueService {
for (Long userId : map.keySet()) { for (Long userId : map.keySet()) {
List<Long> userIdList = map.get(userId); List<Long> userIdList = map.get(userId);
for (Long clueId : userIdList) { for (Long clueId : userIdList) {
clueRepository.updateUserId(clueId, DefaultNumberConstants.ONE_NUMBER, userId); clueMiddleRepository.updateUserId(clueId, DefaultNumberConstants.ONE_NUMBER, userId);
} }
} }
} }
@ -112,15 +127,33 @@ public class ClueServiceImpl implements ClueService {
*/ */
@Override @Override
public Map<String,Object> queryAll(ClueQueryCriteria clueQueryCriteria ,Pageable pageable) { public Map<String,Object> queryAll(ClueQueryCriteria clueQueryCriteria ,Pageable pageable) {
// Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); if (clueQueryCriteria.getMemberId() != null) {
// Pageable pageable = PageRequest.of(clueQueryCriteria.getPage(), clueQueryCriteria.getSize(),sort); List<ClueDto> clueDtoList = clueJpa.getConfirmReceipt(clueQueryCriteria);
Page<Clue> cluePage = clueRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueQueryCriteria, criteriaBuilder), pageable); for (ClueDto clueDto : clueDtoList) {
Page<ClueDto> map = cluePage.map(clueMapper::toDto); OrganizeQueryCriteria organizeQueryCriteria = new OrganizeQueryCriteria();
for (ClueDto clueDto : map) { organizeQueryCriteria.setId(clueDto.getOrganizeId());
ClueRecord clueRecord = clueRecordRepository.findById(clueDto.getRecordId()).orElseGet(ClueRecord::new); List list = (List)organizeClient.queryAll(organizeQueryCriteria).getBody();
clueDto.setTaskId(clueRecord.getTaskId()); for (Object obj : list) {
JSONObject organizeDto = JSONUtil.parseObj(obj);
List<String> organizeLabel = (List<String>)organizeDto.get("organizeLabel");
clueDto.setOrganizeLabel(organizeLabel);
}
TaskQueryCriteria taskQueryCriteria = new TaskQueryCriteria();
taskQueryCriteria.setId(clueDto.getTaskId());
List taskList = (List)taskClient.query(taskQueryCriteria).getBody();
for (Object obj : taskList) {
JSONObject taskDto = JSONUtil.parseObj(obj);
List<String> baseLabel = (List<String>)taskDto.get("baseLabel");
clueDto.setBaseLabel(baseLabel);
}
}
return PageUtil.toPage(
PageUtil.toPage(pageable.getPageNumber(),pageable.getPageSize(), clueDtoList),
clueDtoList.size()
);
} }
return PageUtil.toPage(map); return null;
} }
/** /**
@ -130,9 +163,11 @@ public class ClueServiceImpl implements ClueService {
*/ */
@Override @Override
public List<ClueDto> query(ClueQueryCriteria clueQueryCriteria) { public List<ClueDto> query(ClueQueryCriteria clueQueryCriteria) {
Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); if (clueQueryCriteria.getMemberId() != null) {
List<ClueDto> clueDtos = clueMapper.toDto(clueRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueQueryCriteria, criteriaBuilder), sort)); List<ClueDto> clueDtoList = clueJpa.getConfirmReceipt(clueQueryCriteria);
return clueDtos; return clueDtoList;
}
return null;
} }
/** /**
@ -140,7 +175,7 @@ public class ClueServiceImpl implements ClueService {
*/ */
@Override @Override
public Long queryMemberNum(Long memberId) { public Long queryMemberNum(Long memberId) {
return clueRepository.countByMemberId(memberId); return clueMiddleRepository.countByMemberId(memberId);
} }
/** /**
@ -155,12 +190,32 @@ public class ClueServiceImpl implements ClueService {
} }
} }
/**
* ()
*/
@Override @Override
public void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria) { public void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria) {
if (clueQueryCriteria.getMemberId() != null) { if (clueQueryCriteria.getMemberId() != null) {
Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); List<ClueDto> clueDtoList = clueJpa.getConfirmReceipt(clueQueryCriteria);
List<ClueDto> clueDtos = clueMapper.toDto(clueRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueQueryCriteria, criteriaBuilder), sort)); ExportExcelUtil.downloadEasyExcel(response, ExcelClueDto.class,clueDtoList);
ExportExcelUtil.downloadEasyExcel(response, ExcelClueDto.class,clueDtos); }
} }
/**
*
*/
@Override
public void update(ClueMiddle clueMiddle) {
ClueMiddle clueMiddleOne = clueMiddleRepository.findById(clueMiddle.getClueId()).orElseGet(ClueMiddle::new);
if (clueMiddle.getSourceLabel() != null) {
List<String> sourceLabelList = clueMiddle.getSourceLabel();
// 标签去重
List<String> sourceLabel = new ArrayList<String>(new TreeSet<String>(sourceLabelList));
clueMiddleOne.setSourceLabel(sourceLabel);
}
if (clueMiddle.getMemberStatus() != null) {
clueMiddleOne.setMemberStatus(clueMiddle.getMemberStatus());
}
clueMiddleRepository.save(clueMiddleOne);
} }
} }

@ -0,0 +1,11 @@
package com.baiye.module.service.mapstruct;
import com.baiye.model.base.BaseMapper;
import com.baiye.module.entity.ClueMiddle;
import com.baiye.module.service.dto.ClueMiddleDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ClueMiddleMapper extends BaseMapper<ClueMiddleDto, ClueMiddle> {
}

@ -41,6 +41,7 @@ public class FileAnalysisTask {
baseExcelVo.setUserId(clueRecord.getCreateBy()); baseExcelVo.setUserId(clueRecord.getCreateBy());
baseExcelVo.setClueRecordId(clueRecord.getId()); baseExcelVo.setClueRecordId(clueRecord.getId());
baseExcelVo.setOrigin(clueRecord.getUploadType()); baseExcelVo.setOrigin(clueRecord.getUploadType());
baseExcelVo.setTaskId(clueRecord.getTaskId());
FileInputStream file = new FileInputStream(clueRecord.getNewFileUrl()); FileInputStream file = new FileInputStream(clueRecord.getNewFileUrl());
switch (clueRecord.getUploadType()){ switch (clueRecord.getUploadType()){

@ -3,7 +3,7 @@ package com.baiye.util;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.sun.istack.internal.NotNull; import javax.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;

Loading…
Cancel
Save