Bläddra i källkod

AI学习工具管理和前端功能

liyanbo 1 månad sedan
förälder
incheckning
f02dccb079
13 ändrade filer med 696 tillägg och 1 borttagningar
  1. 104 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/MiniProgramToolsController.java
  2. 41 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/vo/MiniProgramToolsPageReqVO.java
  3. 54 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/vo/MiniProgramToolsRespVO.java
  4. 36 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/vo/MiniProgramToolsSaveReqVO.java
  5. 58 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/dal/dataobject/miniprogramtools/MiniProgramToolsDO.java
  6. 34 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/dal/mysql/miniprogramtools/MiniProgramToolsMapper.java
  7. 5 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/enums/ErrorCodeConstants.java
  8. 62 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/service/miniprogramtools/MiniProgramToolsService.java
  9. 102 0
      byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/service/miniprogramtools/MiniProgramToolsServiceImpl.java
  10. 62 0
      byzs-module-ai/src/main/resources/mapper/miniprogramtools/MiniProgramToolsService.java
  11. 92 0
      byzs-module-ai/src/main/resources/mapper/miniprogramtools/MiniProgramToolsServiceImpl.java
  12. 23 1
      byzs-web/src/main/java/cn/iocoder/byzs/module/web/controller/admin/ai/WebAiController.java
  13. 23 0
      byzs-web/src/main/java/cn/iocoder/byzs/module/web/controller/admin/ai/vo/MiniProgramToolVO.java

+ 104 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/MiniProgramToolsController.java

