Browse Source

app页面按行业分类完成测试

杨兴卓 1 month ago
parent
commit
f8fc8b512b

+ 19 - 5
xyzc-start/src/main/java/com/xyzc/start/controller/AppPageController.java

@@ -2,10 +2,12 @@ package com.xyzc.start.controller;
 
 import com.xyzc.common.core.utils.Result;
 import com.xyzc.start.domain.WebAppGroup;
-import com.xyzc.start.domain.vo.IndustryVo;
-import com.xyzc.start.domain.vo.WebAppGroupVo;
+import com.xyzc.start.domain.query.AppQuery;
+import com.xyzc.start.domain.vo.*;
 import com.xyzc.start.service.IAppPageService;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -37,10 +39,13 @@ public class AppPageController {
 
     /**
      * 具体行业分类的app列表
+     *
+     * @param careerId 行业id
+     * @param appId    最后一个appId
      */
-    @GetMapping("/byIndustry/{industryId}")
-    public Result<List<WebAppGroupVo>> byIndustry(@PathVariable("industryId") Long industryId) {
-        List<WebAppGroupVo> appList = appPageService.queryByIndustryId(industryId);
+    @GetMapping("/byIndustry/{careerId}")
+    public Result<AppPageCareerVo> byIndustry(@PathVariable("careerId") Long careerId, Long appId) {
+        AppPageCareerVo appList = appPageService.queryByIndustryId(careerId, appId);
 
         return Result.ok(appList);
     }
@@ -65,6 +70,15 @@ public class AppPageController {
         return Result.ok(appList);
     }
 
+    /**
+     * 应用模糊查询
+     */
+    @GetMapping("/search")
+    public Result<List<BaseUserSelectAppVo>> search(@Valid AppQuery appQuery) {
+        List<BaseUserSelectAppVo> webAppGroupList = appPageService.queryAppByQuery(appQuery);
+
+        return Result.ok(webAppGroupList);
+    }
 
     /**
      * 根据id返回聊天类app

+ 2 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/WebAppGroup.java

@@ -3,6 +3,7 @@ package com.xyzc.start.domain;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
 
 import java.util.Date;
 
@@ -11,6 +12,7 @@ import java.util.Date;
  *
  * @author 杨兴卓
  */
+@Data
 @TableName("xy_web_app_group")
 public class WebAppGroup {
     /**

+ 0 - 86
xyzc-start/src/main/java/com/xyzc/start/domain/bo/AbilityBo.java

@@ -1,86 +0,0 @@
-package com.xyzc.start.domain.bo;
-
-import com.baomidou.mybatisplus.annotation.Version;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * 能力业务对象 xy_ability
- *
- * @author yz
- * @date 2024-06-25
- */
-@Data
-public class AbilityBo {
-
-    /**
-     * 能力id
-     */
-//    @NotNull(message = "能力id不能为空", groups = {EditGroup.class})
-    private Long id;
-
-    /**
-     * AI模型id集合
-     */
-//    @NotEmpty(message = "AI模型id集合不能为空", groups = {AddGroup.class, EditGroup.class})
-    private List<Long> aiModelIdList;
-
-    /**
-     * 能力分组id
-     */
-//    @NotNull(message = "能力分组id不能为空", groups = {AddGroup.class, EditGroup.class})
-    private Long abilityGroupId;
-
-    /**
-     * 能力名称
-     */
-//    @NotBlank(message = "能力名称不能为空", groups = {AddGroup.class, EditGroup.class})
-    private String abilityName;
-
-    /**
-     * 能力英文名称
-     */
-//    @NotBlank(message = "能力英文名称不能为空", groups = {AddGroup.class, EditGroup.class})
-    private String abilityNameEn;
-
-    /**
-     * 能力logo ossId
-     */
-//    @NotNull(message = "能力logo ossId不能为空", groups = AddGroup.class)
-    private Long ossId;
-
-    /**
-     * 提示词
-     */
-//    @NotBlank(message = "提示词不能为空", groups = {AddGroup.class, EditGroup.class})
-    private String prompt;
-
-    /**
-     * 能力类型;1-bot;2-dify
-     */
-//    @NotNull(message = "能力类型不能为空", groups = {AddGroup.class, EditGroup.class})
-//    @Range(min = 1, max = 2, message = "能力类型范围在{min}到{max}之间", groups = {AddGroup.class, EditGroup.class})
-    private Integer abilityType;
-
-    /**
-     * 描述
-     */
-    private String description;
-
-    /**
-     * AI模型名称
-     */
-    private String aiModelName;
-
-    /**
-     * 是否精选
-     */
-    private Integer isSelect;
-
-    /**
-     * 版本号
-     */
-    @Version
-    private Integer version;
-}

+ 17 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/query/AppQuery.java

@@ -0,0 +1,17 @@
+package com.xyzc.start.domain.query;
+
+import lombok.Data;
+
+@Data
+public class AppQuery {
+
+    /**
+     * 上一个应用id
+     */
+    private Long appId;
+
+    /**
+     * 应用名称
+     */
+    private String appName;
+}

+ 19 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/AppPageCareerVo.java

@@ -0,0 +1,19 @@
+package com.xyzc.start.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppPageCareerVo {
+
+    /**
+     * 职业名称
+     */
+    private String careerName;
+
+    /**
+     * app列表
+     */
+    private List<AppPageVo> appPageList;
+}

+ 21 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/AppPageVo.java

@@ -0,0 +1,21 @@
+package com.xyzc.start.domain.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AppPageVo extends BaseUserSelectAppVo {
+
+    /**
+     * 行业id
+     */
+    private Long industryId;
+
+    /**
+     * 职业id
+     */
+    private Long careerId;
+
+
+}

+ 21 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/BaseUserSelectAppVo.java

@@ -9,6 +9,12 @@ import lombok.Data;
 public class BaseUserSelectAppVo {
 
     /**
+     * 职业id
+     */
+    private String careerName;
+
+
+    /**
      * 应用Id
      */
     private Long appId;
@@ -24,11 +30,26 @@ public class BaseUserSelectAppVo {
     private String appDesc;
 
     /**
+     * 是否精选,0-未精选,1-精选
+     */
+    private Integer isChoiceness;
+
+    /**
+     * 路由地址
+     */
+    private String routePath;
+
+    /**
      * 应用图标
      */
     private String appIcon;
 
     /**
+     * ai模型id
+     */
+    private Long aiModelId;
+
+    /**
      * ai模型图标
      */
     private String aiModelIcon;

+ 1 - 1
xyzc-start/src/main/java/com/xyzc/start/domain/vo/CareerVo.java

@@ -13,7 +13,7 @@ public class CareerVo {
      * 职业id
      */
     @AutoMapping(target = "id")
-    private Long careerId;
+    private Long id;
 
     /**
      * 职业名称

+ 13 - 6
xyzc-start/src/main/java/com/xyzc/start/mapper/AppMapper.java

@@ -1,16 +1,15 @@
 package com.xyzc.start.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xyzc.common.mybatis.core.mapper.BaseMapperPlus;
-import com.xyzc.start.constant.Const;
 import com.xyzc.start.domain.App;
-import com.xyzc.start.domain.bo.AbilityBo;
+import com.xyzc.start.domain.query.AppQuery;
 import com.xyzc.start.domain.vo.AiModelVo;
 import com.xyzc.start.domain.vo.AppVo;
-import org.apache.ibatis.annotations.Param;
+import com.xyzc.start.domain.vo.BaseUserSelectAppVo;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * 应用 Mapper接口
  *
@@ -21,7 +20,6 @@ public interface AppMapper extends BaseMapperPlus<App, AppVo> {
 
 
     /**
-     *
      * @param appId
      * @param aiModelId
      * @return
@@ -29,4 +27,13 @@ public interface AppMapper extends BaseMapperPlus<App, AppVo> {
     AiModelVo queryAiModelFuel(Long appId, Long aiModelId);
 
 
+    /**
+     * 查询应用列表
+     *
+     * @param userId
+     * @param appQuery
+     * @return
+     */
+    List<BaseUserSelectAppVo> queryAppQuery(Long userId, AppQuery appQuery);
+
 }

+ 13 - 0
xyzc-start/src/main/java/com/xyzc/start/mapper/CareerMapper.java

@@ -3,9 +3,22 @@ package com.xyzc.start.mapper;
 
 import com.xyzc.common.mybatis.core.mapper.BaseMapperPlus;
 import com.xyzc.start.domain.Career;
+import com.xyzc.start.domain.vo.AppPageVo;
 import com.xyzc.start.domain.vo.CareerVo;
 
+import java.util.List;
+
 public interface CareerMapper extends BaseMapperPlus<Career, CareerVo> {
 
 
+    /**
+     * 根据职业id分页查询职业
+     * todo:优化查询
+     *
+     * @param careerId
+     * @param appId 应用id
+     * @return
+     */
+    List<AppPageVo> queryAppPageVoByCareerId(Long userId, Long careerId, Long appId);
+
 }

+ 16 - 1
xyzc-start/src/main/java/com/xyzc/start/mapper/IndustryMapper.java

@@ -1,8 +1,8 @@
 package com.xyzc.start.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xyzc.common.mybatis.core.mapper.BaseMapperPlus;
 import com.xyzc.start.domain.Industry;
+import com.xyzc.start.domain.vo.AppPageVo;
 import com.xyzc.start.domain.vo.IndustryVo;
 
 import java.util.List;
@@ -18,4 +18,19 @@ public interface IndustryMapper extends BaseMapperPlus<Industry, IndustryVo> {
     List<IndustryVo> queryList(Industry industry);
 
 
+    /**
+     * 查询所有所属的职业关联的应用
+     *
+     * @param industryId
+     * @return
+     */
+    List<AppPageVo> queryAppPageVo(Long industryId);
+
+
+    /**
+     *
+     * @param careerIds
+     * @return
+     */
+    List<AppPageVo> queryAppPageVoByCarreerIds(List<Long> careerIds);
 }

+ 11 - 4
xyzc-start/src/main/java/com/xyzc/start/service/IAppPageService.java

@@ -1,7 +1,7 @@
 package com.xyzc.start.service;
 
-import com.xyzc.start.domain.vo.IndustryVo;
-import com.xyzc.start.domain.vo.WebAppGroupVo;
+import com.xyzc.start.domain.query.AppQuery;
+import com.xyzc.start.domain.vo.*;
 
 import java.util.List;
 
@@ -27,14 +27,21 @@ public interface IAppPageService {
     /**
      * 根据行业id查询app
      *
-     * @param industryId
+     * @param careerId
      * @return
      */
-    List<WebAppGroupVo> queryByIndustryId(Long industryId);
+    AppPageCareerVo queryByIndustryId(Long careerId, Long appId);
 
     /**
      * 根据分类id查询app
      */
     List<WebAppGroupVo> queryByTypeId(Long typeId);
 
+    /**
+     * 根据查询条件查询app
+     *
+     * @param appQuery
+     * @return
+     */
+    List<BaseUserSelectAppVo> queryAppByQuery(AppQuery appQuery);
 }

+ 55 - 21
xyzc-start/src/main/java/com/xyzc/start/service/impl/AppPageServiceImpl.java

@@ -1,18 +1,22 @@
 package com.xyzc.start.service.impl;
 
-import com.xyzc.start.domain.vo.AppVo;
-import com.xyzc.start.domain.vo.CareerVo;
-import com.xyzc.start.domain.vo.IndustryVo;
-import com.xyzc.start.domain.vo.WebAppGroupVo;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xyzc.common.web.security.user.SecurityUser;
+import com.xyzc.start.domain.WebAppGroup;
+import com.xyzc.start.domain.query.AppQuery;
+import com.xyzc.start.domain.vo.*;
 import com.xyzc.start.mapper.AppMapper;
 import com.xyzc.start.mapper.CareerMapper;
 import com.xyzc.start.mapper.IndustryMapper;
 import com.xyzc.start.mapper.WebAppGroupMapper;
 import com.xyzc.start.service.IAppPageService;
+import jakarta.annotation.PostConstruct;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -29,26 +33,36 @@ public class AppPageServiceImpl implements IAppPageService {
     private final AppMapper appMapper;
 
     /**
+     * 将所有的行业分类的和职业分类存储起来
+     *
+     * @return
+     */
+    private Map<Long, List<CareerVo>> industryMap;
+
+    /**
+     * 初始化数据
+     */
+    @PostConstruct
+    public void init() {
+        // 先获取所有的职业
+        List<CareerVo> careerVos = careerMapper.selectVoList();
+
+        // 按照行业id分组
+        industryMap = careerVos.stream().collect(
+                Collectors.groupingBy(CareerVo::getIndustryId)
+        );
+    }
+
+    /**
      * 类型查询
      *
      * @return List<WebAppGroupVo>
      */
     @Override
     public List<WebAppGroupVo> queryByType() {
-        List<WebAppGroupVo> appGroupList = webAppGroupMapper.selectVoList(null);
-        //再获取app
-        List<AppVo> appList = appMapper.selectVoList(null);
-
-        //遍历appGroupList与appList,让appList中的值通过appGroupList中的id关联
-        for (WebAppGroupVo appGroupVo : appGroupList) {
-            appGroupVo.setAppList(appList.stream()
-                    .filter(
-                            appVo -> appVo.getAppGroupId().equals(appGroupVo.getId())
-                    ).toList()
-            );
-        }
 
-        return appGroupList;
+        return webAppGroupMapper.selectVoList(new LambdaQueryWrapper<WebAppGroup>()
+                .orderByDesc(WebAppGroup::getSort));
     }
 
     /**
@@ -73,19 +87,29 @@ public class AppPageServiceImpl implements IAppPageService {
                     ).toList()
             );
         }
-        
+
         return industryVoList;
     }
 
     /**
+     * 根据行业id查询所有所属的app列表
      *
-     * @param industryId
+     * @param careerId
      * @return
      */
     @Override
-    public List<WebAppGroupVo> queryByIndustryId(Long industryId) {
+    public AppPageCareerVo queryByIndustryId(Long careerId, Long appId) {
+        List<AppPageVo> appPageVos = careerMapper.queryAppPageVoByCareerId(SecurityUser.getUserId(), careerId, appId);
+        AppPageCareerVo appPageCareerVo = new AppPageCareerVo();
+        //为空跳出
+        if(appPageVos==null || appPageVos.isEmpty()){
+            return null;
+        }
 
-        return List.of();
+        appPageCareerVo.setCareerName(appPageVos.get(0).getCareerName());
+        appPageCareerVo.setAppPageList(appPageVos);
+
+        return appPageCareerVo;
     }
 
     /**
@@ -97,5 +121,15 @@ public class AppPageServiceImpl implements IAppPageService {
         return List.of();
     }
 
+    /**
+     * app模糊查询
+     *
+     * @param appQuery
+     * @return
+     */
+    @Override
+    public List<BaseUserSelectAppVo> queryAppByQuery(AppQuery appQuery) {
 
+        return appMapper.queryAppQuery(SecurityUser.getUserId(), appQuery);
+    }
 }

+ 29 - 0
xyzc-start/src/main/resources/mapper/WebStart/AppMapper.xml

@@ -16,4 +16,33 @@
     </select>
 
 
+    <select id="queryAppQuery" resultType="com.xyzc.start.domain.vo.BaseUserSelectAppVo">
+        SELECT app.id           AS app_id,
+               app.app_name     AS app_name,
+               app.description  AS app_desc,
+               app.route_path   AS router_path,
+               oss.url          AS app_icon,
+               buc.is_collect   AS is_collect,
+               app.use_count    AS use_count,
+               am.id            AS aiModelId,
+               oss2.url         AS ai_model_icon,
+               am.ai_model_name AS ai_model_name
+        FROM xy_app app
+                 LEFT JOIN sys_oss oss ON oss.oss_id = app.oss_id
+                 LEFT JOIN xy_ai_model_app ama ON ama.ai_model_id = app.id
+                 LEFT JOIN xy_ai_model am ON ama.ai_model_id = am.id
+                 LEFT JOIN sys_oss oss2 ON oss2.oss_id = am.ai_model_logo_oss_id
+                 LEFT JOIN xy_base_user_collect buc ON app.id = buc.collect_id AND buc.type = 3
+            AND buc.base_user_id = #{userId}
+        WHERE app.del_flag = '0'
+        <if test="appQuery != null and appQuery.appName != null">
+            AND app.app_name LIKE CONCAT('%',#{appQuery.appName},'%')
+        </if>
+        <if test="appQuery != null and appQuery.appId != null">
+            AND app.id > #{appQuery.appId}
+        </if>
+        LIMIT 10
+    </select>
+
+
 </mapper>

+ 43 - 0
xyzc-start/src/main/resources/mapper/WebStart/CareerMapper.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xyzc.start.mapper.CareerMapper">
+
+
+    <select id="queryAppPageVoByCareerId" resultType="com.xyzc.start.domain.vo.AppPageVo">
+        SELECT app.id          AS app_id,
+               xin.id          AS industry_id,
+               xc.id           AS career_id,
+               xc.career_name,
+               app.app_name    AS app_name,
+               oss.url         AS app_icon,
+               app.description AS app_desc,
+               xam.ai_model_name,
+               xam.id          AS ai_model_id,
+               oss2.url        AS ai_model_icon,
+               app.use_count,
+               buc.is_collect AS is_collect,
+               app.is_choiceness
+        FROM xy_industry xin
+                 LEFT JOIN xy_career xc ON xin.id = xc.industry_id
+                 LEFT JOIN xy_career_app xca ON xc.id = xca.career_id
+                 LEFT JOIN xy_app app ON app.id = xca.app_id
+                 LEFT JOIN sys_oss oss ON app.oss_id = oss.oss_id
+                 LEFT JOIN xy_ai_model_app xama ON xama.app_id = app.id
+                 LEFT JOIN xy_ai_model xam ON xam.id = xama.ai_model_id
+                 LEFT JOIN sys_oss oss2 ON xam.ai_model_logo_oss_id = oss2.oss_id
+                 LEFT JOIN xy_base_user_collect buc ON buc.collect_id = app.id
+                        AND buc.type = 3
+                        AND buc.base_user_id = #{userId}
+        WHERE xc.id = #{careerId}
+          <if test="appId != null">
+                AND app.id > #{appId}
+          </if>
+        ORDER BY xc.sort DESC
+        LIMIT 10
+
+    </select>
+
+
+</mapper>

+ 5 - 0
xyzc-start/src/main/resources/mapper/WebStart/IndustryMapper.xml

@@ -12,5 +12,10 @@
         from xy_industry
     </select>
 
+    <select id="queryAppPageVo" resultType="com.xyzc.start.domain.vo.AppPageVo">
+
+    </select>
+
+
 
 </mapper>