Pārlūkot izejas kodu

Merge branch 'hotfix-20230321-optimizedquery'

李学松 2 gadi atpakaļ
vecāks
revīzija
4b282825df

+ 43 - 17
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -68,6 +68,7 @@ import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.UserSignResultEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.WmScoreTaskTypeMapper;
 import com.qunzhixinxi.hnqz.admin.service.MedicalEquipmentService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptCsmService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
@@ -161,6 +162,7 @@ import java.time.ZoneId;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -190,6 +192,7 @@ public class ApiController {
 	private final WmWkArticleShareService wmWkArticleShareService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScoreTaskTypeService wmScoreTaskTypeService;
+	private final WmScoreTaskTypeMapper wmScoreTaskTypeMapper;
 	private final WmScorePackageStatusService wmScorePackageStatusService;
 	private final WmTaskService wmTaskService;
 	private final WmDaDistributionService wmDaDistributionService;
@@ -338,17 +341,28 @@ public class ApiController {
 					if (null == SecurityUtils.getUser()) {
 
 					} else {
-						UserVO userVO = sysUserService.selectUserVoById(SecurityUtils.getUser().getId());
+//						UserVO userVO = sysUserService.selectUserVoById(SecurityUtils.getUser().getId());
 						WmScorePackageStatus query = new WmScorePackageStatus();
-						query.setUserId(userVO.getUserId() + "");
+						query.setUserId(String.valueOf(SecurityUtils.getUser().getId()));
 						query.setStatus("2");
 						query.setTaskAddFlag("1");
 						query.setDelFlag("0");
 						query.setEnableFlag("0");
 
 						List<WmScorePackageStatus> statusList = wmScorePackageStatusService.list(Wrappers.lambdaQuery(query));
+						Set<String> scoreIds = statusList.stream()
+								.map(WmScorePackageStatus::getPackageId).collect(Collectors.toSet());
+						// 批量查询积分包
+						List<WmScorePackage> wmScorePackages = wmScorePackageService.listByIds(scoreIds);
+						Map<String, WmScorePackage> scorePackageMap = wmScorePackages.stream()
+								.collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
+						// 批量查询scoreTaskType
+						List<Map<String, Object>> scoreTaskTypeCountList = wmScoreTaskTypeMapper.countByScoreId(taskTypeId, scoreIds);
+						Map<String, Integer> scoreTaskTypeCountMap = scoreTaskTypeCountList.stream()
+								.collect(Collectors.toMap(o -> String.valueOf(o.get("score_id")), o -> Integer.parseInt(String.valueOf(o.get("count")))));
+
 						for (WmScorePackageStatus item : statusList) {
-							WmScorePackage wmScorePackage = wmScorePackageService.getById(item.getPackageId());
+							WmScorePackage wmScorePackage = scorePackageMap.get(item.getPackageId());
 							if (null != wmScorePackage) {
 								if ("0".equals(wmScorePackage.getTaskAddFlag())) {
 									continue;
@@ -382,7 +396,7 @@ public class ApiController {
 									taskType.setTaskTypeId(taskTypeId);
 									taskType.setScoreId(wmScorePackage.getId());
 
-									int total = wmScoreTaskTypeService.count(Wrappers.query(taskType));
+									int total = scoreTaskTypeCountMap.getOrDefault(wmScorePackage.getId(), 0);
 
 									if (total != 0) {
 										Map<String, Object> map = new HashMap<>();
@@ -627,17 +641,25 @@ public class ApiController {
 			return R.failed("账号信息异常,请联系管理员");
 		}
 
-		//获取小程序openid
 		SysUser u = sysUserService.getById(hnqzUser.getId());
 		if (StrUtil.isBlank(u.getWxOpenid()) || StrUtil.isBlank(u.getAvatar())) {
-			Map<String, Object> opemMap = GetOpenIDUtil.oauth2GetOpenid(code, upmsConfig.getWechatEnv());
-			log.info("opemMap: {}", opemMap);
-			if (MapUtil.isNotEmpty(opemMap)) {
-				String openid = (String) opemMap.get("openid");
-				u.setWxOpenid(openid);
-				u.setAvatar(avatar);
-				sysUserService.saveOrUpdate(u);
+			SysUser updateU = new SysUser();
+			// 获取小程序openid
+			updateU.setUserId(u.getUserId());
+			if (StrUtil.isBlank(u.getWxOpenid())) {
+				Map<String, Object> opemMap = GetOpenIDUtil.oauth2GetOpenid(code, upmsConfig.getWechatEnv());
+				log.info("opemMap: {}", opemMap);
+				if (MapUtil.isNotEmpty(opemMap)) {
+					String openid = (String) opemMap.get("openid");
+					updateU.setWxOpenid(openid);
+				}
 			}
+			// avatar头像
+			if (StrUtil.isBlank(u.getAvatar())) {
+				updateU.setAvatar(avatar);
+			}
+			updateU.setUpdateTime(LocalDateTime.now());
+			sysUserService.updateById(updateU);
 		}
 
 		List<Integer> roleList = new ArrayList<>();
@@ -659,7 +681,9 @@ public class ApiController {
 			mapOne.put("bankPhone", sysU.getBankPhone());
 
 			// 获取会员已结算信息和和待结算信息
-			List<WmScorePackageStatus> packageStatuses = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery().eq(WmScorePackageStatus::getUserId, sysU.getUserId()).eq(WmScorePackageStatus::getStatus, "2"));
+			List<WmScorePackageStatus> packageStatuses = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+					.eq(WmScorePackageStatus::getUserId, sysU.getUserId())
+					.eq(WmScorePackageStatus::getStatus, "2"));
 
 			List<String> ids = packageStatuses.stream().map(WmScorePackageStatus::getPackageId).collect(Collectors.toList());
 
@@ -797,8 +821,7 @@ public class ApiController {
 			mapOne.put("hasTaskTypeTemplate", wmDeptTaskTypeTemplateService.listTaskTypeByDeptId(sysU.getDeptId()));
 
 			// 税源地和channel对应关系
-			Map<String, Integer> collect = sysDeptSubService.list(Wrappers.<SysDeptSub>lambdaQuery().eq(SysDeptSub::getDeptId, sysU.getDeptId()))
-					.stream()
+			Map<String, Integer> collect = subList.stream()
 					.collect(Collectors.toMap(sysDeptSub -> sysDeptSub.getSubjectLocation().name(), SysDeptSub::getSubjectChannel));
 			mapOne.put("subjectTypeAndChannel", collect);
 
@@ -807,16 +830,19 @@ public class ApiController {
 			List<SysUserSubVO> userSignCertList = sysUserSignCertService.listUserSignCertForApi(sysU.getUserId(), sysU.getDeptId());
 			mapOne.put("certList", userSignCertList);
 
-			// 查询是否已认证过E证通
-			mapOne.put("existEidResult", sysUserExtRecordService.existUserExtRecord());
+			// 查询E证通数据
 			SysUserExtRecord userExtRecord = sysUserExtRecordService.getOne(Wrappers.<SysUserExtRecord>lambdaQuery()
 					.eq(SysUserExtRecord::getUserId, sysU.getUserId())
 					.eq(SysUserExtRecord::getDelFlag, DelEnum.NOT_DEL.val()));
 			if (userExtRecord != null) {
+				mapOne.put("existEidResult", true);
+				// E证通照片
 				Map<String, Object> eidResultMap = new HashMap<>();
 				eidResultMap.put("idCardFrontUrl", userExtRecord.getIdCardFrontUrl());
 				eidResultMap.put("idCardBackUrl", userExtRecord.getIdCardBackUrl());
 				mapOne.put("eidResult", eidResultMap);
+			} else {
+				mapOne.put("existEidResult", false);
 			}
 
 			// 获取发起认证的令牌

+ 11 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScoreTaskTypeMapper.java

@@ -22,6 +22,8 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * 积分包任务类型表
@@ -46,4 +48,13 @@ public interface WmScoreTaskTypeMapper extends BaseMapper<WmScoreTaskType> {
 
 	List<WmScoreTaskType>  getListByScoreId(@Param("query")WmScoreTaskType wmScoreTaskType);
 
+	/**
+	 * 根据积分包id统计个数
+	 *
+	 * @param taskTypeId 任务类型id
+	 * @param scoreIdList 积分包列表
+	 * @return
+	 */
+	List<Map<String, Object>> countByScoreId(@Param("taskTypeId") String taskTypeId, @Param("scoreIdList") Set<String> scoreIdList);
+
 }

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/wmScoreTaskTypeMapper.xml

@@ -151,4 +151,14 @@
 		score_id = #{scoreId,jdbcType=VARCHAR}
 	</select>
 
+	<select id="countByScoreId" resultType="java.util.Map">
+		select t.score_id, count(*) as count
+		from wm_score_task_type t
+		where task_type_id = #{taskTypeId} and t.score_id in
+		<foreach collection="scoreIdList" item="scoreId" index="index" separator="," open="(" close=")">
+			#{scoreId}
+		</foreach>
+		group by t.score_id
+	</select>
+
 </mapper>