@@ -0,0 +1,104 @@
+package cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
+import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.framework.common.pojo.CommonResult;
+import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
+import static cn.iocoder.byzs.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.byzs.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.byzs.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.byzs.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.*;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
+import cn.iocoder.byzs.module.ai.service.miniprogramtools.MiniProgramToolsService;
+
+@Tag(name = "管理后台 - AI-小程序工具")
+@RestController
+@RequestMapping("/ai/mini-program-tools")
+@Validated
+public class MiniProgramToolsController {
+
+    @Resource
+    private MiniProgramToolsService miniProgramToolsService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建AI-小程序工具")
+    @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:create')")
+    public CommonResult<Integer> createMiniProgramTools(@Valid @RequestBody MiniProgramToolsSaveReqVO createReqVO) {
+        return success(miniProgramToolsService.createMiniProgramTools(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新AI-小程序工具")
+    @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:update')")
+    public CommonResult<Boolean> updateMiniProgramTools(@Valid @RequestBody MiniProgramToolsSaveReqVO updateReqVO) {
+        miniProgramToolsService.updateMiniProgramTools(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除AI-小程序工具")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:delete')")
+    public CommonResult<Boolean> deleteMiniProgramTools(@RequestParam("id") Integer id) {
+        miniProgramToolsService.deleteMiniProgramTools(id);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete-list")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除AI-小程序工具")
+                @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:delete')")
+    public CommonResult<Boolean> deleteMiniProgramToolsList(@RequestParam("ids") List<Integer> ids) {
+        miniProgramToolsService.deleteMiniProgramToolsListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得AI-小程序工具")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:query')")
+    public CommonResult<MiniProgramToolsRespVO> getMiniProgramTools(@RequestParam("id") Integer id) {
+        MiniProgramToolsDO miniProgramTools = miniProgramToolsService.getMiniProgramTools(id);
+        return success(BeanUtils.toBean(miniProgramTools, MiniProgramToolsRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得AI-小程序工具分页")
+    @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:query')")
+    public CommonResult<PageResult<MiniProgramToolsRespVO>> getMiniProgramToolsPage(@Valid MiniProgramToolsPageReqVO pageReqVO) {
+        PageResult<MiniProgramToolsDO> pageResult = miniProgramToolsService.getMiniProgramToolsPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, MiniProgramToolsRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出AI-小程序工具 Excel")
+    @PreAuthorize("@ss.hasPermission('ai:mini-program-tools:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportMiniProgramToolsExcel(@Valid MiniProgramToolsPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<MiniProgramToolsDO> list = miniProgramToolsService.getMiniProgramToolsPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "AI-小程序工具.xls", "数据", MiniProgramToolsRespVO.class,
+                        BeanUtils.toBean(list, MiniProgramToolsRespVO.class));
+    }
+
+}

+ 41 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/vo/MiniProgramToolsPageReqVO.java

@@ -0,0 +1,41 @@
+package cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.byzs.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - AI-小程序工具分页 Request VO")
+@Data
+public class MiniProgramToolsPageReqVO extends PageParam {
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "图片")
+    private String image;
+
+    @Schema(description = "路由")
+    private String routePath;
+
+    @Schema(description = "程序链接")
+    private String programUrl;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "租户编号")
+    private Long tenantId;
+
+}

+ 54 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/vo/MiniProgramToolsRespVO.java

@@ -0,0 +1,54 @@
+package cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import cn.iocoder.byzs.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.byzs.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - AI-小程序工具 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MiniProgramToolsRespVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("主键")
+    private Integer id;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("名称")
+    private String name;
+
+    @Schema(description = "图片", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("图片")
+    private String image;
+
+    @Schema(description = "路由")
+    @ExcelProperty("路由")
+    private String routePath;
+
+    @Schema(description = "程序链接")
+    @ExcelProperty("程序链接")
+    private String programUrl;
+
+    @Schema(description = "排序")
+    @ExcelProperty("排序")
+    private Integer sort;
+
+    @Schema(description = "状态")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
+}

+ 36 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/controller/admin/miniprogramtools/vo/MiniProgramToolsSaveReqVO.java

@@ -0,0 +1,36 @@
+package cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - AI-小程序工具新增/修改 Request VO")
+@Data
+public class MiniProgramToolsSaveReqVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Integer id;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "名称不能为空")
+    private String name;
+
+    @Schema(description = "图片")
+    private String image;
+
+    @Schema(description = "路由")
+    private String routePath;
+
+    @Schema(description = "程序链接", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "程序链接不能为空")
+    @Pattern(regexp = "(?i)^https?://\\S+$", message = "程序链接仅允许使用 http:// 或 https:// 协议")
+    private String programUrl;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态")
+    private Integer status;
+
+}

+ 58 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/dal/dataobject/miniprogramtools/MiniProgramToolsDO.java

@@ -0,0 +1,58 @@
+package cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.byzs.framework.tenant.core.db.TenantBaseDO;
+
+/**
+ * AI-小程序工具 DO
+ *
+ * @author lyb
+ */
+@TableName("ai_mini_program_tools")
+@KeySequence("ai_mini_program_tools_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MiniProgramToolsDO extends TenantBaseDO {
+
+    /**
+     * 主键
+     */
+    @TableId
+    private Integer id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 图片
+     */
+    private String image;
+    /**
+     * 路由
+     */
+    private String routePath;
+    /**
+     * 程序链接
+     */
+    private String programUrl;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+
+}

+ 34 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/dal/mysql/miniprogramtools/MiniProgramToolsMapper.java

@@ -0,0 +1,34 @@
+package cn.iocoder.byzs.module.ai.dal.mysql.miniprogramtools;
+
+import java.util.*;
+
+import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.byzs.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.*;
+
+/**
+ * AI-小程序工具 Mapper
+ *
+ * @author lyb
+ */
+@Mapper
+public interface MiniProgramToolsMapper extends BaseMapperX<MiniProgramToolsDO> {
+
+    default PageResult<MiniProgramToolsDO> selectPage(MiniProgramToolsPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<MiniProgramToolsDO>()
+                .likeIfPresent(MiniProgramToolsDO::getName, reqVO.getName())
+                .likeIfPresent(MiniProgramToolsDO::getImage, reqVO.getImage())
+                .likeIfPresent(MiniProgramToolsDO::getRoutePath, reqVO.getRoutePath())
+                .likeIfPresent(MiniProgramToolsDO::getProgramUrl, reqVO.getProgramUrl())
+                .eqIfPresent(MiniProgramToolsDO::getSort, reqVO.getSort())
+                .eqIfPresent(MiniProgramToolsDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(MiniProgramToolsDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(MiniProgramToolsDO::getTenantId, reqVO.getTenantId())
+                .orderByAsc(MiniProgramToolsDO::getSort)
+                .orderByDesc(MiniProgramToolsDO::getId));
+    }
+
+}

+ 5 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/enums/ErrorCodeConstants.java

@@ -78,4 +78,9 @@ public interface ErrorCodeConstants {
     // ========== API 地图游戏 1_060_001_000 ==========
     ErrorCode MAP_GAME_NOT_EXISTS = new ErrorCode(1_060_001_000, "地图游戏不存在!");
 
+    // ========== API 小程序工具 1_060_002_000 ==========
+    ErrorCode MINI_PROGRAM_TOOLS_NOT_EXISTS = new ErrorCode(1_060_002_000, "小程序工具不存在!");
+    ErrorCode MINI_PROGRAM_TOOLS_URL_INVALID = new ErrorCode(1_060_002_001,
+            "小程序工具链接仅允许使用 http:// 或 https:// 协议");
+
 }

+ 62 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/service/miniprogramtools/MiniProgramToolsService.java

@@ -0,0 +1,62 @@
+package cn.iocoder.byzs.module.ai.service.miniprogramtools;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.*;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
+import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
+
+/**
+ * AI-小程序工具 Service 接口
+ *
+ * @author lyb
+ */
+public interface MiniProgramToolsService {
+
+    /**
+     * 创建AI-小程序工具
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Integer createMiniProgramTools(@Valid MiniProgramToolsSaveReqVO createReqVO);
+
+    /**
+     * 更新AI-小程序工具
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMiniProgramTools(@Valid MiniProgramToolsSaveReqVO updateReqVO);
+
+    /**
+     * 删除AI-小程序工具
+     *
+     * @param id 编号
+     */
+    void deleteMiniProgramTools(Integer id);
+
+    /**
+    * 批量删除AI-小程序工具
+    *
+    * @param ids 编号
+    */
+    void deleteMiniProgramToolsListByIds(List<Integer> ids);
+
+    /**
+     * 获得AI-小程序工具
+     *
+     * @param id 编号
+     * @return AI-小程序工具
+     */
+    MiniProgramToolsDO getMiniProgramTools(Integer id);
+
+    /**
+     * 获得AI-小程序工具分页
+     *
+     * @param pageReqVO 分页查询
+     * @return AI-小程序工具分页
+     */
+    PageResult<MiniProgramToolsDO> getMiniProgramToolsPage(MiniProgramToolsPageReqVO pageReqVO);
+
+}

+ 102 - 0
byzs-module-ai/src/main/java/cn/iocoder/byzs/module/ai/service/miniprogramtools/MiniProgramToolsServiceImpl.java

@@ -0,0 +1,102 @@
+package cn.iocoder.byzs.module.ai.service.miniprogramtools;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.*;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
+import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
+import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.byzs.module.ai.dal.mysql.miniprogramtools.MiniProgramToolsMapper;
+
+import static cn.iocoder.byzs.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.byzs.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.byzs.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.byzs.module.ai.enums.ErrorCodeConstants.*;
+
+/**
+ * AI-小程序工具 Service 实现类
+ *
+ * @author lyb
+ */
+@Service
+@Validated
+public class MiniProgramToolsServiceImpl implements MiniProgramToolsService {
+
+    @Resource
+    private MiniProgramToolsMapper miniProgramToolsMapper;
+
+    @Override
+    public Integer createMiniProgramTools(MiniProgramToolsSaveReqVO createReqVO) {
+        validateProgramUrl(createReqVO.getProgramUrl());
+        // 插入
+        MiniProgramToolsDO miniProgramTools = BeanUtils.toBean(createReqVO, MiniProgramToolsDO.class);
+        miniProgramToolsMapper.insert(miniProgramTools);
+        // 返回
+        return miniProgramTools.getId();
+    }
+
+    @Override
+    public void updateMiniProgramTools(MiniProgramToolsSaveReqVO updateReqVO) {
+        // 校验存在
+        validateMiniProgramToolsExists(updateReqVO.getId());
+        validateProgramUrl(updateReqVO.getProgramUrl());
+        // 更新
+        MiniProgramToolsDO updateObj = BeanUtils.toBean(updateReqVO, MiniProgramToolsDO.class);
+        miniProgramToolsMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMiniProgramTools(Integer id) {
+        // 校验存在
+        validateMiniProgramToolsExists(id);
+        // 删除
+        miniProgramToolsMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMiniProgramToolsListByIds(List<Integer> ids) {
+        // 校验存在
+        validateMiniProgramToolsExists(ids);
+        // 删除
+        miniProgramToolsMapper.deleteByIds(ids);
+        }
+
+    private void validateMiniProgramToolsExists(List<Integer> ids) {
+        List<MiniProgramToolsDO> list = miniProgramToolsMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            throw exception(MINI_PROGRAM_TOOLS_NOT_EXISTS);
+        }
+    }
+
+    private void validateMiniProgramToolsExists(Integer id) {
+        if (miniProgramToolsMapper.selectById(id) == null) {
+            throw exception(MINI_PROGRAM_TOOLS_NOT_EXISTS);
+        }
+    }
+
+    private void validateProgramUrl(String programUrl) {
+        if (!MiniProgramToolsUrlValidator.isHttpUrl(programUrl)) {
+            throw exception(MINI_PROGRAM_TOOLS_URL_INVALID);
+        }
+    }
+
+    @Override
+    public MiniProgramToolsDO getMiniProgramTools(Integer id) {
+        return miniProgramToolsMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MiniProgramToolsDO> getMiniProgramToolsPage(MiniProgramToolsPageReqVO pageReqVO) {
+        PageResult<MiniProgramToolsDO> pageResult = miniProgramToolsMapper.selectPage(pageReqVO);
+        pageResult.getList().forEach(tool -> validateProgramUrl(tool.getProgramUrl()));
+        return pageResult;
+    }
+
+}

+ 62 - 0
byzs-module-ai/src/main/resources/mapper/miniprogramtools/MiniProgramToolsService.java

@@ -0,0 +1,62 @@
+package cn.iocoder.byzs.module.ai.service.miniprogramtools;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.*;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
+import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
+
+/**
+ * AI-小程序工具 Service 接口
+ *
+ * @author lyb
+ */
+public interface MiniProgramToolsService {
+
+    /**
+     * 创建AI-小程序工具
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Integer createMiniProgramTools(@Valid MiniProgramToolsSaveReqVO createReqVO);
+
+    /**
+     * 更新AI-小程序工具
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMiniProgramTools(@Valid MiniProgramToolsSaveReqVO updateReqVO);
+
+    /**
+     * 删除AI-小程序工具
+     *
+     * @param id 编号
+     */
+    void deleteMiniProgramTools(Integer id);
+
+    /**
+    * 批量删除AI-小程序工具
+    *
+    * @param ids 编号
+    */
+    void deleteMiniProgramToolsListByIds(List<Integer> ids);
+
+    /**
+     * 获得AI-小程序工具
+     *
+     * @param id 编号
+     * @return AI-小程序工具
+     */
+    MiniProgramToolsDO getMiniProgramTools(Integer id);
+
+    /**
+     * 获得AI-小程序工具分页
+     *
+     * @param pageReqVO 分页查询
+     * @return AI-小程序工具分页
+     */
+    PageResult<MiniProgramToolsDO> getMiniProgramToolsPage(MiniProgramToolsPageReqVO pageReqVO);
+
+}

+ 92 - 0
byzs-module-ai/src/main/resources/mapper/miniprogramtools/MiniProgramToolsServiceImpl.java

@@ -0,0 +1,92 @@
+package cn.iocoder.byzs.module.ai.service.miniprogramtools;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.*;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
+import cn.iocoder.byzs.framework.common.pojo.PageResult;
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
+import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.byzs.module.ai.dal.mysql.miniprogramtools.MiniProgramToolsMapper;
+
+import static cn.iocoder.byzs.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.byzs.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.byzs.framework.common.util.collection.CollectionUtils.diffList;
+import static cn.iocoder.byzs.module.ai.enums.ErrorCodeConstants.*;
+
+/**
+ * AI-小程序工具 Service 实现类
+ *
+ * @author lyb
+ */
+@Service
+@Validated
+public class MiniProgramToolsServiceImpl implements MiniProgramToolsService {
+
+    @Resource
+    private MiniProgramToolsMapper miniProgramToolsMapper;
+
+    @Override
+    public Integer createMiniProgramTools(MiniProgramToolsSaveReqVO createReqVO) {
+        // 插入
+        MiniProgramToolsDO miniProgramTools = BeanUtils.toBean(createReqVO, MiniProgramToolsDO.class);
+        miniProgramToolsMapper.insert(miniProgramTools);
+        // 返回
+        return miniProgramTools.getId();
+    }
+
+    @Override
+    public void updateMiniProgramTools(MiniProgramToolsSaveReqVO updateReqVO) {
+        // 校验存在
+        validateMiniProgramToolsExists(updateReqVO.getId());
+        // 更新
+        MiniProgramToolsDO updateObj = BeanUtils.toBean(updateReqVO, MiniProgramToolsDO.class);
+        miniProgramToolsMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMiniProgramTools(Integer id) {
+        // 校验存在
+        validateMiniProgramToolsExists(id);
+        // 删除
+        miniProgramToolsMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMiniProgramToolsListByIds(List<Integer> ids) {
+        // 校验存在
+        validateMiniProgramToolsExists(ids);
+        // 删除
+        miniProgramToolsMapper.deleteByIds(ids);
+        }
+
+    private void validateMiniProgramToolsExists(List<Integer> ids) {
+        List<MiniProgramToolsDO> list = miniProgramToolsMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            throw exception(MINI_PROGRAM_TOOLS_NOT_EXISTS);
+        }
+    }
+
+    private void validateMiniProgramToolsExists(Integer id) {
+        if (miniProgramToolsMapper.selectById(id) == null) {
+            throw exception(MINI_PROGRAM_TOOLS_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public MiniProgramToolsDO getMiniProgramTools(Integer id) {
+        return miniProgramToolsMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MiniProgramToolsDO> getMiniProgramToolsPage(MiniProgramToolsPageReqVO pageReqVO) {
+        return miniProgramToolsMapper.selectPage(pageReqVO);
+    }
+
+}

+ 23 - 1
byzs-web/src/main/java/cn/iocoder/byzs/module/web/controller/admin/ai/WebAiController.java

@@ -15,6 +15,7 @@ import cn.iocoder.byzs.module.ai.controller.admin.image.vo.AiImageDrawReqVO;
 import cn.iocoder.byzs.module.ai.controller.admin.image.vo.AiImageRespVO;
 import cn.iocoder.byzs.module.ai.controller.admin.mapgame.vo.MapGamePageReqVO;
 import cn.iocoder.byzs.module.ai.controller.admin.mapgame.vo.MapGameRespVO;
+import cn.iocoder.byzs.module.ai.controller.admin.miniprogramtools.vo.MiniProgramToolsPageReqVO;
 import cn.iocoder.byzs.module.ai.controller.admin.model.vo.chatRole.AiChatRolePageReqVO;
 import cn.iocoder.byzs.module.ai.controller.admin.video.vo.AiVideoDrawReqVO;
 import cn.iocoder.byzs.module.ai.controller.admin.video.vo.AiVideoRespVO;
@@ -24,6 +25,7 @@ import cn.iocoder.byzs.module.ai.controller.admin.vision.vo.AiVisionThinkReqVO;
 import cn.iocoder.byzs.module.ai.controller.admin.vision.vo.AiVisionThinkRespVO;
 import cn.iocoder.byzs.module.ai.dal.dataobject.image.AiImageDO;
 import cn.iocoder.byzs.module.ai.dal.dataobject.mapgame.MapGameDO;
+import cn.iocoder.byzs.module.ai.dal.dataobject.miniprogramtools.MiniProgramToolsDO;
 import cn.iocoder.byzs.module.ai.dal.dataobject.model.AiChatRoleDO;
 import cn.iocoder.byzs.module.ai.dal.dataobject.model.AiModelDO;
 import cn.iocoder.byzs.module.ai.dal.dataobject.video.AiVideoDO;
@@ -32,12 +34,14 @@ import cn.iocoder.byzs.module.ai.service.chat.AiChatConversationService;
 import cn.iocoder.byzs.module.ai.service.chat.AiChatMessageService;
 import cn.iocoder.byzs.module.ai.service.image.AiImageService;
 import cn.iocoder.byzs.module.ai.service.mapgame.MapGameService;
+import cn.iocoder.byzs.module.ai.service.miniprogramtools.MiniProgramToolsService;
 import cn.iocoder.byzs.module.ai.service.model.AiChatRoleService;
 import cn.iocoder.byzs.module.ai.service.model.AiModelService;
 import cn.iocoder.byzs.module.ai.service.tts.AiTtsService;
 import cn.iocoder.byzs.module.ai.service.video.AiVideoService;
 import cn.iocoder.byzs.module.ai.service.virtualdevice.VirtualDeviceService;
 import cn.iocoder.byzs.module.web.controller.admin.ai.vo.MapGameVO;
+import cn.iocoder.byzs.module.web.controller.admin.ai.vo.MiniProgramToolVO;
 import cn.iocoder.byzs.module.web.controller.admin.ai.vo.TtsVo;
 import cn.iocoder.byzs.module.web.controller.admin.ai.vo.WebAiChatRoleVO;
 import cn.iocoder.byzs.module.web.service.ai.WebAiServiceImpl;
@@ -102,6 +106,8 @@ public class WebAiController {
     @Resource
     private VirtualDeviceService virtualDeviceService;
     @Resource
+    private MiniProgramToolsService miniProgramToolsService;
+    @Resource
     private MapGameService mapGameService;
     @Resource
     private AiTtsService ttsService;
@@ -374,6 +380,22 @@ public class WebAiController {
         return success(BeanUtils.toBean(pageResult, VirtualDeviceRespVO.class));
     }
 
+    @GetMapping("/selectMiniProgramTool")
+    @Operation(summary = "获得小程序工具列表")
+    public CommonResult<PageResult<MiniProgramToolVO>> selectMiniProgramTool(
+            @Valid MiniProgramToolsPageReqVO pageReqVO) {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        pageReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+        PageResult<MiniProgramToolsDO> pageResult = miniProgramToolsService.getMiniProgramToolsPage(pageReqVO);
+        List<MiniProgramToolVO> list = pageResult.getList().stream().map(tool -> {
+            MiniProgramToolVO vo = BeanUtils.toBean(tool, MiniProgramToolVO.class);
+            vo.setUrl(tool.getProgramUrl());
+            return vo;
+        }).toList();
+        return success(new PageResult<>(list, pageResult.getTotal()));
+//        return success(BeanUtils.toBean(pageResult, MiniProgramToolsPageReqVO.class));
+    }
+
 
     // ================ blockly 地图编辑游戏================
 
@@ -398,4 +420,4 @@ public class WebAiController {
 
 
 
-}
+}

+ 23 - 0
byzs-web/src/main/java/cn/iocoder/byzs/module/web/controller/admin/ai/vo/MiniProgramToolVO.java

@@ -0,0 +1,23 @@
+package cn.iocoder.byzs.module.web.controller.admin.ai.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "Web 前端 - 小程序工具 Response VO")
+@Data
+public class MiniProgramToolVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer id;
+
+    @Schema(description = "工具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "工具名称")
+    private String name;
+
+    @Schema(description = "封面图片 URL", example = "https://example.com/cover.png")
+    private String image;
+
+    @Schema(description = "点击后跳转地址", requiredMode = Schema.RequiredMode.REQUIRED,
+            example = "https://example.com/tool")
+    private String url;
+
+}