浏览代码

Merge branch 'master' into feat-teammanage-20211207

lixuesong 3 年之前
父节点
当前提交
29f3a7d002
共有 17 个文件被更改,包括 1328 次插入4 次删除
  1. 13 0
      db/v2.0/1202.sql
  2. 12 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysDeptController.java
  3. 61 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysDeptController1.java
  4. 136 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskTypeConfigController.java
  5. 13 4
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskTypeController.java
  6. 57 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDeptTaskTypeConfig.java
  7. 78 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/base/HnqzPage.java
  8. 39 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/WmDeptTaskTypeConfigDTO.java
  9. 70 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/WmDeptTaskTypeConfigJsonDTO.java
  10. 23 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/DeptLevelEnum.java
  11. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmDeptTaskTypeConfigMapper.java
  12. 19 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmTaskMapper.java
  13. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysDeptService.java
  14. 64 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDeptTaskTypeConfigService.java
  15. 55 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptServiceImpl.java
  16. 570 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskTypeConfigServiceImpl.java
  17. 93 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskMapper.xml

+ 13 - 0
db/v2.0/1202.sql

@@ -0,0 +1,13 @@
+-- 新增 部门任务类型配置
+CREATE TABLE `wm_dept_task_type_config`
+(
+    `id`             int NOT NULL AUTO_INCREMENT,
+    `dept_id`        int NOT NULL COMMENT '组织机构ID',
+    `task_type_json` text     DEFAULT NULL COMMENT '任务类型配置',
+    `create_time`    datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
+    `create_user`    int      DEFAULT NULL COMMENT '创建人',
+    `update_time`    datetime DEFAULT NULL COMMENT '更新时间',
+    `update_user`    int      DEFAULT NULL COMMENT '更新人',
+    PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='部门任务类型配置';

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysDeptController.java

@@ -33,6 +33,7 @@ import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import io.swagger.annotations.Api;
+import io.swagger.models.auth.In;
 import lombok.AllArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -430,4 +431,15 @@ public class SysDeptController {
 	public R convertToName() {
 		return R.ok(sysDeptService.convertToName());
 	}
+
+	/**
+	 * 分页查询药企和CSO代理商
+	 *
+	 * @param deptName
+	 * @return
+	 */
+	@GetMapping("/list-ent-and-agent")
+	public R<?> listEntAndAgent(Page page, String deptName) {
+		return R.ok(sysDeptService.listEntAndAgent(page, deptName));
+	}
 }

+ 61 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysDeptController1.java

@@ -0,0 +1,61 @@
+/*
+ *
+ *      Copyright (c) 2018-2025, hnqz All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the pig4cloud.com developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: hnqz
+ *
+ */
+
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部门管理 前端控制器
+ * </p>
+ *
+ * @author hnqz
+ * @since 2018-01-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/depts")
+@Api(value = "dept", tags = "部门管理模块")
+public class SysDeptController1 {
+
+	private final SysDeptService sysDeptService;
+
+	/**
+	 * 分页查询药企和CSO代理商
+	 *
+	 * @param deptName
+	 * @return
+	 */
+	@GetMapping("/list-ent/agent")
+	public R<?> listEntAndAgent(
+			@RequestParam(value = "current") Integer current,
+			@RequestParam(value = "size") Integer size,
+			@RequestParam(value = "deptName", required = false) String deptName) {
+		return R.ok(sysDeptService.listEntAndAgent(new Page(current,size), deptName));
+	}
+}

+ 136 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskTypeConfigController.java

@@ -0,0 +1,136 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeConfig;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigJsonDTO;
+import com.qunzhixinxi.hnqz.admin.service.SysDeptRelationService;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeConfigService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * 部门任务类型配置控制层
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 11:03
+ */
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dept-task-type-config")
+public class WmDeptTaskTypeConfigController {
+
+	private WmDeptTaskTypeConfigService wmDeptTaskTypeConfigService;
+
+	private SysDeptRelationService sysDeptRelationService;
+
+	/**
+	 * 保存任务类型配置
+	 *
+	 * @param wmDeptTaskTypeConfigDTO
+	 * @return
+	 */
+	@SysLog("保存任务类型配置")
+	@PostMapping("/save")
+	public R<?> saveDeptTaskTypeConfig(@Validated @RequestBody WmDeptTaskTypeConfigDTO wmDeptTaskTypeConfigDTO) {
+		wmDeptTaskTypeConfigService.saveDeptTaskTypeConfig(wmDeptTaskTypeConfigDTO);
+		return R.ok();
+	}
+
+	/**
+	 * 查询任务类型配置
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	@GetMapping("/{deptId}")
+	public R<WmDeptTaskTypeConfigDTO> getDeptTaskTypeConfig(@PathVariable("deptId") Integer deptId) {
+		return R.ok(wmDeptTaskTypeConfigService.getDeptTaskTypeConfig(deptId));
+	}
+
+	/**
+	 * 是否配置了企业的任务类型配置
+	 *
+	 * @return
+	 */
+	@GetMapping("/is-config")
+	public R<?> isConfig() {
+		Map<String, Object> resultMap = new HashMap<>();
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+		AtomicBoolean configed = new AtomicBoolean(false);
+		// 本级dept对应的任务类型
+		WmDeptTaskTypeConfig deptTaskTypeConfig = wmDeptTaskTypeConfigService.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, deptId));
+		if (deptTaskTypeConfig != null) {
+			List<WmDeptTaskTypeConfigJsonDTO> configJsonDTOList =
+					JSON.parseArray(deptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+			configJsonDTOList.forEach(configJsonDTO -> {
+				if (configJsonDTO.getQualifiedTask()) {
+					configed.set(true);
+				}
+			});
+		}
+		// 查询上级的deptId
+		SysDeptRelation ancestorDeptRelation = sysDeptRelationService.getOne(Wrappers.<SysDeptRelation>lambdaQuery()
+				.eq(SysDeptRelation::getDescendant, deptId)
+				.ne(SysDeptRelation::getAncestor, deptId)
+				.ne(SysDeptRelation::getAncestor, 1));
+		// 上级dept对应任务类型配置
+		if (ancestorDeptRelation != null) {
+			WmDeptTaskTypeConfig ancestorDeptTaskTypeConfig = wmDeptTaskTypeConfigService.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+					.eq(WmDeptTaskTypeConfig::getDeptId, ancestorDeptRelation.getAncestor()));
+			if (ancestorDeptTaskTypeConfig != null) {
+				List<WmDeptTaskTypeConfigJsonDTO> ancestorConfigJsonDTOList =
+						JSON.parseArray(ancestorDeptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+				ancestorConfigJsonDTOList.stream()
+						.forEach(configJsonDTO -> {
+							if (configJsonDTO.getQualifiedTask() && configJsonDTO.getAssociateLower()) {
+								configed.set(true);
+							}
+						});
+			}
+		}
+		resultMap.put("config", configed.get());
+		return R.ok(resultMap);
+	}
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param page         分页参数
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus   任务状态
+	 * @return
+	 */
+	@GetMapping("/list-task")
+	public R<IPage<WmTask>> listTaskByDeptTaskType(Page<WmTask> page, String taskTypeName, String[] taskStatus) {
+		if (ArrayUtil.isEmpty(taskStatus)) {
+			return R.failed("taskStatus不能为空");
+		}
+
+		return R.ok(wmDeptTaskTypeConfigService.listTaskByConfig(page, taskTypeName, taskStatus));
+	}
+
+}

