Browse Source

feat: 批量审批任务-查询我的任务

lixuesong 3 years ago
parent
commit
415106c715

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

@@ -1,9 +1,16 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.util.ArrayUtil;
+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.entity.WmDeptTaskTypeConfig;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigDTO;
 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;
@@ -14,6 +21,9 @@ 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.Map;
+
 /**
  * 部门任务类型配置控制层
  *
@@ -52,4 +62,41 @@ public class WmDeptTaskTypeConfigController {
 		return R.ok(wmDeptTaskTypeConfigService.getDeptTaskTypeConfig(deptId));
 	}
 
+	/**
+	 * 是否配置了企业的任务类型配置
+	 *
+	 * @return
+	 */
+	@GetMapping("/is-config")
+	public R<?> isConfig() {
+		Map<String, Object> resultMap = new HashMap<>();
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+		WmDeptTaskTypeConfig deptTaskTypeConfig = wmDeptTaskTypeConfigService.getOne(Wrappers.<WmDeptTaskTypeConfig>lambdaQuery()
+				.eq(WmDeptTaskTypeConfig::getDeptId, deptId));
+		if (deptTaskTypeConfig != null) {
+			resultMap.put("config", true);
+		} else {
+			resultMap.put("config", false);
+		}
+
+		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.listTaskByDeptTaskType(page, taskTypeName, taskStatus));
+	}
+
 }

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

@@ -1,7 +1,10 @@
 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;
 
 /**
@@ -26,4 +29,14 @@ public interface WmDeptTaskTypeConfigService extends IService<WmDeptTaskTypeConf
 	 * @return
 	 */
 	WmDeptTaskTypeConfigDTO getDeptTaskTypeConfig(Integer deptId);
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param page 分页参数
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus 任务状态
+	 * @return
+	 */
+	IPage<WmTask> listTaskByDeptTaskType(Page<WmTask> page, String taskTypeName, String[] taskStatus);
 }

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

@@ -4,20 +4,31 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.SysDeptRelation;
 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.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
+import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDaDrugEntMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDeptTaskTypeConfigMapper;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeConfigService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -42,6 +53,10 @@ public class WmDeptTaskTypeConfigServiceImpl extends ServiceImpl<WmDeptTaskTypeC
 
 	private final WmTaskTypeService wmTaskTypeService;
 
+	private final WmTaskService wmTaskService;
+
+	private final WmScorePackageService wmScorePackageService;
+
 	private final SysDeptRelationMapper sysDeptRelationMapper;
 
 	private final WmDaDrugEntMapper wmDaDrugEntMapper;
@@ -145,4 +160,104 @@ public class WmDeptTaskTypeConfigServiceImpl extends ServiceImpl<WmDeptTaskTypeC
 
 		return deptTaskTypeConfigDTO;
 	}
+
+	/**
+	 * 根据企业的任务类型配置查询任务列表
+	 *
+	 * @param taskTypeName 任务类型名称
+	 * @param taskStatus 任务状态
+	 * @return
+	 */
+	@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::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()) {
+				// 配置了关联下级,则同时查询'对应机构下发的企业承接的任务,再下发给个人的积分包'
+//				scorePackageWrapper.isNotNull(WmScorePackage::getAcceptSug);
+//				scorePackageWrapper.apply("length(accept_sug) > 0");
+				List<WmScorePackage> scorePackageList = wmScorePackageService.list(scorePackageWrapper);
+				if (CollectionUtil.isNotEmpty(scorePackageList)) {
+					// 遍历查找所有下级积分包
+					scorePackageList.forEach(scorePackage -> getAllLowerScorePackages(scorePackage.getId(), scorePackageList));
+					scorePackageIdList = scorePackageList.stream().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().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)) {
+				// 查询任务列表
+				LambdaQueryWrapper<WmTask> taskWrapper = Wrappers.lambdaQuery();
+				taskWrapper.eq(WmTask::getTaskTypeId, baseTaskType.getId());
+				taskWrapper.in(WmTask::getScorePackageId, scorePackageIdList);
+				taskWrapper.in(WmTask::getTaskUserType, taskUserTypeList);
+				if (ArrayUtil.isNotEmpty(taskStatus)) {
+					taskWrapper.in(WmTask::getTaskStatus, taskStatus);
+				} else {
+					taskWrapper.eq(WmTask::getTaskStatus, TaskStatusEnum.UNDER_REVIEW.val());
+				}
+				Page<WmTask> taskPage = wmTaskService.page(page, taskWrapper);
+				return taskPage;
+			}
+		}
+
+		return page;
+	}
+
+	/**
+	 * 查询所有下级的积分包
+	 *
+	 * @param scorePackageId
+	 * @param scorePackageList
+	 */
+	private void getAllLowerScorePackages(String scorePackageId, List<WmScorePackage> scorePackageList) {
+		if (scorePackageList.size() <= 999) {
+			List<WmScorePackage> subList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+					.eq(WmScorePackage::getRelationScoreId, scorePackageId)
+					.eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val()));
+			if (CollectionUtil.isNotEmpty(subList)) {
+				scorePackageList.addAll(subList);
+				subList.forEach(scorePackage -> getAllLowerScorePackages(scorePackage.getId(), scorePackageList));
+			}
+		}
+	}
 }