Browse Source

Merge branch 'feat-newtasktype-20220531' into temp-pre

lixuesong 3 years ago
parent
commit
1fc478e404

+ 3 - 3
db/v2.0/220531.sql

@@ -3,17 +3,17 @@ INSERT INTO wm_task_type (id, task_type_name, task_type_level, task_score_start,
                           durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user,
                           update_time, update_user, status, base_id, real_flag, rule_id, parent_id)
 VALUES (34, '医院患者教育培训', '1', 0, 2000, 2000, null, null, null, null, 0, '0', 1, '2022-05-31 14:56:55', null, null, null,
-        0, '培训', null, '1', 'p-1');
+        0, '会议举办', null, '1', 'p-1');
 INSERT INTO wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id,
                           durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user,
                           update_time, update_user, status, base_id, real_flag, rule_id, parent_id)
 VALUES (35, '药店药师培训', '1', 0, 2000, 2000, null, null, null, null, 0, '0', 1, '2022-05-31 14:56:58', null, null, null, 0,
-        '培训', null, '1', 'p-1');
+        '会议举办', null, '1', 'p-1');
 INSERT INTO wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id,
                           durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user,
                           update_time, update_user, status, base_id, real_flag, rule_id, parent_id)
 VALUES (36, '商业公司培训', '1', 0, 2000, 2000, null, null, null, null, 0, '0', 1, '2022-05-31 14:56:59', null, null, null, 0,
-        '培训', null, '1', 'p-1');
+        '会议举办', null, '1', 'p-1');
 
 -- 任务类型培训-小程序页面字段配置
 INSERT INTO wm_task_content_config (base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('1', '36', 'temp32', '关联积分包', 2, 'domain', 1, 200, null, null, 'package_list', '1', null, '0', '0', 1, '2021-01-17 10:54:59', null, null, null);

+ 47 - 8
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -805,22 +805,61 @@ public class ApiController {
 		 * 所有能做的任务
 		 */
 		List<WmScoreTaskType> wmScoreTaskTypeList = wmScoreTaskTypeService.list(Wrappers.query(query));
-
+		// 对应的taskTypeId
 		List<String> baseIds = wmScoreTaskTypeList.stream().
 				map(WmScoreTaskType::getTaskTypeId).collect(Collectors.toList());
-
+		// 父级parent_id
 		List<String> parentId = baseIds.stream().filter(item -> item.startsWith("p")).collect(Collectors.toList());
+		// 子级parentId
 		List<String> id = baseIds.stream().filter(item -> !item.startsWith("p")).collect(Collectors.toList());
 
-		List<WmTaskType> baseTypeList1 = wmTaskTypeService.
-				list(Wrappers.<WmTaskType>query().lambda().in(WmTaskType::getParentId, parentId));
+		// 记录表中父id的所有子集
+		List<WmTaskType> baseTypeList1 = wmTaskTypeService.list(Wrappers.<WmTaskType>query().lambda()
+				.eq(WmTaskType::getTaskTypeLevel, "1")
+				.in(WmTaskType::getParentId, parentId));
 
-		List<WmTaskType> baseTypeList2 = wmTaskTypeService.
-				list(Wrappers.<WmTaskType>query().lambda().in(WmTaskType::getId, id));
+		// 按照父id分组
+		Map<String,Map<String, List<WmTaskType>>> pTaskTypeMap = baseTypeList1.stream()
+				.collect(Collectors.groupingBy(WmTaskType::getParentId,Collectors.groupingBy(WmTaskType::getBaseId)));
 
-		baseTypeList1.addAll(baseTypeList2);
+		// 查询所有子id对应的taskType列表
+		List<WmTaskType> baseTypeList2 = wmTaskTypeService.
+				list(Wrappers.<WmTaskType>query().lambda().eq(WmTaskType::getTaskTypeLevel, "1").in(WmTaskType::getId, id));
+
+		// 所有子id对应的taskType列表 按照父id分组
+		Map<String,Map<String, List<WmTaskType>>> cTaskTypeMap = baseTypeList2.stream()
+				.collect(Collectors.groupingBy(WmTaskType::getParentId,Collectors.groupingBy(WmTaskType::getBaseId)));
+		// 对应的parentId
+		Set<String> cPidSet = cTaskTypeMap.keySet();
+
+		List<WmTaskType> temp = new ArrayList<>();
+
+		// 解决页面父级id和数据库存的父级id不一致的问题(如一对一专访在页面父级是p-16,但taskType表中父级id为p-1)
+		// 比较baseTypeList1和baseTypeList2中parentId相同的taskTypeId的数据,如果baseId相同,则取baseTypeList2中的taskTypeId
+		for (Map.Entry<String, Map<String, List<WmTaskType>>> entry : pTaskTypeMap.entrySet()) {
+			// 获取父级id
+			String pid = entry.getKey();
+			// 判断大类中是否有相同的父类id
+			if (cPidSet.contains(pid)) {
+				// baseId
+				Map<String, List<WmTaskType>> value = entry.getValue();
+				Set<String> pBaseIds = value.keySet();
+				// small
+				Map<String, List<WmTaskType>> cVal = cTaskTypeMap.get(pid);
+				Set<String> cBaseIds = cVal.keySet();
+				// 求个交集,找出公共的
+				Set<String> res = new HashSet<>(pBaseIds);
+				res.retainAll(cBaseIds);
+				// 找出的存入temp
+				for (String bId : res) {
+					temp.addAll(cVal.get(bId));
+				}
+				// 取父级中对应baseId是独有的部分
+				pBaseIds.stream().filter(i -> !res.contains(i)).forEach(i -> temp.addAll(value.get(i)));
+			}
+		}
 
-		List<String> baseNames = baseTypeList1.stream().
+		List<String> baseNames = temp.stream().
 				map(WmTaskType::getTaskTypeName).distinct().collect(Collectors.toList());
 		WmTaskType wmTaskType = new WmTaskType();
 		wmTaskType.setRuleId(wmScorePackage.getRuleId());