diff --git a/ad-platform-common/src/main/java/com/baiye/constant/RoleNumberConstants.java b/ad-platform-common/src/main/java/com/baiye/constant/RoleNumberConstants.java new file mode 100644 index 00000000..c3660a7e --- /dev/null +++ b/ad-platform-common/src/main/java/com/baiye/constant/RoleNumberConstants.java @@ -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; +} diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java index 52e5fb28..4cf21276 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java @@ -8,6 +8,7 @@ import lombok.Setter; import java.io.Serializable; import java.util.Date; +import java.util.List; @Getter @Setter @@ -47,9 +48,6 @@ public class ClueDto implements Serializable { @ApiModelProperty(value = "所属组员id") private Long memberId; - @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") - private Integer memberStatus; - @ApiModelProperty(value = "创建人") private Long createBy; @@ -63,4 +61,16 @@ public class ClueDto implements Serializable { private String remark; private Long taskId; + + @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") + private Integer memberStatus; + + @ApiModelProperty(value = "标签") + private Object sourceLabel; + + @ApiModelProperty(value = "组长标签") + private List organizeLabel; + + @ApiModelProperty(value = "任务(管理员)标签") + private List baseLabel; } diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java index 64812f8a..99fbab62 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java @@ -18,11 +18,9 @@ public class ClueQueryCriteria { private Long id; @ApiModelProperty(value = "小组id") - @Query private Long organizeId; @ApiModelProperty(value = "所属组员id") - @Query private Long memberId; @ApiModelProperty(value = "数据来源 0:自定义模板 1:UC 2:快手 3:抖音 4:百度") @@ -34,7 +32,6 @@ public class ClueQueryCriteria { private String name; @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") - @Query private Integer memberStatus; @ApiModelProperty(value = "选取的组员ID") diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeQueryCriteria.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/OrganizeQueryCriteria.java similarity index 79% rename from manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeQueryCriteria.java rename to ad-platform-pojo/src/main/java/com/baiye/model/dto/OrganizeQueryCriteria.java index ff3a21ae..3254b727 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeQueryCriteria.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/OrganizeQueryCriteria.java @@ -1,11 +1,9 @@ -package com.baiye.modules.system.service.dto; +package com.baiye.model.dto; import com.baiye.annotation.Query; -import com.baiye.modules.system.domain.Organize; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.persistence.Column; import java.sql.Timestamp; import java.util.List; @@ -36,6 +34,4 @@ public class OrganizeQueryCriteria { @ApiModelProperty(value = "标签名称") private List labelNameList; - - private List organizeList; } diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClue.java b/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClue.java index 5ae4bc4b..18b213a3 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClue.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClue.java @@ -57,17 +57,17 @@ public class BaseClue implements Serializable { @Column(name = "record_id") private Long recordId; - @ApiModelProperty(value = "小组id") - @Column(name = "organize_id") - private Long organizeId; - - @ApiModelProperty(value = "所属组员id") - @Column(name = "member_id") - private Long memberId; - - @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") - @Column(name = "member_status") - private Integer memberStatus; +// @ApiModelProperty(value = "小组id") +// @Column(name = "organize_id") +// private Long organizeId; +// +// @ApiModelProperty(value = "所属组员id") +// @Column(name = "member_id") +// private Long memberId; + +// @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") +// @Column(name = "member_status") +// private Integer memberStatus; @ApiModelProperty(value = "创建人") @Column(name = "create_by") @@ -87,7 +87,7 @@ public class BaseClue implements Serializable { @Column(name = "remark") private String remark; - @Convert(converter = JpaConverterListJson.class) - private List sourceLabel; +// @Convert(converter = JpaConverterListJson.class) +// private List sourceLabel; } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java index 544d70a6..0be4f6c7 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java @@ -127,6 +127,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() .antMatchers( "/api/users/admin").permitAll() .antMatchers( "/api/task/query").permitAll() + .antMatchers( "/api/organize/queryAll").permitAll() // 自定义匿名访问所有url放行:允许匿名和带Token访问,细腻化到每个 Request 类型 // GET .antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll() diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Organize.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Organize.java index 6be5f563..acda6f8d 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Organize.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Organize.java @@ -1,6 +1,7 @@ package com.baiye.modules.system.domain; import com.baiye.modules.system.service.dto.UserDto; +import com.baiye.util.JpaConverterListJson; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.persistence.*; @@ -89,6 +90,10 @@ public class Organize implements Serializable { @Column(name = "remark") private String remark; + @ApiModelProperty(value = "组长标签") + @Convert(converter = JpaConverterListJson.class) + private List organizeLabel; + @Transient diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/OrganizeUser.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/OrganizeUser.java index ed45738e..25b1b42b 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/OrganizeUser.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/OrganizeUser.java @@ -3,15 +3,12 @@ package com.baiye.modules.system.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.persistence.*; -import lombok.EqualsAndHashCode; import lombok.Data; import org.hibernate.annotations.CreationTimestamp; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; -import java.util.List; - /** * OrganizeUser @@ -63,5 +60,4 @@ public class OrganizeUser implements Serializable { @ApiModelProperty(value = "更新人") @Column(name = "update_by") private Long updateBy; - } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/OrganizeController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/OrganizeController.java index f62f902b..8f99c323 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/OrganizeController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/OrganizeController.java @@ -2,11 +2,11 @@ package com.baiye.modules.system.rest; import com.baiye.http.CommonResponse; 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.OrganizeSaveDTO; import com.baiye.modules.system.service.OrganizeService; -import com.baiye.modules.system.service.dto.OrganizeQueryCriteria; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -16,6 +16,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * @author YQY * @date 2021-12-13 @@ -36,7 +38,7 @@ public class OrganizeController { @ApiOperation("查询组") @PostMapping("/queryAll") - public ResponseEntity queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria){ + public ResponseEntity> queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria){ return new ResponseEntity<>(organizeService.queryAll(organizeQueryCriteria),HttpStatus.OK); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java index 7b7aa7ae..dff4a1d9 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java @@ -17,6 +17,7 @@ package com.baiye.modules.system.rest; import cn.hutool.core.collection.CollectionUtil; import com.baiye.config.properties.RsaProperties; +import com.baiye.constant.RoleNumberConstants; import com.baiye.exception.BadRequestException; import com.baiye.modules.system.domain.Dept; import com.baiye.modules.system.domain.User; @@ -178,6 +179,7 @@ public class UserController { */ private void checkLevel(User resources) { Integer currentLevel = Collections.min(roleService.findByUsersId(SecurityUtils.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); + Integer optLevel = roleService.findByRoles(resources.getRoles()); if (currentLevel > optLevel) { throw new BadRequestException("角色权限不足"); @@ -189,4 +191,10 @@ public class UserController { public ResponseEntity getAdminInfo(@RequestBody List roleIds) { return new ResponseEntity<>(userService.findByManager(roleIds), HttpStatus.OK); } + + @ApiOperation("查询所有的组长") + @GetMapping(value = "/leader") + public ResponseEntity getLeaderList() { + return new ResponseEntity<>(userService.queryRoleUser(RoleNumberConstants.MINUS_NINE_NUMBER), HttpStatus.OK); + } } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/OrganizeService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/OrganizeService.java index 6139e67c..7d86db15 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/OrganizeService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/OrganizeService.java @@ -1,16 +1,13 @@ package com.baiye.modules.system.service; -import com.baiye.model.dto.ClueQueryCriteria; -import com.baiye.modules.system.domain.Organize; +import com.baiye.model.dto.OrganizeQueryCriteria; import com.baiye.modules.system.service.dto.OrganizeMemberDistributionDTO; import com.baiye.modules.system.service.dto.OrganizeSaveDTO; 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 org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -34,14 +31,7 @@ public interface OrganizeService { * 查询组长任务列表 * @return */ - HashMap queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable); - - /** - * 修改组信息 - * @param organize - * @return - */ - ResponseEntity updateOrganize(Organize organize); + Map queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable); /** * 指定组员并分配任务 diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java index 5b08f954..d528e687 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java @@ -134,4 +134,11 @@ public interface UserService { * @return */ List findByManager(List roleIds); + + /** + * 角色查询用户 + * @param roleId + * @return + */ + List queryRoleUser(Long roleId); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeDto.java index 1461a8e2..5e32d26f 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeDto.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeDto.java @@ -7,8 +7,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; -import javax.persistence.Column; -import javax.persistence.Transient; import java.io.Serializable; import java.util.Date; import java.util.List; @@ -56,4 +54,10 @@ public class OrganizeDto implements Serializable { @ApiModelProperty(value = "小组下的任务信息") private Task organizeTask; + @ApiModelProperty(value = "组长标签") + private List organizeLabel; + + @ApiModelProperty(value = "返回的任务内管理员定义标签") + private List baseLabel; + } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeMemberDistributionDTO.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeMemberDistributionDTO.java index 75cd844e..c069a56e 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeMemberDistributionDTO.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeMemberDistributionDTO.java @@ -1,13 +1,12 @@ package com.baiye.modules.system.service.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import com.sun.istack.internal.NotNull; +import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotEmpty; import java.sql.Timestamp; import java.util.List; diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskDto.java index 940c0b97..e1f4f2a3 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskDto.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskDto.java @@ -1,6 +1,5 @@ package com.baiye.modules.system.service.dto; - import com.baiye.modules.system.domain.Organize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -33,4 +32,6 @@ public class TaskDto implements Serializable { private Date updateTime; private List organizeList; + + private List baseLabel; } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/OrganizeServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/OrganizeServiceImpl.java index 378ddc53..db51aee1 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/OrganizeServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/OrganizeServiceImpl.java @@ -1,7 +1,6 @@ package com.baiye.modules.system.service.impl; -import cn.hutool.json.JSONUtil; -import com.baiye.constant.DefaultNumberConstants; +import com.baiye.constant.RoleNumberConstants; import com.baiye.feign.AssignDataClient; import com.baiye.feign.SourceClueClient; 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.DistributeDTO; import com.baiye.model.dto.DistributeResponseDTO; +import com.baiye.model.dto.OrganizeQueryCriteria; import com.baiye.modules.system.domain.*; import com.baiye.modules.system.repository.OrganizeRepository; import com.baiye.modules.system.repository.OrganizeUserRepository; 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.UserService; 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.util.PageUtil; import com.baiye.util.QueryHelp; import com.baiye.util.SecurityUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import java.util.*; @@ -47,8 +45,6 @@ public class OrganizeServiceImpl implements OrganizeService { private final SourceClueClient sourceClueClient; private final TaskRepository taskRepository; private final UserService userService; - private final LabelService labelService; - /** * 管理员分配任务 @@ -75,35 +71,30 @@ public class OrganizeServiceImpl implements OrganizeService { organizeUserRepository.save(organizeUser); deptIds.add(saveOrganize.getId()); clueList = sourceClueClient.queryList(organizeSaveDTO.getTaskId()).getBody(); - //任务状态更新 - taskRepository.updateIsDistribution(1, organizeSaveDTO.getTaskId()); + //任务状态更新,创建标签 + Task task = taskRepository.findById(organizeSaveDTO.getTaskId()).orElseGet(Task::new); + // 标签去重 + List labelNameList = organizeSaveDTO.getLabelNameList(); + List labelName = new ArrayList<>(new TreeSet(labelNameList)); + task.setBaseLabel(labelName); + task.setIsDistribution(1); weights.add(saveOrganize.getRatio()); } //总管理员给小组分配任务 DistributeDTO distributeDTO = new DistributeDTO(); distributeDTO.setDeptIds(deptIds); - distributeDTO.setResourceList(clueList); + distributeDTO.setResourceList(clueList); distributeDTO.setWeights(weights); List data = assignDataClient.dataDistribution(distributeDTO).getData(); //线索更新 if (data.size() > 0){ for (DistributeResponseDTO distributeResponseDTO : data) { sourceClueClient.batchUpdateOrganize(distributeResponseDTO); - //获取小组此次获取的数据 + //更新小组此次获取的数据条数 int organizeTaskNum = distributeResponseDTO.getResponseList().size(); organizeRepository.updateByOrganizeTaskNum(distributeResponseDTO.getDeptId(),organizeTaskNum); } } - //创建标签 - List 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); } @@ -128,41 +119,30 @@ public class OrganizeServiceImpl implements OrganizeService { * 查询组长任务列表 */ @Override - public HashMap queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) { + public Map queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) { + List organizeDtoList = new ArrayList<>(); Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); - HashMap hashMap = new HashMap<>(); - List> organizeDtoList = new ArrayList<>(); - Long userId = SecurityUtils.getCurrentUserId(); + // 查询用户下的所有组ID OrganizeUserQueryCriteria organizeUserQueryCriteria = new OrganizeUserQueryCriteria(); - organizeUserQueryCriteria.setUserId(userId); - Page organizeUserRepositoryAll = organizeUserRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeUserQueryCriteria, criteriaBuilder), pageable); - Page map = organizeUserRepositoryAll.map(organizeUserMapper::toDto); - if (!map.isEmpty()) { - for (OrganizeUserDto organizeUserDto : map) { + organizeUserQueryCriteria.setUserId(SecurityUtils.getCurrentUserId()); + List organizeUserDtos = organizeUserMapper.toDto(organizeUserRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder), sort)); + for (OrganizeUserDto organizeUserDto : organizeUserDtos) { if (organizeUserDto.getIsLeader()) { + //查询组并且是组长的组信息 organizeQueryCriteria.setId(organizeUserDto.getOrganizeId()); - // 查询组长的组 List 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()); + } + organizeDtoList.addAll(organizeDtos); } } - hashMap.put("content", organizeDtoList); - hashMap.put("totalElements", organizeDtoList.size()); - return hashMap; - } - return null; - } - - /** - * 修改组信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public ResponseEntity updateOrganize(Organize organize) { - organizeRepository.save(organize); - return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK); + return PageUtil.toPage( + PageUtil.toPage(pageable.getPageNumber(),pageable.getPageSize(), organizeDtoList), + organizeDtoList.size() + ); } /** @@ -173,30 +153,29 @@ public class OrganizeServiceImpl implements OrganizeService { public ResponseEntity saveMemberDistribution(OrganizeMemberDistributionDTO organizeMemberDistributionDTO) { List userIds = organizeMemberDistributionDTO.getUserIds(); Long organizeId = organizeMemberDistributionDTO.getOrganizeId(); - - // 修改组内标签 - if (!CollectionUtils.isEmpty(organizeMemberDistributionDTO.getSourceLabel())) { - organizeRepository.updateOrganizeLabelById - (JSONUtil.toJsonStr(organizeMemberDistributionDTO.getSourceLabel()), organizeId); - } // 新增小组成员 for (Long userId : userIds) { OrganizeUser organizeUser = new OrganizeUser(); organizeUser.setUserId(userId); organizeUser.setOrganizeId(organizeId); + organizeUser.setCreateBy(SecurityUtils.getCurrentUserId()); organizeUserRepository.save(organizeUser); } //分配组员资源 ClueQueryCriteria clueQueryCriteria = new ClueQueryCriteria(); clueQueryCriteria.setOrganizeId(organizeId); clueQueryCriteria.setUserIds(userIds); - //调用资源服务 + //修改资源服务信息 sourceClueClient.queryOrganizeIdList(clueQueryCriteria); - //更新小组任务信息 + //修改小组任务信息 Organize updateOrganize = organizeRepository.findById(organizeMemberDistributionDTO.getOrganizeId()).orElseGet(Organize::new); updateOrganize.setTaskStatus(1); updateOrganize.setBeginTime(organizeMemberDistributionDTO.getBeginTime()); updateOrganize.setEndTime(organizeMemberDistributionDTO.getEndTime()); + //标签去重 + List sourceLabelList = organizeMemberDistributionDTO.getSourceLabel(); + List sourceLabe = new ArrayList<>(new TreeSet(sourceLabelList)); + updateOrganize.setOrganizeLabel(sourceLabe); organizeRepository.save(updateOrganize); return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK); } @@ -206,9 +185,8 @@ public class OrganizeServiceImpl implements OrganizeService { */ @Override public List selectMemberList(OrganizeQueryCriteria organizeQueryCriteria) { - // TODO //查询所有用户 - List userDtoList = userService.queryAll(new UserQueryCriteria()); + List userDtoList = userService.queryRoleUser(RoleNumberConstants.MINUS_FIVE_NUMBER); // 任务内组员用户ID集合 List userList = new ArrayList<>(); //查询任务下的所有组员用户 @@ -219,7 +197,7 @@ public class OrganizeServiceImpl implements OrganizeService { userList.add(organizeUser.getUserId()); } } - // 去除任务内重复的用户 + // 去除同一个任务内重复的用户 Iterator it = userDtoList.iterator(); while(it.hasNext()){ Long id = it.next().getId(); diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskServiceImpl.java index 246aae12..95906952 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskServiceImpl.java @@ -65,6 +65,7 @@ public class TaskServiceImpl implements TaskService { Page taskRepositoryAll = taskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, taskQueryCriteria, criteriaBuilder), pageable); Page map = taskRepositoryAll.map(taskMapper::toDto); for (TaskDto taskDto : map) { + //任务下的小组信息加入 selectOrganizeUser(taskDto); } return PageUtil.toPage(map); diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java index 081bdd74..4f050c00 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java @@ -15,7 +15,6 @@ */ package com.baiye.modules.system.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import com.baiye.config.properties.FileProperties; import com.baiye.constant.DefaultNumberConstants; @@ -95,6 +94,12 @@ public class UserServiceImpl implements UserService { return userMapper.toDto(users); } + @Override + public List queryRoleUser(Long roleId) { + List userList = userRepository.findByRoleId(roleId); + return userMapper.toDto(userList); + } + @Override @Transactional(rollbackFor = Exception.class) public void create(User resources) { diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/OrganizeClient.java b/services/ad-platform-source/src/main/java/com/baiye/feign/OrganizeClient.java new file mode 100644 index 00000000..638cf515 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/OrganizeClient.java @@ -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 queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria); +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/TaskClient.java b/services/ad-platform-source/src/main/java/com/baiye/feign/TaskClient.java index 258c8f86..611343ce 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/feign/TaskClient.java +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/TaskClient.java @@ -1,6 +1,7 @@ package com.baiye.feign; import com.baiye.feign.fallback.TaskClientFallback; +import com.baiye.model.dto.TaskQueryCriteria; import com.baiye.module.entity.Task; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.ResponseEntity; @@ -19,4 +20,7 @@ public interface TaskClient { */ @PostMapping(value = PAY_PREFIX + "/saveTask") ResponseEntity saveTask(@RequestBody Task task); + + @PostMapping(PAY_PREFIX + "/query") + ResponseEntity query(@RequestBody TaskQueryCriteria taskQueryCriteria); } diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/OrganizeClientFallback.java b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/OrganizeClientFallback.java new file mode 100644 index 00000000..3c60924a --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/OrganizeClientFallback.java @@ -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 queryAll(OrganizeQueryCriteria organizeQueryCriteria) { + return null; + } +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/TaskClientFallback.java b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/TaskClientFallback.java index c21f5182..849b8364 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/TaskClientFallback.java +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/TaskClientFallback.java @@ -1,6 +1,7 @@ package com.baiye.feign.fallback; import com.baiye.feign.TaskClient; +import com.baiye.model.dto.TaskQueryCriteria; import com.baiye.module.entity.Task; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @@ -11,4 +12,9 @@ public class TaskClientFallback implements TaskClient { public ResponseEntity saveTask(Task task) { return null; } + + @Override + public ResponseEntity query(TaskQueryCriteria taskQueryCriteria) { + return null; + } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java index 35f64be3..2b5792e2 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java @@ -5,7 +5,7 @@ import com.baiye.http.ResponseCode; import com.baiye.model.dto.ClueDto; import com.baiye.model.dto.ClueQueryCriteria; 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.dto.ClueRecordCriteria; import io.swagger.annotations.Api; @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; @@ -72,6 +73,13 @@ public class ClueController { return new ResponseEntity<>(clueService.query(clueQueryCriteria),HttpStatus.OK); } + @ApiOperation("更新资源信息") + @PostMapping("/update") + public CommonResponse update(@Validated @RequestBody ClueMiddle clueMiddle){ + clueService.update(clueMiddle); + return CommonResponse.createBySuccess(); + } + @ApiOperation("查询组员资源总数") @GetMapping("/queryMemberNum") public ResponseEntity queryMemberNum(@RequestParam("memberId") Long memberId){ diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java new file mode 100644 index 00000000..e7e3a781 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java @@ -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 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 getTradeInfo(List list) { + List 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; + } +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueMiddleRepository.java b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueMiddleRepository.java new file mode 100644 index 00000000..5f1df532 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueMiddleRepository.java @@ -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, JpaSpecificationExecutor { + + /** + * 任务id查询 + * @param taskId + * @return + */ + List 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 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); +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueRepository.java b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueRepository.java index cec1c691..87c0936c 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueRepository.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueRepository.java @@ -3,51 +3,9 @@ package com.baiye.module.dao; import com.baiye.module.entity.Clue; 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 ClueRepository extends JpaRepository, JpaSpecificationExecutor { - - /** - * 根据recordId查询 - * @param recordId - * @return - */ - List 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 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); } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java b/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java new file mode 100644 index 00000000..1f87d684 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java @@ -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 sourceLabel; + + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time", nullable = true) + @CreationTimestamp + private Date createTime; +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/listener/KsExcelListener.java b/services/ad-platform-source/src/main/java/com/baiye/module/listener/KsExcelListener.java index 2936a0ec..ed0542fc 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/listener/KsExcelListener.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/listener/KsExcelListener.java @@ -2,7 +2,6 @@ package com.baiye.module.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.baiye.constant.DefaultNumberConstants; import com.baiye.module.constant.FileConstant; import com.baiye.module.entity.Clue; import com.baiye.module.entity.vo.BaseExcelVo; @@ -70,11 +69,10 @@ public class KsExcelListener extends AnalysisEventListener { clue.setOrigin(baseExcelVo.getOrigin()); clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setCreateBy(baseExcelVo.getUserId()); - clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); clues.add(clue); } if (clues.size() > 0) { - clueService.saveClue(clues); + clueService.saveClue(clues,baseExcelVo.getTaskId()); } } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcCsvListener.java b/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcCsvListener.java index 194ee85b..ff5f9ceb 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcCsvListener.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcCsvListener.java @@ -6,7 +6,6 @@ import cn.hutool.core.text.csv.CsvData; import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvRow; import cn.hutool.core.text.csv.CsvUtil; -import com.baiye.constant.DefaultNumberConstants; import com.baiye.module.constant.FileConstant; import com.baiye.module.entity.Clue; import com.baiye.module.entity.vo.BaseExcelVo; @@ -52,20 +51,20 @@ public class UcCsvListener { clue.setOrigin(baseExcelVo.getOrigin()); clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setCreateBy(baseExcelVo.getUserId()); - clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); +// clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); clues.add(clue); } //1000条插入一次 if (clues.size() > FileConstant.ONE_THOUSAND_NUMBER){ // if (clues.size() > 2){ - clueService.saveClue(clues); + clueService.saveClue(clues,baseExcelVo.getTaskId()); clues.clear(); } index++; } //清除集合数据 if (clues.size() > 0) { - clueService.saveClue(clues); + clueService.saveClue(clues,baseExcelVo.getTaskId()); } } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcExcelListener.java b/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcExcelListener.java index 42d4c026..46cbf1b3 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcExcelListener.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/listener/UcExcelListener.java @@ -2,7 +2,6 @@ package com.baiye.module.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.baiye.constant.DefaultNumberConstants; import com.baiye.module.constant.FileConstant; import com.baiye.module.entity.Clue; import com.baiye.module.entity.vo.BaseExcelVo; @@ -65,11 +64,10 @@ public class UcExcelListener extends AnalysisEventListener { clue.setOrigin(baseExcelVo.getOrigin()); clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setCreateBy(baseExcelVo.getUserId()); - clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); clues.add(clue); } if (clues.size() > 0) { - clueService.saveClue(clues); + clueService.saveClue(clues,baseExcelVo.getTaskId()); } } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/listener/ZdyExcelListener.java b/services/ad-platform-source/src/main/java/com/baiye/module/listener/ZdyExcelListener.java index 03c6854e..37416ce8 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/listener/ZdyExcelListener.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/listener/ZdyExcelListener.java @@ -2,7 +2,6 @@ package com.baiye.module.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.baiye.constant.DefaultNumberConstants; import com.baiye.module.constant.FileConstant; import com.baiye.module.entity.Clue; import com.baiye.module.entity.vo.BaseExcelVo; @@ -69,11 +68,10 @@ public class ZdyExcelListener extends AnalysisEventListener { clue.setOrigin(baseExcelVo.getOrigin()); clue.setRecordId(baseExcelVo.getClueRecordId()); clue.setCreateBy(baseExcelVo.getUserId()); - clue.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); clues.add(clue); } if (clues.size() > 0) { - clueService.saveClue(clues); + clueService.saveClue(clues,baseExcelVo.getTaskId()); } } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java index b9452561..156422ea 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java @@ -4,6 +4,7 @@ import com.baiye.model.dto.ClueDto; import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.module.entity.Clue; +import com.baiye.module.entity.ClueMiddle; import com.baiye.module.entity.ClueRecord; import com.baiye.module.service.dto.ClueRecordCriteria; import org.springframework.data.domain.Page; @@ -18,8 +19,9 @@ public interface ClueService { /** * 插入数据 * @param clueList + * @param taskId */ - void saveClue(List clueList); + void saveClue(List clueList,Long taskId); /** * 任务id查询资源列表 @@ -81,4 +83,9 @@ public interface ClueService { * @param clueQueryCriteria */ void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria); + + /** + * 更新资源信息 + */ + void update(ClueMiddle clueMiddle); } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleCriteria.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleCriteria.java new file mode 100644 index 00000000..4f603ae5 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleCriteria.java @@ -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; +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java new file mode 100644 index 00000000..1f7dbf3c --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java @@ -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 sourceLabel; +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ExcelClueDto.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ExcelClueDto.java index 27716624..4c1df85b 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ExcelClueDto.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ExcelClueDto.java @@ -12,6 +12,7 @@ import lombok.Setter; import java.io.Serializable; import java.util.Date; +import java.util.List; @Getter @Setter @@ -84,4 +85,13 @@ public class ExcelClueDto implements Serializable { @ExcelIgnore private Long taskId; + + @ExcelIgnore + private Object sourceLabel; + + @ExcelIgnore + private List organizeLabel; + + @ExcelIgnore + private List baseLabel; } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java index cc5903a0..85f0f1cf 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java @@ -1,38 +1,35 @@ package com.baiye.module.service.impl; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baiye.constant.DefaultNumberConstants; -import com.baiye.model.dto.ClueDto; -import com.baiye.model.dto.ClueQueryCriteria; -import com.baiye.model.dto.DistributeResponseDTO; +import com.baiye.feign.OrganizeClient; +import com.baiye.feign.TaskClient; +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.ClueRepository; import com.baiye.module.entity.Clue; +import com.baiye.module.entity.ClueMiddle; import com.baiye.module.entity.ClueRecord; import com.baiye.module.service.ClueService; -import com.baiye.module.service.dto.ClueRecordCriteria; -import com.baiye.module.service.dto.ClueRecordDto; -import com.baiye.module.service.dto.ExcelClueDto; -import com.baiye.module.service.mapstruct.ClueMapper; +import com.baiye.module.service.dto.*; import com.baiye.module.service.mapstruct.ClueRecordMapper; import com.baiye.util.AverageDataUtil; import com.baiye.util.ExportExcelUtil; import com.baiye.util.PageUtil; import com.baiye.util.QueryHelp; -import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; @Service @Slf4j @@ -41,26 +38,38 @@ public class ClueServiceImpl implements ClueService { private final ClueRepository clueRepository; private final ClueRecordRepository clueRecordRepository; - private final ClueMapper clueMapper; private final ClueRecordMapper clueRecordMapper; + private final ClueMiddleRepository clueMiddleRepository; + private final ClueJpa clueJpa; + private final OrganizeClient organizeClient; + private final TaskClient taskClient; @Override - public void saveClue(List clueList) { + public void saveClue(List clueList,Long taskId) { if (clueList.size() > 0){ - clueRepository.saveAll(clueList); + List 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 public List queryList(Long taskId) { List clueLists = new ArrayList<>(); - List clueRecordList = clueRecordRepository.findByTaskId(taskId); - if (clueRecordList.size() > 0) { - for (ClueRecord clueRecord : clueRecordList) { - List clueList = clueRepository.findByRecordId(clueRecord.getId()); - for (Clue clue : clueList) { - clueLists.add(clue.getId()); - } + List clueMiddleList = clueMiddleRepository.findByTaskId(taskId); + if (clueMiddleList.size() > 0) { + for (ClueMiddle clueMiddle : clueMiddleList) { +// Clue clue = clueRepository.findById(clueMiddle.getClueId()).orElseGet(Clue::new); + clueLists.add(clueMiddle.getClueId()); } return clueLists; } @@ -73,25 +82,31 @@ public class ClueServiceImpl implements ClueService { return clueAll; } + /** + * 批量更新组信息 + */ @Override @Transactional(rollbackFor = Exception.class) public void batchUpdateOrganize(DistributeResponseDTO distributeResponseDTO) { List responseList = distributeResponseDTO.getResponseList(); Long deptId = distributeResponseDTO.getDeptId(); for (Long id : responseList) { - clueRepository.updateOrganizeIdById(id,deptId); + clueMiddleRepository.updateOrganizeIdById(id,deptId); } } + /** + * 小组id查询并分配组员资源 + */ @Override @Transactional(rollbackFor = Exception.class) public void queryOrganizeIdList(ClueQueryCriteria clueQueryCriteria) { //资源id集合 List clueIds = new ArrayList<>(); //查询此小组下的所有资源id - List clueList = clueRepository.findByOrganizeId(clueQueryCriteria.getOrganizeId()); - for (Clue clue : clueList) { - clueIds.add(clue.getId()); + List clueMiddleList = clueMiddleRepository.findByOrganizeId(clueQueryCriteria.getOrganizeId()); + for (ClueMiddle clueMiddle : clueMiddleList) { + clueIds.add(clueMiddle.getClueId()); } //小组内资源分配 //Map>:用户id -> 资源ID集合 @@ -101,7 +116,7 @@ public class ClueServiceImpl implements ClueService { for (Long userId : map.keySet()) { List userIdList = map.get(userId); 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 public Map queryAll(ClueQueryCriteria clueQueryCriteria ,Pageable pageable) { -// Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); -// Pageable pageable = PageRequest.of(clueQueryCriteria.getPage(), clueQueryCriteria.getSize(),sort); - Page cluePage = clueRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueQueryCriteria, criteriaBuilder), pageable); - Page map = cluePage.map(clueMapper::toDto); - for (ClueDto clueDto : map) { - ClueRecord clueRecord = clueRecordRepository.findById(clueDto.getRecordId()).orElseGet(ClueRecord::new); - clueDto.setTaskId(clueRecord.getTaskId()); + if (clueQueryCriteria.getMemberId() != null) { + List clueDtoList = clueJpa.getConfirmReceipt(clueQueryCriteria); + for (ClueDto clueDto : clueDtoList) { + OrganizeQueryCriteria organizeQueryCriteria = new OrganizeQueryCriteria(); + organizeQueryCriteria.setId(clueDto.getOrganizeId()); + List list = (List)organizeClient.queryAll(organizeQueryCriteria).getBody(); + for (Object obj : list) { + JSONObject organizeDto = JSONUtil.parseObj(obj); + List organizeLabel = (List)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 baseLabel = (List)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 public List query(ClueQueryCriteria clueQueryCriteria) { - Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); - List clueDtos = clueMapper.toDto(clueRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueQueryCriteria, criteriaBuilder), sort)); - return clueDtos; + if (clueQueryCriteria.getMemberId() != null) { + List clueDtoList = clueJpa.getConfirmReceipt(clueQueryCriteria); + return clueDtoList; + } + return null; } /** @@ -140,7 +175,7 @@ public class ClueServiceImpl implements ClueService { */ @Override public Long queryMemberNum(Long memberId) { - return clueRepository.countByMemberId(memberId); + return clueMiddleRepository.countByMemberId(memberId); } /** @@ -155,12 +190,32 @@ public class ClueServiceImpl implements ClueService { } } + /** + * 导出资源(客户列表) + */ @Override public void exportClueList(HttpServletResponse response, ClueQueryCriteria clueQueryCriteria) { if (clueQueryCriteria.getMemberId() != null) { - Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); - List clueDtos = clueMapper.toDto(clueRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, clueQueryCriteria, criteriaBuilder), sort)); - ExportExcelUtil.downloadEasyExcel(response, ExcelClueDto.class,clueDtos); + List clueDtoList = clueJpa.getConfirmReceipt(clueQueryCriteria); + ExportExcelUtil.downloadEasyExcel(response, ExcelClueDto.class,clueDtoList); + } + } + + /** + * 修改 + */ + @Override + public void update(ClueMiddle clueMiddle) { + ClueMiddle clueMiddleOne = clueMiddleRepository.findById(clueMiddle.getClueId()).orElseGet(ClueMiddle::new); + if (clueMiddle.getSourceLabel() != null) { + List sourceLabelList = clueMiddle.getSourceLabel(); + // 标签去重 + List sourceLabel = new ArrayList(new TreeSet(sourceLabelList)); + clueMiddleOne.setSourceLabel(sourceLabel); + } + if (clueMiddle.getMemberStatus() != null) { + clueMiddleOne.setMemberStatus(clueMiddle.getMemberStatus()); } + clueMiddleRepository.save(clueMiddleOne); } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ClueMiddleMapper.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ClueMiddleMapper.java new file mode 100644 index 00000000..4c37d991 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ClueMiddleMapper.java @@ -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 { +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java b/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java index 4c23310f..d0c9d582 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java +++ b/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java @@ -41,6 +41,7 @@ public class FileAnalysisTask { baseExcelVo.setUserId(clueRecord.getCreateBy()); baseExcelVo.setClueRecordId(clueRecord.getId()); baseExcelVo.setOrigin(clueRecord.getUploadType()); + baseExcelVo.setTaskId(clueRecord.getTaskId()); FileInputStream file = new FileInputStream(clueRecord.getNewFileUrl()); switch (clueRecord.getUploadType()){ diff --git a/services/ad-platform-source/src/main/java/com/baiye/util/AverageDataUtil.java b/services/ad-platform-source/src/main/java/com/baiye/util/AverageDataUtil.java index b4df19ac..4342784f 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/util/AverageDataUtil.java +++ b/services/ad-platform-source/src/main/java/com/baiye/util/AverageDataUtil.java @@ -3,7 +3,7 @@ package com.baiye.util; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.sun.istack.internal.NotNull; +import javax.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils;