Forráskód Böngészése

小程序标签查询返回优化

xgb 1 hónapja
szülő
commit
0bc414d981

+ 40 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyTagResult.java

@@ -0,0 +1,40 @@
+package com.fs.company.domain;
+
+/**
+ * @description: TODO
+ * @author: Xgb
+ * @createDate: 2025/10/13
+ * @version: 1.0
+ */
+
+public class CompanyTagResult extends CompanyTag{
+    private Long userId;
+    private Long companyUserId;
+    private Long projectId;
+
+    // getter和setter方法
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getCompanyUserId() {
+        return companyUserId;
+    }
+
+    public void setCompanyUserId(Long companyUserId) {
+        this.companyUserId = companyUserId;
+    }
+
+    public Long getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(Long projectId) {
+        this.projectId = projectId;
+    }
+
+}

+ 2 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyTagMapper.java

@@ -1,6 +1,7 @@
 package com.fs.company.mapper;
 
 import com.fs.company.domain.CompanyTag;
+import com.fs.company.domain.CompanyTagResult;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
@@ -85,4 +86,5 @@ public interface CompanyTagMapper
 
     List<CompanyTag> selectCompanyTagByUserId(@Param("params") Map<String, Object> params);
 
+    List<CompanyTagResult> selectCompanyTagByUserIds(@Param("params") List<Map<String, Object>> batchParams);
 }

+ 44 - 13
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -18,10 +18,7 @@ import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.cache.ICompanyTagCacheService;
 import com.fs.company.cache.ICompanyUserCacheService;
-import com.fs.company.domain.Company;
-import com.fs.company.domain.CompanyTag;
-import com.fs.company.domain.CompanyTagUser;
-import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.*;
 import com.fs.company.mapper.*;
 import com.fs.company.service.ICompanyTagService;
 import com.fs.course.domain.FsUserCompanyUser;
@@ -724,15 +721,8 @@ public class FsUserServiceImpl implements IFsUserService {
                     item.setTag(String.join(",", tagNames));
                 }
 
-                Map<String, Object> map = new HashMap<>();
-                map.put("userId", item.getUserId());
-                map.put("companyUserId", item.getCompanyUserId());
-                map.put("projectId", item.getProjectId());
-                // 获取小程序标签
-                List<CompanyTag> companyTags = companyTagMapper.selectCompanyTagByUserId(map);
-                if (companyTags != null && companyTags.size() > 0) {
-                    item.setProjectTagName(companyTags.stream().map(CompanyTag::getTag).collect(Collectors.joining(",")));
-                }
+                // 添加小程序标签返回值
+                addUserTag(fsUserPageListVOS);
 
                 // 是否宠粉
 //                Integer isRepeat = qwExternalContactCacheService.selectQwIsRepeat(item.getUserId());
@@ -761,6 +751,47 @@ public class FsUserServiceImpl implements IFsUserService {
         return rspData;
     }
 
+    // 添加小程序标签返回值
+    public void addUserTag(List<FsUserPageListVO> fsUserPageListVOS) {
+        // 1. 收集所有需要查询标签的用户信息
+        List<Map<String, Object>> batchParams = new ArrayList<>();
+        for (FsUserPageListVO item : fsUserPageListVOS) {
+            if (item.getUserId() != null) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("userId", item.getUserId());
+                map.put("companyUserId", item.getCompanyUserId());
+                map.put("projectId", item.getProjectId());
+                batchParams.add(map);
+            }
+        }
+
+        // 2. 批量查询所有标签(需要修改Mapper方法支持批量查询)
+        List<CompanyTagResult> batchTags = companyTagMapper.selectCompanyTagByUserIds(batchParams);
+
+        // 3. 按用户分组标签结果
+        Map<String, List<CompanyTag>> tagGroupMap = batchTags.stream()
+                .collect(Collectors.groupingBy(
+                        tag -> tag.getUserId() + "_" + tag.getCompanyUserId() + "_" + tag.getProjectId(),
+                        Collectors.mapping(tag -> {
+                            CompanyTag companyTag = new CompanyTag();
+                            companyTag.setTag(tag.getTag());
+                            return companyTag;
+                        }, Collectors.toList())
+                ));
+
+        // 4. 重新遍历设置标签
+        for (FsUserPageListVO item : fsUserPageListVOS) {
+            if (item.getUserId() != null) {
+                String key = item.getUserId() + "_" + item.getCompanyUserId() + "_" + item.getProjectId();
+                List<CompanyTag> tags = tagGroupMap.get(key);
+                if (tags != null && !tags.isEmpty()) {
+                    item.setProjectTagName(tags.stream().map(CompanyTag::getTag).collect(Collectors.joining(",")));
+                }
+            }
+        }
+
+    }
+
     @Override
     public Long selectFsUserCount(FsUserPageListParam param) {
         return fsUserMapper.selectFsUserPageListCount(param);

+ 17 - 0
fs-service/src/main/resources/mapper/company/CompanyTagMapper.xml

@@ -109,6 +109,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+    <!-- 批量查询用户标签 -->
+    <select id="selectCompanyTagByUserIds" resultType="com.fs.company.domain.CompanyTagResult">
+        select ct.*, fucu.user_id, fucu.company_user_id, fucu.project_id
+        from company_tag ct
+        inner join fs_user_project_tag ft on ct.tag_id = ft.tag_id
+        inner join fs_user_company_user fucu on fucu.id = ft.user_company_user_id
+        <where>
+            <if test="params != null and params.size() > 0">
+                and (
+                <foreach collection="params" item="param" separator=" or ">
+                    (fucu.user_id = #{param.userId} and fucu.company_user_id = #{param.companyUserId} and fucu.project_id = #{param.projectId})
+                </foreach>
+                )
+            </if>
+        </where>
+    </select>
+
 
     <insert id="insertCompanyTag" parameterType="CompanyTag" useGeneratedKeys="true" keyProperty="tagId">
         insert into company_tag