+ 13 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskTypeController.java

@@ -18,10 +18,8 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskTypeEntRef;
@@ -56,11 +54,10 @@ import java.util.*;
 public class WmTaskTypeController {
 
 	private final WmTaskTypeService wmTaskTypeService;
-	private final SysDeptService sysDeptService;
 	private final WmDaDrugEntService wmDaDrugEntService;
 	private final WmDaAgentService wmDaAgentService;
 	private final WmTaskTypeEntRefService wmTaskTypeEntRefService;
-
+	private final WmDeptTaskTypeConfigService wmDeptTaskTypeConfigService;
 
 	/**
 	 * 分页查询
@@ -305,4 +302,16 @@ public class WmTaskTypeController {
 
 		return wmTaskTypeService.getTaskTypeTree(description);
 	}
+
+	/**
+	 * 查询任务类型树
+	 *
+	 * @param taskTypeName
+	 * @return
+	 */
+	@GetMapping("/list-task-type-tree")
+	public R<?> listConfigedTaskTypeTree(String taskTypeName) {
+		List<Map<String, Object>> list = wmDeptTaskTypeConfigService.listConfigedTaskTypeTree(taskTypeName);
+		return R.ok(list);
+	}
 }

+ 57 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDeptTaskTypeConfig.java

@@ -0,0 +1,57 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 部门任务类型配置实体
+ *
+ * @author lixuesong
+ * @date 2021年12月02日 18:56
+ */
+@Data
+@TableName("wm_dept_task_type_config")
+@EqualsAndHashCode(callSuper = true)
+public class WmDeptTaskTypeConfig extends Model<WmDeptTaskTypeConfig> {
+
+	/**
+	 * 主键id
+	 */
+	@TableId
+	private Integer id;
+
+	/**
+	 * 部门id
+	 */
+	private Integer deptId;
+
+	/**
+	 * 任务类型配置
+	 */
+	private String taskTypeJson;
+
+	/**
+	 * 创建时间
+	 */
+	private LocalDateTime createTime;
+
+	/**
+	 * 创建人
+	 */
+	private Integer createUser;
+
+	/**
+	 * 更新时间
+	 */
+	private LocalDateTime updateTime;
+
+	/**
+	 * 更新人
+	 */
+	private Integer updateUser;
+}

+ 78 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/base/HnqzPage.java

@@ -0,0 +1,78 @@
+package com.qunzhixinxi.hnqz.admin.entity.base;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * {@code HnqzPage}
+ * <p>
+ * 分页结果
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/11 16:46
+ */
+@Data
+public final class HnqzPage<T> implements Serializable {
+
+    private static final long serialVersionUID = 4263748953110453274L;
+
+    public HnqzPage(Page<T> page) {
+        this.records = page.getRecords();
+        this.total = page.getTotal();
+        this.current = page.getCurrent();
+        this.size = page.getSize();
+        this.pages = page.getPages();
+        this.hasNext = page.hasNext();
+        this.hasPrevious = page.hasPrevious();
+    }
+
+    /**
+     * 记录
+     */
+    private final List<T> records;
+
+    /**
+     * 记录总数
+     */
+    private final Long total;
+
+    /**
+     * 分页记录数
+     */
+    private final Long size;
+
+    /**
+     * 是否是最后一页
+     */
+    private final Boolean hasNext;
+
+    /**
+     * 是否是第一页
+     */
+    private final Boolean hasPrevious;
+
+    /**
+     * 当前页
+     */
+    private final Long current;
+
+    /**
+     * 总共多少页
+     */
+    private final Long pages;
+
+    /**
+     * 静态方法 封装page
+     *
+     * @param page 分页结果
+     * @param <T>  记录类型
+     * @return gulop page
+     */
+    public static <T> HnqzPage<T> of(Page<T> page) {
+        return new HnqzPage<>(page);
+    }
+}

+ 39 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/WmDeptTaskTypeConfigDTO.java

