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 new file mode 100644 index 00000000..21f8f0f8 --- /dev/null +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java @@ -0,0 +1,64 @@ +package com.baiye.model.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.Date; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class ClueDto implements Serializable { + + private Long id; + + @ApiModelProperty(value = "姓名") + private String name; + + @ApiModelProperty(value = "nid") + private String nid; + + @ApiModelProperty(value = "微信") + private String wx; + + @ApiModelProperty(value = "数据来源 0:自定义模板 1:UC 2:快手 3:抖音 4:百度") + private Integer origin; + + @ApiModelProperty(value = "金额") + private String amount; + + @ApiModelProperty(value = "数据收集日期") + private java.util.Date collectTime; + + @ApiModelProperty(value = "线索归属地") + private String address; + + @ApiModelProperty(value = "导入记录id") + private Long recordId; + + @ApiModelProperty(value = "小组id") + private Long organizeId; + + @ApiModelProperty(value = "所属组员id") + private Long memberId; + + @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") + private Integer memberStatus; + + @ApiModelProperty(value = "创建人") + private Long createBy; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + @ApiModelProperty(value = "备注") + private String remark; +} 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 new file mode 100644 index 00000000..0d90d626 --- /dev/null +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java @@ -0,0 +1,42 @@ +package com.baiye.model.dto; + +import com.baiye.annotation.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.data.domain.Pageable; + +import javax.persistence.Column; + +/** + * 资源clue公共查询类 + */ +@Data +public class ClueQueryCriteria { + + @Query + 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:百度") + @Query + private Integer origin; + + @ApiModelProperty(value = "姓名") + @Query + private String name; + + @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") + @Query + private Integer memberStatus; + + + private Integer page; + private Integer size; +} diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeDTO.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeDTO.java index b97231fc..41bc2cb2 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeDTO.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeDTO.java @@ -22,7 +22,7 @@ public class DistributeDTO implements Serializable { @NotEmpty(message = "资源不能为空") @ApiModelProperty("分配资源") - private List resourceList; + private List resourceList; @ApiModelProperty("是否权重分配") private Boolean isWeight; diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeResponseDTO.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeResponseDTO.java index 3acff2c6..a0890985 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeResponseDTO.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/DistributeResponseDTO.java @@ -19,5 +19,5 @@ public class DistributeResponseDTO implements Serializable { private Long deptId; @ApiModelProperty("分配资源") - private List responseList; + private List responseList; } diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/entity/ClueBase.java b/ad-platform-pojo/src/main/java/com/baiye/model/entity/ClueBase.java new file mode 100644 index 00000000..72313c14 --- /dev/null +++ b/ad-platform-pojo/src/main/java/com/baiye/model/entity/ClueBase.java @@ -0,0 +1,85 @@ +package com.baiye.model.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.annotations.CreationTimestamp; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; + + +/** + * Clue + * + * @author yqy + * @date 2021-12-07 10:40:37 + */ +@Data +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class ClueBase implements Serializable { + + @ApiModelProperty(value = "姓名") + @Column(name = "name") + private String name; + + @ApiModelProperty(value = "nid") + @Column(name = "nid") + private String nid; + + @ApiModelProperty(value = "微信") + @Column(name = "wx") + private String wx; + + @ApiModelProperty(value = "数据来源 0:自定义模板 1:UC 2:快手 3:抖音 4:百度") + @Column(name = "origin") + private Integer origin; + + @ApiModelProperty(value = "金额") + @Column(name = "amount") + private String amount; + + @ApiModelProperty(value = "数据收集日期") + @Column(name = "collect_time") + private java.util.Date collectTime; + + @ApiModelProperty(value = "线索归属地") + @Column(name = "address") + private String address; + + @ApiModelProperty(value = "导入记录id") + @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 = "创建人") + @Column(name = "create_by") + private Long createBy; + + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time") + @CreationTimestamp + private java.util.Date createTime; + + @ApiModelProperty(value = "更新时间") + @Column(name = "update_time") + @LastModifiedDate + private java.util.Date updateTime; + + @ApiModelProperty(value = "备注") + @Column(name = "remark") + private String remark; +} diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/entity/TaskBase.java b/ad-platform-pojo/src/main/java/com/baiye/model/entity/TaskBase.java new file mode 100644 index 00000000..5e08e011 --- /dev/null +++ b/ad-platform-pojo/src/main/java/com/baiye/model/entity/TaskBase.java @@ -0,0 +1,87 @@ +package com.baiye.model.entity; + +import io.swagger.annotations.ApiModelProperty; +import javax.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.io.Serializable; + + +/** + * Task + * + * @author yqy + * @date 2021-12-10 13:20:22 + */ +@Getter +@Setter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class TaskBase implements Serializable { + + private static final long serialVersionUID = 8623354712013889005L; + + /** + * 任务名称 + * nullable : true + * default : null + */ + @ApiModelProperty(value = "任务名称") + @Column(name = "task_name", nullable = true, length = 255) + private String taskName; + + /** + * 任务资源总条数 + * nullable : true + * default : null + */ + @ApiModelProperty(value = "任务资源总条数") + @Column(name = "total_number", nullable = true) + private Integer totalNumber; + + @ApiModelProperty(value = "分配状态 0:未分配 1:已分配") + @Column(name = "is_distribution", nullable = true) + private Integer isDistribution; + + /** + * 创建人 + * nullable : true + * default : null + */ + @ApiModelProperty(value = "创建人") + @Column(name = "create_by", nullable = true) + private Long createBy; + + /** + * 更新人 + * nullable : true + * default : null + */ + @ApiModelProperty(value = "更新人") + @Column(name = "update_by", nullable = true) + private Long updateBy; + + /** + * 创建时间 + * nullable : true + * default : null + */ + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time", nullable = true) + @CreationTimestamp + private java.util.Date createTime; + + /** + * 更新时间 + * nullable : true + * default : null + */ + @ApiModelProperty(value = "更新时间") + @Column(name = "update_time", nullable = true) + @LastModifiedDate + private java.util.Date updateTime; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java new file mode 100644 index 00000000..63b4b982 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java @@ -0,0 +1,45 @@ +package com.baiye.feign; + +import com.baiye.model.dto.ClueQueryCriteria; +import com.baiye.model.dto.DistributeResponseDTO; +import com.baiye.modules.system.domain.Clue; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; +import java.util.Map; + +/** + * 资源服务 + */ +@FeignClient(name = "ad-platform-source", fallback = SourceClueClientFallback.class) +public interface SourceClueClient { + String API_PREFIX = "/source/clue"; + + @ApiOperation("任务id查询资源列表") + @GetMapping(API_PREFIX + "/queryList") + ResponseEntity> queryList(@RequestParam("taskId") Long taskId); + + @ApiOperation("批量更新组信息") + @PostMapping(API_PREFIX + "/batchUpdateOrganize") + ResponseEntity batchUpdateOrganize(@RequestBody DistributeResponseDTO distributeResponseDTO); + + @ApiOperation("小组id查询") + @GetMapping(API_PREFIX + "/queryOrganizeIdList") + ResponseEntity> queryOrganizeIdList(@RequestParam("organizeId") Long organizeId); + + @ApiOperation("批量更新组员信息") + @PostMapping(API_PREFIX + "/batchUpdateUserId") + ResponseEntity batchUpdateUserId(@RequestBody List>> mapList); + + @ApiOperation("(多条件)查询资源信息") + @PostMapping(API_PREFIX + "/queryAll") + ResponseEntity> queryAll(@RequestBody ClueQueryCriteria clueQueryCriteria); +} + diff --git a/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java new file mode 100644 index 00000000..4876d059 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java @@ -0,0 +1,41 @@ +package com.baiye.feign; + +import com.baiye.model.dto.ClueDto; +import com.baiye.model.dto.ClueQueryCriteria; +import com.baiye.model.dto.DistributeResponseDTO; +import com.baiye.modules.system.domain.Clue; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public class SourceClueClientFallback implements SourceClueClient { + @Override + public ResponseEntity> queryList(Long taskId) { + return null; + } + + @Override + public ResponseEntity batchUpdateOrganize(DistributeResponseDTO distributeResponseDTO) { + return null; + } + + @Override + public ResponseEntity> queryOrganizeIdList(Long organizeId) { + return null; + } + + @Override + public ResponseEntity batchUpdateUserId(List>> mapList) { + return null; + } + + @Override + public ResponseEntity> queryAll(ClueQueryCriteria clueQueryCriteria) { + return null; + } + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Clue.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Clue.java new file mode 100644 index 00000000..455531f4 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Clue.java @@ -0,0 +1,28 @@ +package com.baiye.modules.system.domain; + +import com.baiye.model.entity.ClueBase; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.*; + + +/** + * Clue + * + * @author yqy + * @date 2021-12-07 10:40:37 + */ +@Data +@Entity +@Table(name = "tb_clue") +@ApiModel(value = "Clue") +public class Clue extends ClueBase { + + @Id + @ApiModelProperty(value = "线索表,主键id(自动递增)") + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; +} 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 new file mode 100644 index 00000000..6be5f563 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Organize.java @@ -0,0 +1,105 @@ +package com.baiye.modules.system.domain; + +import com.baiye.modules.system.service.dto.UserDto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import javax.persistence.*; +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.sql.Timestamp; +import java.util.List; + + +/** + * 小组信息表 + * + * @author yqy + * @date 2021-12-16 09:24:04 + */ +@Data +@Entity +@Table(name = "tb_organize") +@ApiModel(value = "小组信息表") +@EntityListeners(AuditingEntityListener.class) +public class Organize implements Serializable { + + private static final long serialVersionUID = 8623354712013889005L; + + @Id + @ApiModelProperty(value = "ID") + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ApiModelProperty(value = "小组名称") + @Column(name = "organize_name") + private String organizeName; + + @ApiModelProperty(value = "任务id") + @Column(name = "task_id") + private Long taskId; + + @ApiModelProperty(value = "小组任务状态 0:未开始 1:进行中 2:已完成 3:已结束") + @Column(name = "task_status") + private Integer taskStatus; + + @ApiModelProperty(value = "分配比例") + @Column(name = "ratio") + private Double ratio; + + @ApiModelProperty(value = "任务开始时间") + @Column(name = "begin_time") + private Timestamp beginTime; + + @ApiModelProperty(value = "任务结束时间") + @Column(name = "end_time") + private Timestamp endTime; + + @ApiModelProperty(value = "此次任务分配名称") + @Column(name = "organize_task_name") + private String organizeTaskName; + + @ApiModelProperty(value = "此次任务分配数量") + @Column(name = "organize_task_num") + private Integer organizeTaskNum; + + @ApiModelProperty(value = "创建人") + @Column(name = "create_by") + private Long createBy; + + @ApiModelProperty(value = "更新人") + @Column(name = "update_by") + private Long updateBy; + + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time") + @CreationTimestamp + private java.util.Date createTime; + + @ApiModelProperty(value = "更新时间") + @Column(name = "update_time") + @LastModifiedDate + private java.util.Date updateTime; + + @ApiModelProperty(value = "描述") + @Column(name = "remark") + private String remark; + + + + @Transient + @ApiModelProperty(value = "用户id") + private Long userId; + + @Transient + @ApiModelProperty(value = "用户列表") + private List userList; + + @Transient + @ApiModelProperty(value = "小组下的任务信息") + private Task organizeTask; +} 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 new file mode 100644 index 00000000..ed45738e --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/OrganizeUser.java @@ -0,0 +1,67 @@ +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 + * + * @author yqy + * @date 2021-12-16 09:21:51 + */ +@Data +@Entity +@Table(name = "tb_organize_user") +@ApiModel(value = "OrganizeUser") +@EntityListeners(AuditingEntityListener.class) +public class OrganizeUser implements Serializable { + + private static final long serialVersionUID = 8623354712013889005L; + + @Id + @ApiModelProperty(value = "小组用户表") + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ApiModelProperty(value = "小组id") + @Column(name = "organize_id") + private Long organizeId; + + @ApiModelProperty(value = "用户id") + @Column(name = "user_id") + private Long userId; + + @ApiModelProperty(value = "是否为组长 0:false 1:true") + @Column(name = "is_leader") + private Boolean isLeader = false; + + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time") + @CreationTimestamp + private java.util.Date createTime; + + @ApiModelProperty(value = "更新时间") + @Column(name = "update_time") + @LastModifiedDate + private java.util.Date updateTime; + + @ApiModelProperty(value = "创建人") + @Column(name = "create_by") + private Long createBy; + + @ApiModelProperty(value = "更新人") + @Column(name = "update_by") + private Long updateBy; + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Task.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Task.java new file mode 100644 index 00000000..c9009043 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/Task.java @@ -0,0 +1,25 @@ +package com.baiye.modules.system.domain; + +import com.baiye.model.entity.TaskBase; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.*; +import java.util.List; + +@Data +@Entity +@Table(name = "tb_task") +@ApiModel(value = "Task") +public class Task extends TaskBase { + + @Id + @ApiModelProperty(value = "任务表,主键ID") + @Column(name = "id") + private Long id; + + @Transient + @ApiModelProperty(value = "任务小组信息") + private List organizeList; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/OrganizeRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/OrganizeRepository.java new file mode 100644 index 00000000..41e420fe --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/OrganizeRepository.java @@ -0,0 +1,34 @@ +package com.baiye.modules.system.repository; + +import com.baiye.modules.system.domain.Organize; +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; + +/** + * @author YQY + * @date 2021-12-13 + */ +@Repository +public interface OrganizeRepository extends JpaRepository, JpaSpecificationExecutor { + + /** + * 查询任务下的小组 + * @param taskId + * @return + */ + List findByTaskId(Long taskId); + + /** + * 更新此次分配任务数量 + * @param deptId + * @param organizeTaskNum + */ + @Modifying + @Query(value = "update tb_organize set organize_task_num = ?2 where id = ?1",nativeQuery = true) + void updateByOrganizeTaskNum(Long deptId, int organizeTaskNum); +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/OrganizeUserRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/OrganizeUserRepository.java new file mode 100644 index 00000000..86ab4da4 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/OrganizeUserRepository.java @@ -0,0 +1,12 @@ +package com.baiye.modules.system.repository; + +import com.baiye.modules.system.domain.OrganizeUser; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +public interface OrganizeUserRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByOrganizeId(Long id); +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskRepository.java new file mode 100644 index 00000000..8356e9fd --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/repository/TaskRepository.java @@ -0,0 +1,22 @@ +package com.baiye.modules.system.repository; + +import com.baiye.modules.system.domain.Task; +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; + +/** +* @author YQY +* @date 2021-12-10 +*/ +@Repository +public interface TaskRepository extends JpaRepository, JpaSpecificationExecutor { + + @Modifying + @Query(value = "update tb_task set is_distribution = ?1 where id = ?2",nativeQuery = true) + void updateIsDistribution(int isDistribution,Long taskId); +} 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 new file mode 100644 index 00000000..dba87c0e --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/OrganizeController.java @@ -0,0 +1,71 @@ +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.modules.system.domain.Organize; +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; +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.*; + +/** + * @author YQY + * @date 2021-12-13 + */ +@Api(tags = "小组管理") +@RestController +@RequestMapping("/api/organize") +@RequiredArgsConstructor +public class OrganizeController { + + private final OrganizeService organizeService; + + @ApiOperation("管理员分配任务") + @PostMapping("/saveOrganizeDistribution") + public ResponseEntity saveOrganizeDistribution(@Validated @RequestBody OrganizeSaveDTO organizeSaveDTO){ + return organizeService.saveOrganizeDistribution(organizeSaveDTO); + } + + @ApiOperation("查询组") + @PostMapping("/queryAll") + public ResponseEntity queryAll(@RequestBody OrganizeQueryCriteria organizeQueryCriteria){ + return new ResponseEntity<>(organizeService.queryAll(organizeQueryCriteria),HttpStatus.OK); + } + + @ApiOperation("查询组长下任务列表") + @GetMapping("/queryLeaderTaskList") + public ResponseEntity queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable){ + return new ResponseEntity<>(organizeService.queryLeaderTaskList(organizeQueryCriteria,pageable), HttpStatus.OK); + } + + @ApiOperation("组长分配任务") + @PostMapping("/saveMemberDistribution") + public ResponseEntity saveMemberDistribution(@Validated @RequestBody OrganizeMemberDistributionDTO organizeMemberDistributionDTO){ + if (organizeMemberDistributionDTO != null) { + return organizeService.saveMemberDistribution(organizeMemberDistributionDTO); + } + return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK); + } + + @ApiOperation("查询任务外用户列表") + @GetMapping("/selectMemberList") + public ResponseEntity selectMemberList(OrganizeQueryCriteria organizeQueryCriteria){ + return new ResponseEntity<>(organizeService.selectMemberList(organizeQueryCriteria), HttpStatus.OK); + } + + @ApiOperation("查询客户列表") + @GetMapping("/queryMember") + public ResponseEntity queryMember(ClueQueryCriteria clueQueryCriteria,Pageable pageable){ + return new ResponseEntity<>(organizeService.queryMember(clueQueryCriteria,pageable), HttpStatus.OK); + } + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java new file mode 100644 index 00000000..322ac6c0 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java @@ -0,0 +1,45 @@ +package com.baiye.modules.system.rest; + +import com.baiye.modules.system.domain.Task; +import com.baiye.modules.system.service.TaskService; +import com.baiye.modules.system.service.dto.OrganizeQueryCriteria; +import com.baiye.modules.system.service.dto.TaskQueryCriteria; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + + +/** + * @author YQY + * @date 2021-12-10 + */ +@Api(tags = "任务管理") +@RestController +@RequestMapping("/api/task") +@RequiredArgsConstructor +public class TaskController { + + private final TaskService taskService; + + @ApiOperation("新建任务") + @PostMapping("/saveTask") + public ResponseEntity saveTask(@RequestBody Task task){ + return new ResponseEntity<>(taskService.saveTask(task),HttpStatus.CREATED); + } + + @ApiOperation("查询任务(分页)") + @GetMapping("/queryAll") + public ResponseEntity queryAll(TaskQueryCriteria taskQueryCriteria, Pageable pageable){ + return new ResponseEntity<>(taskService.queryAll(taskQueryCriteria,pageable),HttpStatus.OK); + } + + @ApiOperation("查询任务") + @PostMapping("/query") + public ResponseEntity query(@RequestBody TaskQueryCriteria taskQueryCriteria){ + return new ResponseEntity<>(taskService.query(taskQueryCriteria),HttpStatus.OK); + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..c4a469ef --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/OrganizeService.java @@ -0,0 +1,66 @@ +package com.baiye.modules.system.service; + +import com.baiye.model.dto.ClueQueryCriteria; +import com.baiye.modules.system.domain.Organize; +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; + +public interface OrganizeService { + + /** + * 管理员分配任务 + * @param organizeSaveDTO + * @return + */ + ResponseEntity saveOrganizeDistribution(OrganizeSaveDTO organizeSaveDTO); + + /** + * 查询组 + * @param organizeQueryCriteria + * @return + */ + List queryAll(OrganizeQueryCriteria organizeQueryCriteria); + + /** + * 查询组长下任务列表 + * @return + */ + HashMap queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable); + + /** + * 修改组信息 + * @param organize + * @return + */ + ResponseEntity updateOrganize(Organize organize); + + /** + * 指定组员并分配任务 + * @param organizeMemberDistributionDTO + * @return + */ + ResponseEntity saveMemberDistribution(OrganizeMemberDistributionDTO organizeMemberDistributionDTO); + + /** + * 查询用户列表,选取组员 + * @param organizeQueryCriteria + * @return + */ + List selectMemberList(OrganizeQueryCriteria organizeQueryCriteria); + + /** + * 查询客户信息 + * @param clueQueryCriteria + * @return + */ + Map queryMember(ClueQueryCriteria clueQueryCriteria,Pageable pageable); +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskService.java new file mode 100644 index 00000000..e9f55297 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/TaskService.java @@ -0,0 +1,35 @@ +package com.baiye.modules.system.service; + +import com.baiye.modules.system.domain.Task; +import com.baiye.modules.system.service.dto.OrganizeDto; +import com.baiye.modules.system.service.dto.TaskDto; +import com.baiye.modules.system.service.dto.TaskQueryCriteria; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +public interface TaskService { + + /** + * 新建任务 + * @param task + * @return + */ + ResponseEntity saveTask(Task task); + + /** + *查询任务(分页) + * @param taskQueryCriteria + * @param pageable + * @return + */ + Object queryAll(TaskQueryCriteria taskQueryCriteria, Pageable pageable); + + /** + * (查询任务 + * @param taskQueryCriteria + * @return + */ + List query(TaskQueryCriteria taskQueryCriteria); +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/LabelDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/LabelDto.java index 8b1e1434..1b976d9b 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/LabelDto.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/LabelDto.java @@ -32,7 +32,7 @@ public class LabelDto implements Serializable { private Integer level; /** 是否启用 */ - private Integer isEnable; + private Boolean isEnable; /** 创建者 */ private String createBy; 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 new file mode 100644 index 00000000..1461a8e2 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeDto.java @@ -0,0 +1,59 @@ +package com.baiye.modules.system.service.dto; + +import com.baiye.modules.system.domain.Task; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +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; + +@Getter +@Setter +public class OrganizeDto implements Serializable { + + @JsonSerialize(using= ToStringSerializer.class) + private Long id; + + private String organizeName; + + @JsonSerialize(using= ToStringSerializer.class) + private Long taskId; + + private Integer taskStatus; + + private Double ratio; + + private java.util.Date beginTime; + + private java.util.Date endTime; + + private Long createBy; + + private Date createTime; + + private Date updateTime; + + private String remark; + + @ApiModelProperty(value = "此次任务分配名称") + private String organizeTaskName; + + @ApiModelProperty(value = "此次任务分配数量") + private Integer organizeTaskNum; + + @ApiModelProperty(value = "用户id") + private Long userId; + + @ApiModelProperty(value = "用户列表") + private List userList; + + @ApiModelProperty(value = "小组下的任务信息") + private Task organizeTask; + +} 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 new file mode 100644 index 00000000..ba72680d --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeMemberDistributionDTO.java @@ -0,0 +1,37 @@ +package com.baiye.modules.system.service.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.sql.Timestamp; +import java.util.Date; +import java.util.List; +import java.util.Set; + +@Data +public class OrganizeMemberDistributionDTO { + + @NotEmpty(message = "小组成员id集合") + @ApiModelProperty("小组成员id集合") + private List userIds; + + @NotEmpty(message = "小组id") + @ApiModelProperty("小组id") + private Long organizeId; + + @NotEmpty(message = "任务开始时间") + @ApiModelProperty("任务开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Timestamp beginTime; + + @NotEmpty(message = "任务结束时间") + @ApiModelProperty("任务结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Timestamp endTime; + + @NotEmpty(message = "任务id") + @ApiModelProperty("任务id") + private Long taskId; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeQueryCriteria.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeQueryCriteria.java new file mode 100644 index 00000000..ff3a21ae --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeQueryCriteria.java @@ -0,0 +1,41 @@ +package com.baiye.modules.system.service.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; + +/** + * 小组公共查询类 + */ +@Data +public class OrganizeQueryCriteria { + + @Query + private Long id; + + @Query + private Integer taskStatus; + + @Query + private Long createBy; + + @Query + private Long taskId; + + @ApiModelProperty(value = "此次任务分配名称") + @Query + private String organizeTaskName; + + @Query(type = Query.Type.BETWEEN) + private List createTime; + + @ApiModelProperty(value = "标签名称") + private List labelNameList; + + private List organizeList; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeSaveDTO.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeSaveDTO.java new file mode 100644 index 00000000..b6702f3d --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeSaveDTO.java @@ -0,0 +1,29 @@ +package com.baiye.modules.system.service.dto; + +import com.baiye.modules.system.domain.Organize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class OrganizeSaveDTO { + + + @ApiModelProperty("小组集合") + @NotNull + private List organizeList; + + @ApiModelProperty("任务id") + @NotNull + private Long taskId; + + @ApiModelProperty(value = "此次任务分配名称") + @NotNull + private String organizeTaskName; + + @ApiModelProperty(value = "标签名称") + private List labelNameList; + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeUserDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeUserDto.java new file mode 100644 index 00000000..007b6b0f --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeUserDto.java @@ -0,0 +1,49 @@ +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; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; +import org.springframework.data.annotation.LastModifiedDate; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Getter +@Setter +public class OrganizeUserDto implements Serializable { + + @ApiModelProperty(value = "小组用户表") + private Long id; + + @ApiModelProperty(value = "小组id") + private Long organizeId; + + @ApiModelProperty(value = "用户id") + private Long userId; + + @ApiModelProperty(value = "是否为组长 0:false 1:true") + private Boolean isLeader = false; + + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + + @ApiModelProperty(value = "更新时间") + private java.util.Date updateTime; + + @ApiModelProperty(value = "创建人") + private Long createBy; + + @ApiModelProperty(value = "更新人") + private Long updateBy; + + private List organizeList; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeUserQueryCriteria.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeUserQueryCriteria.java new file mode 100644 index 00000000..a73275f0 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/OrganizeUserQueryCriteria.java @@ -0,0 +1,28 @@ +package com.baiye.modules.system.service.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; + +/** + * 小组公共查询类 + */ +@Data +public class OrganizeUserQueryCriteria { + + @Query + private Long userId; + + @ApiModelProperty(value = "小组id") + @Query + private Long organizeId; + + @ApiModelProperty(value = "是否为组长 0:false 1:true") + @Query + private Boolean isLeader; +} 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 new file mode 100644 index 00000000..940c0b97 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskDto.java @@ -0,0 +1,36 @@ +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; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Getter +@Setter +public class TaskDto implements Serializable { + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + private String taskName; + + private Integer totalNumber; + + private Integer isDistribution; + + private Long createBy; + + private Long updateBy; + + private Date createTime; + + private Date updateTime; + + private List organizeList; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskQueryCriteria.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskQueryCriteria.java new file mode 100644 index 00000000..96705a27 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/TaskQueryCriteria.java @@ -0,0 +1,34 @@ +package com.baiye.modules.system.service.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; + +/** + * 小组公共查询类 + */ +@Data +public class TaskQueryCriteria { + + @Query + private Long id; + + @Query + @ApiModelProperty(value = "分配状态 0:未分配 1:已分配") + private Integer isDistribution; + + @Query + private Long createBy; + + @Query + private Long taskName; + + @Query(type = Query.Type.BETWEEN) + private List createTime; + +} 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 new file mode 100644 index 00000000..8749fafa --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/OrganizeServiceImpl.java @@ -0,0 +1,266 @@ +package com.baiye.modules.system.service.impl; + +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.feign.AssignDataClient; +import com.baiye.feign.SourceClueClient; +import com.baiye.http.CommonResponse; +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.modules.system.domain.*; +import com.baiye.modules.system.service.dto.OrganizeMemberDistributionDTO; +import com.baiye.modules.system.service.dto.OrganizeSaveDTO; +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.AverageDataUtil; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@RequiredArgsConstructor +@Slf4j +public class OrganizeServiceImpl implements OrganizeService { + + private final OrganizeRepository organizeRepository; + private final OrganizeMapper organizeMapper; + private final OrganizeUserMapper organizeUserMapper; + private final OrganizeUserRepository organizeUserRepository; + private final AssignDataClient assignDataClient; + private final SourceClueClient sourceClueClient; + private final TaskRepository taskRepository; + private final UserService userService; + private final LabelService labelService; + + + /** + * 管理员分配任务 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseEntity saveOrganizeDistribution(OrganizeSaveDTO organizeSaveDTO) { + Long userId = SecurityUtils.getCurrentUserId(); + List organizeList = organizeSaveDTO.getOrganizeList(); + List deptIds = new ArrayList<>(); + List resourceList = new ArrayList<>(); + List weights = new ArrayList<>(); + for (Organize organize : organizeList) { + organize.setTaskId(organizeSaveDTO.getTaskId()); + organize.setTaskStatus(0); + organize.setCreateBy(userId); + organize.setOrganizeTaskName(organizeSaveDTO.getOrganizeTaskName()); + Organize saveOrganize = organizeRepository.save(organize); + OrganizeUser organizeUser = new OrganizeUser(); + organizeUser.setOrganizeId(saveOrganize.getId()); + organizeUser.setUserId(saveOrganize.getUserId()); + organizeUser.setIsLeader(true); + organizeUser.setCreateBy(saveOrganize.getCreateBy()); + organizeUserRepository.save(organizeUser); + deptIds.add(saveOrganize.getId()); + List clueList = sourceClueClient.queryList(organizeSaveDTO.getTaskId()).getBody(); + for (Clue clue : clueList) { + resourceList.add(clue.getId()); + } + //任务状态更新 + taskRepository.updateIsDistribution(1, organizeSaveDTO.getTaskId()); + weights.add(saveOrganize.getRatio()); + } + //总管理员给小组分配任务 + DistributeDTO distributeDTO = new DistributeDTO(); + distributeDTO.setDeptIds(deptIds); + distributeDTO.setResourceList(resourceList); + 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); + } + + /** + * 查询组 + * @param organizeQueryCriteria + * @return + */ + @Override + public List queryAll(OrganizeQueryCriteria organizeQueryCriteria) { + List organizeDtos = organizeMapper.toDto(organizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder))); + for (OrganizeDto organizeDto : organizeDtos) { + //小组下的成员信息 + List userDtoList = selectOrganizeUser(organizeDto.getId()); + organizeDto.setUserList(userDtoList); + // 小组的任务信息 + Task task = taskRepository.findById(organizeDto.getTaskId()).orElseGet(Task::new); + organizeDto.setOrganizeTask(task); + } + return organizeDtos; + } + + /** + * 查询组长下任务列表 + */ + @Override + public HashMap queryLeaderTaskList(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) { + Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); + HashMap hashMap = new HashMap<>(); + List> organizeDtoList = new ArrayList<>(); +// Long userId = SecurityUtils.getCurrentUserId(); + Long userId = 5L; + 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) { + 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); + } + } + } + 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); + } + + /** + * 组长分配任务 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseEntity saveMemberDistribution(OrganizeMemberDistributionDTO organizeMemberDistributionDTO) { + List userIds = organizeMemberDistributionDTO.getUserIds(); + Long organizeId = organizeMemberDistributionDTO.getOrganizeId(); + // 新增小组成员 + for (Long userId : userIds) { + OrganizeUser organizeUser = new OrganizeUser(); + organizeUser.setUserId(userId); + organizeUser.setOrganizeId(organizeId); + organizeUserRepository.save(organizeUser); + } + List clueIds = new ArrayList<>(); + List clueList = sourceClueClient.queryOrganizeIdList(organizeId).getBody(); + for (Clue clue : clueList) { + clueIds.add(clue.getId()); + } + //小组内资源分配 + //Map> : 用户id -> 资源ID集合 + List>> maps = AverageDataUtil.averageData(clueIds, userIds); + sourceClueClient.batchUpdateUserId(maps); + //更新小组任务信息 + Organize updateOrganize = organizeRepository.findById(organizeMemberDistributionDTO.getOrganizeId()).orElseGet(Organize::new); + updateOrganize.setTaskStatus(1); + updateOrganize.setBeginTime(organizeMemberDistributionDTO.getBeginTime()); + updateOrganize.setEndTime(organizeMemberDistributionDTO.getEndTime()); + organizeRepository.save(updateOrganize); + return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK); + } + + /** + * 查询用户列表,选取组员 + */ + @Override + public List selectMemberList(OrganizeQueryCriteria organizeQueryCriteria) { + //查询所有用户 + List userDtoList = userService.queryAll(new UserQueryCriteria()); + // 任务内组员用户ID集合 + List userList = new ArrayList<>(); + //查询任务下的所有组员用户 + List organizeDtos = organizeMapper.toDto(organizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder))); + for (OrganizeDto organizeDto : organizeDtos) { + List OrganizeUserList = organizeUserRepository.findByOrganizeId(organizeDto.getId()); + for (OrganizeUser organizeUser : OrganizeUserList) { + userList.add(organizeUser.getUserId()); + } + } + // 去除任务内重复的用户 + for (int i = 0; i < userDtoList.size(); i++) { + for (Long userId : userList) { + if (userId == userDtoList.get(i).getId()){ + userDtoList.remove(i); + } + } + } + return userDtoList; + } + + /** + * 查询客户信息 + */ + @Override + public Map queryMember(ClueQueryCriteria clueQueryCriteria,Pageable pageable) { + Long userId = SecurityUtils.getCurrentUserId(); + clueQueryCriteria.setMemberId(userId); + clueQueryCriteria.setPage(pageable.getPageNumber()); + clueQueryCriteria.setSize(pageable.getPageSize()); + return sourceClueClient.queryAll(clueQueryCriteria).getBody(); + } + + /** + * 小组id查询组员用户信息 + */ + public List selectOrganizeUser(Long organizeId){ + List list = new ArrayList<>(); + List userIdList = organizeUserRepository.findByOrganizeId(organizeId); + for (OrganizeUser userIds : userIdList) { + UserDto user = userService.findById(userIds.getUserId()); + list.add(user); + } + return list; + } + +} 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 new file mode 100644 index 00000000..f829b91f --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/TaskServiceImpl.java @@ -0,0 +1,117 @@ +package com.baiye.modules.system.service.impl; + +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.http.CommonResponse; +import com.baiye.http.ResponseCode; +import com.baiye.modules.system.domain.Organize; +import com.baiye.modules.system.domain.OrganizeUser; +import com.baiye.modules.system.domain.Task; +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.OrganizeService; +import com.baiye.modules.system.service.TaskService; +import com.baiye.modules.system.service.UserService; +import com.baiye.modules.system.service.dto.TaskDto; +import com.baiye.modules.system.service.dto.TaskQueryCriteria; +import com.baiye.modules.system.service.dto.UserDto; +import com.baiye.modules.system.service.mapstruct.TaskMapper; +import com.baiye.util.PageUtil; +import com.baiye.util.QueryHelp; +import com.baiye.util.SecurityUtils; +import lombok.RequiredArgsConstructor; +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 javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class TaskServiceImpl implements TaskService { + + private final TaskRepository taskRepository; + private final TaskMapper taskMapper; + private final OrganizeRepository organizeRepository; + private final OrganizeUserRepository organizeUserRepository; + private final UserService userService; + + @Override + public ResponseEntity saveTask(Task task) { + task.setIsDistribution(DefaultNumberConstants.ZERO_NUMBER); + taskRepository.save(task); + return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK); + } + + /** + *(分页)查询任务信息(默认查询列表) + */ + @Override + public Object queryAll(TaskQueryCriteria taskQueryCriteria, Pageable pageable) { + Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); + Long userId = SecurityUtils.getCurrentUserId(); + taskQueryCriteria.setCreateBy(userId); + 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); +// List organizeList = organizeRepository.findByTaskId(taskDto.getId()); +// for (Organize organize : organizeList) { +// List userDtoList = selectOrganizeUser(organize.getId()); +// organize.setUserList(userDtoList); +// } +// taskDto.setOrganizeList(organizeList); + + } + return PageUtil.toPage(map); + } + + /** + * 查询任务 + */ + @Override + public List query(TaskQueryCriteria taskQueryCriteria) { + Sort sort = Sort.by(Sort.Direction.ASC, "createTime"); + List taskDtos = taskMapper.toDto(taskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, taskQueryCriteria, criteriaBuilder),sort)); + for (TaskDto taskDto : taskDtos) { +// //任务下的小组信息加入 + selectOrganizeUser(taskDto); +// List organizeList = organizeRepository.findByTaskId(taskDto.getId()); +// for (Organize organize : organizeList) { +// List userDtoList = selectOrganizeUser(organize.getId()); +// organize.setUserList(userDtoList); +// } +// taskDto.setOrganizeList(organizeList); + } + return taskDtos; + } + + /** + * 小组id查询 组长用户信息 + * @return + */ + public void selectOrganizeUser(TaskDto taskDto){ + + //任务下的小组信息加入 + List organizeList = organizeRepository.findByTaskId(taskDto.getId()); + for (Organize organize : organizeList) { + List list = new ArrayList<>(); + List userIdList = organizeUserRepository.findByOrganizeId(organize.getId()); + for (OrganizeUser userIds : userIdList) { + //判断是否为组长 + if (userIds.getIsLeader()) { + UserDto user = userService.findById(userIds.getUserId()); + list.add(user); + } + } + organize.setUserList(list); + } + taskDto.setOrganizeList(organizeList); + } + +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/OrganizeMapper.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/OrganizeMapper.java new file mode 100644 index 00000000..e2e2cdc2 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/OrganizeMapper.java @@ -0,0 +1,11 @@ +package com.baiye.modules.system.service.mapstruct; + +import com.baiye.model.base.BaseMapper; +import com.baiye.modules.system.domain.Organize; +import com.baiye.modules.system.service.dto.OrganizeDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface OrganizeMapper extends BaseMapper { +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/OrganizeUserMapper.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/OrganizeUserMapper.java new file mode 100644 index 00000000..72eed287 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/OrganizeUserMapper.java @@ -0,0 +1,13 @@ +package com.baiye.modules.system.service.mapstruct; + +import com.baiye.model.base.BaseMapper; +import com.baiye.modules.system.domain.Organize; +import com.baiye.modules.system.domain.OrganizeUser; +import com.baiye.modules.system.service.dto.OrganizeDto; +import com.baiye.modules.system.service.dto.OrganizeUserDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface OrganizeUserMapper extends BaseMapper { +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/TaskMapper.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/TaskMapper.java new file mode 100644 index 00000000..92477ff8 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/mapstruct/TaskMapper.java @@ -0,0 +1,31 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.baiye.modules.system.service.mapstruct; + +import com.baiye.model.base.BaseMapper; +import com.baiye.modules.system.domain.Dept; +import com.baiye.modules.system.domain.Task; +import com.baiye.modules.system.service.dto.DeptDto; +import com.baiye.modules.system.service.dto.TaskDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author YQY +*/ +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface TaskMapper extends BaseMapper { +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/util/AverageDataUtil.java b/manage/ad-platform-management/src/main/java/com/baiye/util/AverageDataUtil.java new file mode 100644 index 00000000..9b3ed2a7 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/util/AverageDataUtil.java @@ -0,0 +1,145 @@ +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 lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import java.util.*; + +/** + * 平均分配算法 + */ +@Slf4j +public class AverageDataUtil { + + + /** + * 定义存储待分配数据集合 + */ + private static List list = Lists.newArrayList(); + + /** + * 定义存储分组数据的结构,Map去除泛型,适配多种数据类型格式,使用时需注意 + */ + private static List>> los = Lists.newArrayList(); + + /** + * 供外部调用的平均分配方法 + * + * @param visitorIds 资源集合 + * @param sellerIds 小组人员集合 + * @return List + */ + public static List>> averageData(List visitorIds, List sellerIds) { + initCollections(visitorIds, sellerIds); + if (visitorIds.size() >= sellerIds.size()) { + groupByData(los.size()); + return getMaps(); + } else { + groupByData(list.size()); + return getMaps(); + } + } + + /** + * 返回数据,清空静态缓存 + * + * @return List + */ + @NotNull + private static List>> getMaps() { + List>> listMap = Lists.newArrayList(); + listMap.addAll(los); + //清空静态数据 + los = Lists.newArrayList(); + list = Lists.newArrayList(); + return listMap; + } + + /** + * 分配数据 + * + * @param size 分组大小 + */ + private static void groupByData(int size) { + List augmented = list; + + List> lists = chunk2(augmented, size); + + for (int i = 0; i < size; i++) { + Map map = los.get(i); + Iterator iterator = map.keySet().iterator(); + if (iterator.hasNext()) { + Long next = (Long) iterator.next(); + map.put(next, lists.get(i)); + } + } + } + + /** + * 初始化集合数据 + * + * @param visitorIds 待分配数据 + * @param sellerIds 分配目标 + */ + private static void initCollections(List visitorIds, List sellerIds) { + //每次调用前清空数据 + if (list.size() > 0) { + list = Lists.newArrayList(); + } + if (los.size() > 0) { + los = Lists.newArrayList(); + } + list.addAll(visitorIds); + List>> list1 = new ArrayList<>(); + for (Long sellerId : sellerIds) { + Map> map = new HashMap<>(16); + List list = new ArrayList<>(); + map.put(sellerId, list); + list1.add(map); + } + los.addAll(list1); + } + + /** + * 分组数据-核心算法,勿动 + * + * @param list 需分配数据 + * @param group 分组大小 + * @param 分组数据泛型 + * @return 分组结果 + */ + private static List> chunk2(List list, int group) { + if (CollectionUtils.isEmpty(list)) { + return Lists.newArrayList(); + } + List> result = Lists.newArrayList(); + Map> temp = Maps.newHashMap(); + for (int i = 0; i < list.size(); i++) { + if (temp.containsKey(i % group)) { + Set ts = temp.get(i % group); + ts.add(list.get(i)); + temp.put(i % group, ts); + } else { + Set ts = Sets.newHashSet(); + ts.add(list.get(i)); + temp.put(i % group, ts); + } + } + for (Set ts : temp.values()) { + result.add(Lists.newArrayList(ts)); + } + return result; + } + +} diff --git a/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java b/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java index 261bec25..e1bbcd61 100644 --- a/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java +++ b/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; /** @@ -31,11 +32,11 @@ public class AssignDataService { int size = distribution.getDeptIds().size(); List deptIds = distribution.getDeptIds(); List weights = distribution.getWeights(); - List resourceList = distribution.getResourceList(); + List resourceList = distribution.getResourceList(); // 数据打乱 Collections.shuffle(resourceList); // 去除重复数据 - List arrayList = + List arrayList = Lists.newArrayList(Sets.newHashSet(resourceList)); int resourceSize = arrayList.size(); // 集合求和 @@ -47,7 +48,7 @@ public class AssignDataService { Map deptMap = deptIds.stream().collect(Collectors.toMap(key -> key, key -> weights.get(deptIds.indexOf(key)))); Map longDoubleMap = MapUtil.sortByValue(deptMap, Boolean.FALSE); - List value; + List value; List list = new ArrayList<>(); DistributeResponseDTO distributeResponseDTO; int num = DefaultNumberConstants.ZERO_NUMBER;