@@ -0,0 +1,39 @@
+package com.qunzhixinxi.hnqz.admin.entity.dto;
+
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.base.BaseEntity;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 部门任务类型配置DTO
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 10:28
+ */
+@Data
+public class WmDeptTaskTypeConfigDTO {
+
+	/**
+	 * 主键id
+	 */
+	private Integer id;
+
+	/**
+	 * 部门id
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Integer deptId;
+
+	/**
+	 * 任务配置列表
+	 */
+	@Valid
+	@NotEmpty(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private List<WmDeptTaskTypeConfigJsonDTO> configList;
+
+}

+ 70 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/WmDeptTaskTypeConfigJsonDTO.java

@@ -0,0 +1,70 @@
+package com.qunzhixinxi.hnqz.admin.entity.dto;
+
+import com.qunzhixinxi.hnqz.admin.entity.base.BaseEntity;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 部门任务类型配置json DTO
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 10:33
+ */
+@Data
+public class WmDeptTaskTypeConfigJsonDTO {
+
+	/**
+	 * 任务类型id
+	 */
+	@NotBlank(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private String taskTypeId;
+
+	/**
+	 * 任务类型名称
+	 */
+	@NotBlank(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private String taskTypeName;
+
+	/**
+	 * 任务积分
+	 */
+	private Integer score;
+
+	/**
+	 * 是否限定任务
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Boolean qualifiedTask = false;
+
+	/**
+	 * 是否勾选兼职学术信息沟通专员状态
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Boolean zbdbStatusSelect = false;
+
+	/**
+	 * 是否启用兼职学术信息沟通专员状态
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Boolean zbdbStatusEnable;
+
+	/**
+	 * 是否勾选全职学术信息沟通专员状态
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Boolean yydbStatusSelect = false;
+
+	/**
+	 * 是否启用全职学术信息沟通专员状态
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Boolean yydbStatusEnable = true;
+
+	/**
+	 * 是否关联下级
+	 */
+	@NotNull(groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private Boolean associateLower = false;
+}

+ 23 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/DeptLevelEnum.java

@@ -0,0 +1,23 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+/**
+ * 部门级别
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 14:13
+ */
+public enum DeptLevelEnum {
+
+	// 1-要易业务管理平台,2-药企,3-一级CSO,4-二级CSO,5-CRO
+	ADMIN(1), ENT(2), CSO_L1(3), CSO_L2(4), CRO(5);
+
+	private Integer val;
+
+	DeptLevelEnum(Integer val) {
+		this.val = val;
+	}
+
+	public Integer getVal() {
+		return val;
+	}
+}

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmDeptTaskTypeConfigMapper.java

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 部门任务类型配置Mapper
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 10:10
+ */
+@Mapper
+public interface WmDeptTaskTypeConfigMapper extends BaseMapper<WmDeptTaskTypeConfig> {
+}

+ 19 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmTaskMapper.java

@@ -19,6 +19,7 @@ package com.qunzhixinxi.hnqz.admin.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
@@ -110,6 +111,24 @@ public interface WmTaskMapper extends DataScopeMapper<WmTask> {
 
 	 IPage<WmTask> getWmTaskList(Page page, @Param("query") WmTask wmTask);
 
+	/**
+	 * 根据配置查询任务
+	 *
+	 * @param page
+	 * @param wmTask
+	 * @return
+	 */
+ 	IPage<WmTask> listWmTaskByConfig(Page<WmTask> page, @Param("query") WmTask wmTask);
+
+	/**
+	 * 根据配置查询任务
+	 *
+	 * @param page
+	 * @param queryWrapper
+	 * @return
+	 */
+	IPage<WmTask> listWmTaskByWrapper(Page<WmTask> page, @Param(Constants.WRAPPER) QueryWrapper<WmTask> queryWrapper);
+
 	List<Map<String,String>> PackageIsFinishByTask(@Param("query") WmTask wmTask);
 
 	Map<String, Timestamp> getMaxCreateTime(@Param("query") WmTask wmTask);

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysDeptService.java

@@ -19,6 +19,7 @@
 
 package com.qunzhixinxi.hnqz.admin.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.api.dto.DeptTree;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
@@ -100,4 +101,13 @@ public interface SysDeptService extends IService<SysDept> {
 	List convertToName();
 
 	List getChildDept(SysDept sysDept);
+
+	/**
+	 * 分页查询药企和CSO代理商
+	 *
+	 * @param page 分页参数
+	 * @param deptName 部门名称
+	 * @return
+	 */
+	Map<String, Object> listEntAndAgent(Page page, String deptName);
 }

+ 64 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDeptTaskTypeConfigService.java

@@ -0,0 +1,64 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeConfig;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigDTO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 部门任务类型配置服务
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 10:13
+ */
+public interface WmDeptTaskTypeConfigService extends IService<WmDeptTaskTypeConfig> {
+
+	/**
+	 * 保存任务类型配置
+	 *
+	 * @param wmDeptTaskTypeConfigDTO
+	 */
+	void saveDeptTaskTypeConfig(WmDeptTaskTypeConfigDTO wmDeptTaskTypeConfigDTO);
+
+	/**
+	 * 查询任务类型配置
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	WmDeptTaskTypeConfigDTO getDeptTaskTypeConfig(Integer deptId);
+
+	/**
+	 * 查询任务类型树
+	 *
+	 * @param taskTypeName
+	 * @return
+	 */
+	List<Map<String, Object>> listConfigedTaskTypeTree(String taskTypeName);
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param page 分页参数
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus 任务状态
+	 * @return
+	 */
+	IPage<WmTask> listTaskByConfig(Page<WmTask> page, String taskTypeName, String[] taskStatus);
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param page 分页参数
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus 任务状态
+	 * @return
+	 */
+	IPage<WmTask> listTaskByDeptTaskType(Page<WmTask> page, String taskTypeName, String[] taskStatus);
+
+}

+ 55 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptServiceImpl.java

@@ -19,13 +19,20 @@
 
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.dto.DeptTree;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
 import com.qunzhixinxi.hnqz.admin.api.vo.TreeUtil;
+import com.qunzhixinxi.hnqz.admin.entity.base.HnqzPage;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.DeptLevelEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmRelationMapper;
@@ -34,6 +41,7 @@ import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScope;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -452,4 +460,51 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 		return deptMapper.selectEntCodeByLevelId(levelId, level);
 	}
 
+	/**
+	 * 分页查询药企和CSO代理商
+	 *
+	 * @param page 分页参数
+	 * @param deptName 部门名称
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> listEntAndAgent(Page page, String deptName) {
+		// 药企
+		LambdaQueryWrapper<SysDept> entWrapper = Wrappers.lambdaQuery();
+		entWrapper.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val());
+		entWrapper.eq(SysDept::getLevel, DeptLevelEnum.ENT.getVal());
+		if (StringUtils.isNotBlank(deptName)) {
+			entWrapper.like(SysDept::getName, deptName);
+		}
+		Page<SysDept> entPage = this.page(page, entWrapper);
+		List<Map<String, Object>> entMapList = entPage.getRecords().stream().map(sysDept -> {
+			Map<String, Object> deptMap = MapUtil.newHashMap(2);
+			deptMap.put("deptId", sysDept.getDeptId());
+			deptMap.put("name", sysDept.getName());
+			return deptMap;
+		}).collect(Collectors.toList());
+		Page<Map<String, Object>> entHnqzPage = BeanUtil.copyProperties(entPage, Page.class);
+		entHnqzPage.setRecords(entMapList);
+
+		// CSO
+		LambdaQueryWrapper<SysDept> csoWrapper = Wrappers.lambdaQuery();
+		csoWrapper.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val());
+		csoWrapper.in(SysDept::getLevel, DeptLevelEnum.CSO_L1.getVal(), DeptLevelEnum.CSO_L2.getVal());
+		if (StringUtils.isNotBlank(deptName)) {
+			csoWrapper.like(SysDept::getName, deptName);
+		}
+		Page<SysDept> csoPage = this.page(page, csoWrapper);List<Map<String, Object>> csoMapList = csoPage.getRecords().stream().map(sysDept -> {
+			Map<String, Object> deptMap = MapUtil.newHashMap(2);
+			deptMap.put("deptId", sysDept.getDeptId());
+			deptMap.put("name", sysDept.getName());
+			return deptMap;
+		}).collect(Collectors.toList());
+		Page<Map<String, Object>> csoHnqzPage = BeanUtil.copyProperties(entPage, Page.class);
+		csoHnqzPage.setRecords(csoMapList);
+
+		Map<String, Object> resultMap = MapUtil.newHashMap(2);
+		resultMap.put("entPage", new HnqzPage<>(entHnqzPage));
+		resultMap.put("csoPage", new HnqzPage<>(csoHnqzPage));
+		return resultMap;
+	}
 }

+ 570 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskTypeConfigServiceImpl.java

@@ -0,0 +1,570 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeConfig;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigJsonDTO;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.DeptLevelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmDaAgentMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmDaDrugEntMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmDeptTaskTypeConfigMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeConfigService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 部门任务类型配置服务
+ *
+ * @author lixuesong
+ * @date 2021年12月03日 10:14
+ */
+@Slf4j
+@AllArgsConstructor
+@Service
+public class WmDeptTaskTypeConfigServiceImpl extends ServiceImpl<WmDeptTaskTypeConfigMapper, WmDeptTaskTypeConfig> implements WmDeptTaskTypeConfigService {
+
+	private final WmTaskTypeService wmTaskTypeService;
+
+	private final WmScorePackageService wmScorePackageService;
+
+	private final SysDeptRelationMapper sysDeptRelationMapper;
+
+	private final WmDaDrugEntMapper wmDaDrugEntMapper;
+
+	private final WmTaskMapper wmTaskMapper;
+
+	private final SysDeptMapper sysDeptMapper;
+
+	private final WmDaAgentMapper wmDaAgentMapper;
+
+	/**
+	 * 兼职学术专员启用的任务类型
+	 */
+	private final String[] ENABLE_ZBDB_STATUS_ARR = {"医院拜访", "商业公司拜访", "药店拜访", "电子名片分享", "产品相册分享", "学术信息交流",
+			"受众打开产品相册", "受众阅读文章"};
+
+	/**
+	 * 任务类型Map
+	 */
+	private static Map<String, List<String>> BASE_TASK_TYPE_MAP = new LinkedHashMap<>();
+
+	static {
+		List<String> meetingList = new ArrayList<String>() {{
+			add("医院科室推广会");
+			add("区域学术沙龙");
+			add("城市卫星会");
+			add("省级学科年会");
+		}};
+		BASE_TASK_TYPE_MAP.put("会议举办", meetingList);
+		List<String> interviewList = new ArrayList<String>() {{
+			add("一对一专访");
+		}};
+		BASE_TASK_TYPE_MAP.put("一对一专访", interviewList);
+		List<String> customerList = new ArrayList<String>() {{
+			add("医院拜访");
+			add("商业公司拜访");
+			add("药店拜访");
+		}};
+		BASE_TASK_TYPE_MAP.put("客户拜访", customerList);
+		List<String> producrList = new ArrayList<String>() {{
+			add("产品相册分享");
+			add("电子名片分享");
+		}};
+		BASE_TASK_TYPE_MAP.put("产品推广", producrList);
+		List<String> academicList = new ArrayList<String>() {{
+			add("学术信息交流");
+		}};
+		BASE_TASK_TYPE_MAP.put("学术信息交流", academicList);
+		List<String> marketList = new ArrayList<String>() {{
+			add("政策信息收集");
+			add("竞品信息收集");
+			add("库存信息收集");
+			add("医院信息收集");
+			add("商业公司信息收集");
+			add("产品使用信息收集");
+			add("药店调查");
+		}};
+		BASE_TASK_TYPE_MAP.put("市场信息收集", marketList);
+		List<String> medicineList = new ArrayList<String>() {{
+			add("专家咨询");
+			add("受试者管理");
+			add("医学撰写");
+			add("受试者招募");
+			add("数据管理");
+			add("统计分析");
+			add("临床监察");
+		}};
+		BASE_TASK_TYPE_MAP.put("医药研发服务", medicineList);
+	}
+
+	/**
+	 * 保存任务类型配置
+	 *
+	 * @param wmDeptTaskTypeConfigDTO
+	 */
+	@Override
+	public void saveDeptTaskTypeConfig(WmDeptTaskTypeConfigDTO wmDeptTaskTypeConfigDTO) {
+		// 判断是否已存在
+		int count = this.count(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, wmDeptTaskTypeConfigDTO.getDeptId()));
+		// 批量设置任务类型id设置为基础类型id
+		wmDeptTaskTypeConfigDTO.getConfigList().forEach(configJsonDTO -> {
+			// 查询任务名称对应的基础任务类型id
+			WmTaskType baseTaskType = wmTaskTypeService.getOne(Wrappers.<WmTaskType>lambdaQuery()
+					.eq(WmTaskType::getTaskTypeLevel, "1")
+					.eq(WmTaskType::getTaskTypeName, configJsonDTO.getTaskTypeName()));
+			configJsonDTO.setTaskTypeId(baseTaskType.getId());
+			// 判断并确保兼职任务类型未启用时不可选中
+			if (!ArrayUtil.contains(ENABLE_ZBDB_STATUS_ARR, configJsonDTO.getTaskTypeName())) {
+				configJsonDTO.setZbdbStatusEnable(false);
+				configJsonDTO.setZbdbStatusSelect(false);
+			}
+		});
+		if (count <= 0) {
+			// 新增
+			WmDeptTaskTypeConfig deptTaskTypeConfig = new WmDeptTaskTypeConfig();
+			deptTaskTypeConfig.setDeptId(wmDeptTaskTypeConfigDTO.getDeptId());
+			deptTaskTypeConfig.setTaskTypeJson(JSON.toJSONString(wmDeptTaskTypeConfigDTO.getConfigList()));
+			deptTaskTypeConfig.setCreateTime(LocalDateTime.now());
+			deptTaskTypeConfig.setCreateUser(SecurityUtils.getUser().getId());
+			this.save(deptTaskTypeConfig);
+		} else {
+			// 更新
+			WmDeptTaskTypeConfig deptTaskTypeConfig = new WmDeptTaskTypeConfig();
+			deptTaskTypeConfig.setDeptId(wmDeptTaskTypeConfigDTO.getDeptId());
+			deptTaskTypeConfig.setTaskTypeJson(JSON.toJSONString(wmDeptTaskTypeConfigDTO.getConfigList()));
+			deptTaskTypeConfig.setUpdateTime(LocalDateTime.now());
+			deptTaskTypeConfig.setUpdateUser(SecurityUtils.getUser().getId());
+			this.update(Wrappers.<WmDeptTaskTypeConfig>lambdaUpdate()
+					.eq(WmDeptTaskTypeConfig::getDeptId, deptTaskTypeConfig.getDeptId())
+					.set(WmDeptTaskTypeConfig::getTaskTypeJson, JSON.toJSONString(wmDeptTaskTypeConfigDTO.getConfigList()))
+					.set(WmDeptTaskTypeConfig::getUpdateTime, LocalDateTime.now())
+					.set(WmDeptTaskTypeConfig::getUpdateUser, SecurityUtils.getUser().getId()));
+		}
+	}
+
+	/**
+	 * 查询任务类型配置
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	@Override
+	public WmDeptTaskTypeConfigDTO getDeptTaskTypeConfig(Integer deptId) {
+		// 查询出当前dept对应的药企/代理商id
+		String durgentId = null;
+		SysDept dept = sysDeptMapper.selectById(deptId);
+		if (DeptLevelEnum.ENT.getVal().equals(dept.getLevel())) {
+			WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntMapper.selectOne(Wrappers.<WmDaDrugEnt>lambdaQuery()
+					.eq(WmDaDrugEnt::getDeptId, deptId)
+					.eq(WmDaDrugEnt::getDelFlag, DelEnum.NOT_DEL.val()));
+			durgentId = wmDaDrugEnt.getId();
+		} else {
+			WmDaAgent wmDaAgent = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
+					.eq(WmDaAgent::getDeptId, deptId)
+					.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.val()));
+			durgentId = wmDaAgent.getId();
+		}
+		List<WmTaskType> taskTypeList = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
+				.eq(WmTaskType::getDeptId, deptId)
+				.eq(WmTaskType::getRuleId, durgentId)
+				.eq(WmTaskType::getTaskEntId, durgentId));
+
+		WmDeptTaskTypeConfig deptTaskTypeConfig = this.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, deptId));
+
+		WmDeptTaskTypeConfigDTO deptTaskTypeConfigDTO = new WmDeptTaskTypeConfigDTO();
+		List<WmDeptTaskTypeConfigJsonDTO> deptTaskTypeConfigJsonDTOList = new ArrayList<>();
+		deptTaskTypeConfigDTO.setDeptId(deptId);
+		Map<String, WmDeptTaskTypeConfigJsonDTO> configMap = null;
+
+		// 若配置任务类型不为空,则设置复选框的选择状态,否则设置复选框为默认状态
+		if (deptTaskTypeConfig != null) {
+			deptTaskTypeConfigDTO.setId(deptTaskTypeConfig.getId());
+			List<WmDeptTaskTypeConfigJsonDTO> configJsonDTOList = JSON.parseArray(deptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+			configMap = configJsonDTOList.stream()
+					.distinct()
+					.collect(Collectors.toMap(WmDeptTaskTypeConfigJsonDTO::getTaskTypeName, wmDeptTaskTypeConfigJsonDTO -> wmDeptTaskTypeConfigJsonDTO));
+		}
+		// 以企业的任务类型数据为基础,进行任务类型配置数据的拼接
+		if (CollectionUtil.isNotEmpty(taskTypeList)) {
+			for (WmTaskType taskType : taskTypeList) {
+				WmDeptTaskTypeConfigJsonDTO deptTaskTypeConfigJsonDTO = null;
+				if (configMap != null) {
+					// 若配置存在,则填充
+					WmDeptTaskTypeConfigJsonDTO baseConfigJson = configMap.get(taskType.getTaskTypeName());
+					deptTaskTypeConfigJsonDTO = BeanUtil.copyProperties(baseConfigJson, WmDeptTaskTypeConfigJsonDTO.class);
+				} else {
+					// 若配置不存在则,只设置默认值为未勾选状态
+					deptTaskTypeConfigJsonDTO = new WmDeptTaskTypeConfigJsonDTO();
+				}
+				deptTaskTypeConfigJsonDTO.setTaskTypeId(taskType.getId());
+				deptTaskTypeConfigJsonDTO.setTaskTypeName(taskType.getTaskTypeName());
+				deptTaskTypeConfigJsonDTO.setScore(taskType.getScore());
+				if (ArrayUtil.contains(ENABLE_ZBDB_STATUS_ARR, taskType.getTaskTypeName())) {
+					deptTaskTypeConfigJsonDTO.setZbdbStatusEnable(true);
+				} else {
+					deptTaskTypeConfigJsonDTO.setZbdbStatusEnable(false);
+				}
+				deptTaskTypeConfigJsonDTOList.add(deptTaskTypeConfigJsonDTO);
+			}
+			deptTaskTypeConfigDTO.setConfigList(deptTaskTypeConfigJsonDTOList);
+		}
+
+		return deptTaskTypeConfigDTO;
+	}
+
+	/**
+	 * 查询任务类型树
+	 *
+	 * @param taskTypeName
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> listConfigedTaskTypeTree(String taskTypeName) {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+		// 查询已配置的任务类型
+		// 当前企业配置
+		WmDeptTaskTypeConfig deptTaskTypeConfig = this.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, deptId));
+		List<String> configTaskTypeIdList = null;
+		if (deptTaskTypeConfig != null) {
+			List<WmDeptTaskTypeConfigJsonDTO> configJsonDTOList = JSON.parseArray(deptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+			configTaskTypeIdList = configJsonDTOList.stream()
+					.filter(configJsonDTO -> configJsonDTO.getQualifiedTask())
+					.map(WmDeptTaskTypeConfigJsonDTO::getTaskTypeName)
+					.collect(Collectors.toList());
+		}
+		// 查询上级
+		SysDeptRelation ancestorDeptRelation = sysDeptRelationMapper.selectOne(Wrappers.<SysDeptRelation>lambdaQuery()
+				.eq(SysDeptRelation::getDescendant, deptId)
+				.ne(SysDeptRelation::getAncestor, deptId)
+				.ne(SysDeptRelation::getAncestor, 1));
+		List<String> ancestorConfigTaskTypeIdList = null;
+		if (ancestorDeptRelation != null) {
+			// 上级企业配置
+			WmDeptTaskTypeConfig ancestorDeptTaskTypeConfig = this.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+					.eq(WmDeptTaskTypeConfig::getDeptId, ancestorDeptRelation.getAncestor()));
+			if (ancestorDeptTaskTypeConfig != null) {
+				List<WmDeptTaskTypeConfigJsonDTO> ancestorConfigJsonDTOList = JSON.parseArray(ancestorDeptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+				ancestorConfigTaskTypeIdList = ancestorConfigJsonDTOList.stream()
+						.filter(configJsonDTO -> configJsonDTO.getQualifiedTask() && configJsonDTO.getAssociateLower())
+						.map(WmDeptTaskTypeConfigJsonDTO::getTaskTypeName)
+						.collect(Collectors.toList());
+			}
+		}
+		if (CollectionUtil.isEmpty(configTaskTypeIdList) && CollectionUtil.isEmpty(ancestorConfigTaskTypeIdList)) {
+			return new ArrayList<>();
+		}
+
+		// 查询出当前dept对应的任务类型(药企或药企给CSO的任务类型)
+		String durgentId = null;
+		SysDept dept = sysDeptMapper.selectById(deptId);
+		if (DeptLevelEnum.ENT.getVal().equals(dept.getLevel())) {
+			WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntMapper.selectOne(Wrappers.<WmDaDrugEnt>lambdaQuery()
+					.eq(WmDaDrugEnt::getDeptId, deptId)
+					.eq(WmDaDrugEnt::getDelFlag, DelEnum.NOT_DEL.val()));
+			durgentId = wmDaDrugEnt.getId();
+		} else {
+			WmDaAgent wmDaAgent = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
+					.eq(WmDaAgent::getDeptId, deptId)
+					.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.val()));
+			durgentId = wmDaAgent.getId();
+		}
+		// 查询企业对应的任务类型
+		LambdaQueryWrapper<WmTaskType> taskTypeWrapper = Wrappers.lambdaQuery();
+		taskTypeWrapper.eq(WmTaskType::getDeptId, deptId);
+		taskTypeWrapper.eq(WmTaskType::getRuleId, durgentId);
+		taskTypeWrapper.eq(WmTaskType::getTaskEntId, durgentId);
+		if (org.apache.commons.lang.StringUtils.isNotBlank(taskTypeName)) {
+			taskTypeWrapper.like(WmTaskType::getTaskTypeName, taskTypeName);
+		}
+
+		List<WmTaskType> taskTypeList = wmTaskTypeService.list(taskTypeWrapper);
+
+		List<Map<String, Object>> resultList = new ArrayList<>();
+		if (CollectionUtil.isNotEmpty(taskTypeList)) {
+			// 查询基础任务类型,用于匹配任务类型大类
+			List<String> finalConfigTaskTypeIdList = configTaskTypeIdList;
+			List<String> finalAncestorConfigTaskTypeIdList = ancestorConfigTaskTypeIdList;
+			List<WmTaskType> filterTaskTypeList = taskTypeList.stream()
+					.filter(wmTaskType -> wmTaskType.getParentId() != null
+							&& (
+							(finalConfigTaskTypeIdList != null && finalConfigTaskTypeIdList.contains(wmTaskType.getTaskTypeName()))
+									|| (finalAncestorConfigTaskTypeIdList != null && finalAncestorConfigTaskTypeIdList.contains(wmTaskType.getTaskTypeName()))
+					))
+					.collect(Collectors.toList());
+			BASE_TASK_TYPE_MAP.forEach((key, val) -> {
+				List<WmTaskType> childTypeList = filterTaskTypeList.stream()
+						.filter(wmTaskType -> val.contains(wmTaskType.getTaskTypeName()))
+						.collect(Collectors.toList());
+				if (CollectionUtil.isNotEmpty(childTypeList)) {
+					Map<String, Object> taskTypeMap = MapUtil.newHashMap(2);
+					taskTypeMap.put("label", key);
+					taskTypeMap.put("children", childTypeList);
+					resultList.add(taskTypeMap);
+				}
+			});
+		}
+		return resultList;
+	}
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus   任务状态
+	 * @return
+	 */
+	@Override
+	public IPage<WmTask> listTaskByConfig(Page<WmTask> page, String taskTypeName, String[] taskStatus) {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+		// 本级dept对应任务类型配置
+		WmDeptTaskTypeConfig deptTaskTypeConfig = this.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, deptId));
+		List<WmDeptTaskTypeConfigJsonDTO> filterConfigJsonDTOList = null;
+		if (deptTaskTypeConfig != null) {
+			// 查询该企业当前任务类型下 的任务类型配置数据
+			List<WmDeptTaskTypeConfigJsonDTO> configJsonDTOList =
+					JSON.parseArray(deptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+			if (StringUtils.isNotBlank(taskTypeName)) {
+				filterConfigJsonDTOList = configJsonDTOList.stream()
+						.filter(configJsonDTO -> configJsonDTO.getTaskTypeName().equals(taskTypeName) && configJsonDTO.getQualifiedTask()
+								&& (configJsonDTO.getYydbStatusSelect() || configJsonDTO.getZbdbStatusSelect()))
+						.collect(Collectors.toList());
+			} else {
+				filterConfigJsonDTOList = configJsonDTOList.stream()
+						.filter(configJsonDTO -> configJsonDTO.getQualifiedTask()
+								&& (configJsonDTO.getYydbStatusSelect() || configJsonDTO.getZbdbStatusSelect()))
+						.collect(Collectors.toList());
+			}
+		}
+
+		// 查询上级的deptId
+		SysDeptRelation ancestorDeptRelation = sysDeptRelationMapper.selectOne(Wrappers.<SysDeptRelation>lambdaQuery()
+				.eq(SysDeptRelation::getDescendant, deptId)
+				.ne(SysDeptRelation::getAncestor, deptId)
+				.ne(SysDeptRelation::getAncestor, 1));
+		// 上级dept对应任务类型配置
+		List<WmDeptTaskTypeConfigJsonDTO> filterAncestorConfigList = null;
+		if (ancestorDeptRelation != null) {
+			WmDeptTaskTypeConfig ancestorDeptTaskTypeConfig = this.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+					.eq(WmDeptTaskTypeConfig::getDeptId, ancestorDeptRelation.getAncestor()));
+			if (ancestorDeptTaskTypeConfig != null) {
+				List<WmDeptTaskTypeConfigJsonDTO> ancestorConfigJsonDTOList =
+						JSON.parseArray(ancestorDeptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+				// 转换为key value形式
+				if (StringUtils.isNotBlank(taskTypeName)) {
+					filterAncestorConfigList = ancestorConfigJsonDTOList.stream()
+							.filter(configJsonDTO -> configJsonDTO.getTaskTypeName().equals(taskTypeName)
+									&& configJsonDTO.getQualifiedTask() && configJsonDTO.getAssociateLower()
+									&& (configJsonDTO.getYydbStatusSelect() || configJsonDTO.getZbdbStatusSelect()))
+							.collect(Collectors.toList());
+				} else {
+					filterAncestorConfigList = ancestorConfigJsonDTOList.stream()
+							.filter(configJsonDTO -> configJsonDTO.getQualifiedTask() && configJsonDTO.getAssociateLower()
+									&& (configJsonDTO.getYydbStatusSelect() || configJsonDTO.getZbdbStatusSelect()))
+							.collect(Collectors.toList());
+				}
+			}
+		}
+		// 任务配置为空,则直接返回空page
+		if (CollectionUtil.isEmpty(filterConfigJsonDTOList) && CollectionUtil.isEmpty(filterAncestorConfigList)) {
+			return page;
+		}
+
+		// 根据不同任务类型的不同条件 拼接sql
+		QueryWrapper<WmTask> taskWrapper = Wrappers.query();
+		List<WmDeptTaskTypeConfigJsonDTO> finalFilterConfigJsonDTOList = filterConfigJsonDTOList;
+		List<WmDeptTaskTypeConfigJsonDTO> finalFilterAncestorConfigList = filterAncestorConfigList;
+		if (CollectionUtil.isNotEmpty(finalFilterConfigJsonDTOList) || CollectionUtil.isNotEmpty(finalFilterAncestorConfigList)) {
+			taskWrapper.and(wrapper -> {
+				// 当前企业直接发包的任务 条件
+				if (CollectionUtil.isNotEmpty(finalFilterConfigJsonDTOList)) {
+					for (WmDeptTaskTypeConfigJsonDTO configJsonDTO : finalFilterConfigJsonDTOList) {
+						// 用户类型
+						List<String> typeIdList = new ArrayList<>();
+						if (configJsonDTO.getZbdbStatusSelect()) {
+							typeIdList.add("4");
+						}
+						if (configJsonDTO.getYydbStatusSelect()) {
+							typeIdList.add("3");
+						}
+						wrapper.or(wrapper2 -> {
+							wrapper2.eq("t.task_type_id", configJsonDTO.getTaskTypeId());
+							wrapper2.eq("t.dept_id", deptId);
+							wrapper2.in("p.typeid", typeIdList);
+							wrapper2.isNull("p.relation_score_id");
+						});
+					}
+				}
+				// 关联了上级企业的包的任务 条件
+				if (CollectionUtil.isNotEmpty(finalFilterAncestorConfigList)) {
+					for (WmDeptTaskTypeConfigJsonDTO configJsonDTO : finalFilterAncestorConfigList) {
+						// 用户类型
+						List<String> typeIdList = new ArrayList<>();
+						if (configJsonDTO.getZbdbStatusEnable() && configJsonDTO.getZbdbStatusSelect()) {
+							typeIdList.add("4");
+						}
+						if (configJsonDTO.getYydbStatusEnable() && configJsonDTO.getYydbStatusSelect()) {
+							typeIdList.add("3");
+						}
+						wrapper.or(wrapper2 -> {
+							wrapper2.eq("t.task_type_id", configJsonDTO.getTaskTypeId());
+							wrapper2.eq("t.dept_id", deptId);
+							wrapper2.in("p.typeid", typeIdList);
+							wrapper2.isNotNull("p.relation_score_id");
+						});
+					}
+				}
+			});
+		}
+		taskWrapper.eq("t.del_flag", DelEnum.NOT_DEL.val());
+		taskWrapper.eq("t.real_flag", "0");
+		taskWrapper.in("t.task_status", taskStatus);
+		taskWrapper.orderByDesc("t.lookinto_date");
+		return wmTaskMapper.listWmTaskByWrapper(page, taskWrapper);
+	}
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus   任务状态
+	 * @return
+	 */
+	@Deprecated
+	@Override
+	public IPage<WmTask> listTaskByDeptTaskType(Page<WmTask> page, String taskTypeName, String[] taskStatus) {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+		WmDeptTaskTypeConfig deptTaskTypeConfig = this.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, deptId));
+		if (deptTaskTypeConfig != null) {
+			// 查询该企业当前任务类型下 的任务类型配置数据
+			List<WmDeptTaskTypeConfigJsonDTO> configJsonDTOList =
+					JSON.parseArray(deptTaskTypeConfig.getTaskTypeJson(), WmDeptTaskTypeConfigJsonDTO.class);
+			WmDeptTaskTypeConfigJsonDTO taskTypeConfigJsonDTO = configJsonDTOList.stream()
+					.filter(configJsonDTO -> configJsonDTO.getTaskTypeName().equals(taskTypeName))
+					.findFirst()
+					.get();
+			// 查询任务名称对应的基础任务类型id
+			WmTaskType baseTaskType = wmTaskTypeService.getOne(Wrappers.<WmTaskType>lambdaQuery()
+					.eq(WmTaskType::getTaskTypeLevel, "1")
+					.eq(WmTaskType::getTaskTypeName, taskTypeName)
+					.eq(WmTaskType::getEnableFlag, EnableEnum.ENABLE.val()));
+			// 根据是否勾选了关联下级,查询当前企业对应的积分包
+			List<String> scorePackageIdList = new ArrayList<>();
+			LambdaQueryWrapper<WmScorePackage> scorePackageWrapper = Wrappers.lambdaQuery();
+			scorePackageWrapper.eq(WmScorePackage::getSendPackageDeptId, deptId);
+			scorePackageWrapper.eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val());
+			scorePackageWrapper.eq(WmScorePackage::getDelFlag, DelEnum.NOT_DEL.val());
+			scorePackageWrapper.eq(WmScorePackage::getPackageType1, PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val());
+			scorePackageWrapper.eq(WmScorePackage::getPackageType2, PackageTypeEnum.TYPE2_TASK_PACKAGE.val());
+			scorePackageWrapper.ge(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.IN_PROGRESS.val());
+			scorePackageWrapper.in(WmScorePackage::getTypeid, "3", "4");
+			if (taskTypeConfigJsonDTO.getAssociateLower()) {
+				// 配置了关联下级,则同时查询'对应机构下发的企业承接的任务,再下发给个人的积分包'
+				List<WmScorePackage> scorePackageList = wmScorePackageService.list(scorePackageWrapper);
+				if (CollectionUtil.isNotEmpty(scorePackageList)) {
+					// 遍历查找所有下级积分包
+					Set<String> ids = scorePackageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+					getAllLowerScorePackages(ids, scorePackageList);
+
+					// 过滤只要发给个人的包
+					scorePackageIdList = scorePackageList.stream()
+							.filter(scorePackage -> StringUtils.isBlank(scorePackage.getAcceptSug()))
+							.map(WmScorePackage::getId).collect(Collectors.toList());
+				}
+			} else {
+				// 未勾选关联下级,则全部任务中只显示未关联积分包的任务,就是从企业直接下发给医药代表的任务 是未关联积分包吗?代理商可以有吧???
+				scorePackageWrapper.and(wrapper -> wrapper.isNull(WmScorePackage::getAcceptSug)
+						.or()
+						.apply("length(accept_sug) = 0"));
+				List<WmScorePackage> scorePackageList = wmScorePackageService.list(scorePackageWrapper);
+				if (CollectionUtil.isNotEmpty(scorePackageList)) {
+					// 过滤只要发给个人的包
+					scorePackageIdList = scorePackageList.stream()
+							.filter(scorePackage -> StringUtils.isBlank(scorePackage.getAcceptSug()))
+							.map(WmScorePackage::getId).collect(Collectors.toList());
+				}
+			}
+			// 用户类型
+			List<String> taskUserTypeList = new ArrayList<>();
+			if (taskTypeConfigJsonDTO.getZbdbStatusEnable() && taskTypeConfigJsonDTO.getZbdbStatusSelect()) {
+				taskUserTypeList.add("5");
+			}
+			if (taskTypeConfigJsonDTO.getYydbStatusEnable() && taskTypeConfigJsonDTO.getZbdbStatusSelect()) {
+				taskUserTypeList.add("6");
+			}
+
+			if (CollectionUtil.isNotEmpty(scorePackageIdList) && CollectionUtil.isNotEmpty(taskUserTypeList)) {
+				// 查询任务列表
+				WmTask queryTask = new WmTask();
+				queryTask.setTaskTypeId(baseTaskType.getId());
+				queryTask.setScorePackageId(String.join(",", scorePackageIdList));
+				queryTask.setTaskUserType(String.join(",", taskUserTypeList));
+				queryTask.setTaskStatus(String.join(",", taskStatus));
+				IPage<WmTask> taskPage = wmTaskMapper.listWmTaskByConfig(page, queryTask);
+				return taskPage;
+			}
+		}
+
+		return page;
+	}
+
+	/**
+	 * 查询所有下级的积分包
+	 *
+	 * @param ids
+	 * @param res
+	 */
+	private void getAllLowerScorePackages(Set<String> ids, List<WmScorePackage> res) {
+		List<WmScorePackage> subList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+				.in(WmScorePackage::getRelationScoreId, ids)
+				.eq(WmScorePackage::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val()));
+
+		if (CollectionUtil.isNotEmpty(subList)) {
+			Set<String> idSet = subList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+			res.addAll(subList);
+			getAllLowerScorePackages(idSet, res);
+		}
+	}
+}

+ 93 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskMapper.xml

@@ -1004,6 +1004,99 @@
 
 	</select>
 
+	<!-- 根据配置查询任务 -->
+	<select id="listWmTaskByConfig" resultMap="wmTaskMap">
+		SELECT
+		t.id AS id,
+		t.task_rule_id AS task_rule_id,
+		t.score AS score,
+		p.score_package_name AS score_package_id,
+		t.task_type_id AS task_type_id,
+		t.lookinto_date AS lookinto_date,
+		t.province AS province,
+		t.city AS city,
+		t.area AS area,
+		t.address AS address,
+		t.lookinto_type_id AS lookinto_type_id,
+		t.task_content_id AS task_content_id,
+		t.task_status AS task_status,
+		u.realname AS task_user_id,
+		t.task_user_type AS task_user_type,
+		t.drug_ent_id AS drug_ent_id,
+		d.`name` AS dept_id,
+		t.del_flag AS del_flag,
+		t.enable_flag AS enable_flag,
+		t.tenant_id AS tenant_id,
+		t.lookinto_date AS create_time,
+		t.create_user AS create_user,
+		t.update_time AS update_time,
+		t.update_user AS update_user,
+		t.submit_status AS submit_status,
+		t.share_img_url AS share_img_url,
+		t.plat_audit_status AS plat_audit_status,
+		t.task_info_img AS task_info_img
+		FROM wm_task t
+		left join sys_user u on  u.user_id=t.task_user_id
+		left join sys_dept d on d.dept_id=t.dept_id
+		left join wm_score_package p on p.id=t.score_package_id
+		where t.del_flag=0
+		and t.real_flag=0
+		and t.task_status !='1'
+		<if test="query.taskUserId!=null and query.taskUserId!=''">
+			and t.task_user_id = #{query.taskUserId}
+		</if>
+		<if test="query.taskTypeId != null and query.taskTypeId != ''">
+			and t.task_type_id = #{query.taskTypeId}
+		</if>
+		<if test="query.taskStatus!=null and query.taskStatus!=''">
+			and t.task_status in (${query.taskStatus})
+		</if>
+		<if test="query.scorePackageId!=null and query.scorePackageId!=''">
+			and t.score_package_id in (${query.scorePackageId})
+		</if>
+		<if test="query.taskUserType != null and query.taskUserType != ''">
+			and t.task_user_type in (${query.taskUserType})
+		</if>
+		order by t.lookinto_date
+	</select>
+
+	<!-- 根据配置查询任务 -->
+	<select id="listWmTaskByWrapper" resultMap="wmTaskMap">
+		SELECT
+		t.id AS id,
+		t.task_rule_id AS task_rule_id,
+		t.score AS score,
+		p.score_package_name AS score_package_id,
+		t.task_type_id AS task_type_id,
+		t.lookinto_date AS lookinto_date,
+		t.province AS province,
+		t.city AS city,
+		t.area AS area,
+		t.address AS address,
+		t.lookinto_type_id AS lookinto_type_id,
+		t.task_content_id AS task_content_id,
+		t.task_status AS task_status,
+		u.realname AS task_user_id,
+		t.task_user_type AS task_user_type,
+		t.drug_ent_id AS drug_ent_id,
+		d.`name` AS dept_id,
+		t.del_flag AS del_flag,
+		t.enable_flag AS enable_flag,
+		t.tenant_id AS tenant_id,
+		t.lookinto_date AS create_time,
+		t.create_user AS create_user,
+		t.update_time AS update_time,
+		t.update_user AS update_user,
+		t.submit_status AS submit_status,
+		t.share_img_url AS share_img_url,
+		t.plat_audit_status AS plat_audit_status,
+		t.task_info_img AS task_info_img
+		FROM wm_task t
+		left join sys_user u on  u.user_id=t.task_user_id
+		left join sys_dept d on d.dept_id=t.dept_id
+		left join wm_score_package p on p.id=t.score_package_id
+		${ew.customSqlSegment}
+	</select>
 
 	<select id="selectByTask" resultMap="wmTaskMap">
 		select t.* FROM wm_task t