mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	【功能新增】AI 大模型:支持思维导图的管理
This commit is contained in:
		@@ -45,9 +45,11 @@ public interface ErrorCodeConstants {
 | 
			
		||||
    // ========== API 音乐 1-040-006-000 ==========
 | 
			
		||||
    ErrorCode MUSIC_NOT_EXISTS = new ErrorCode(1_022_006_000, "音乐不存在!");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // ========== API 写作 1-022-007-000 ==========
 | 
			
		||||
    ErrorCode WRITE_NOT_EXISTS = new ErrorCode(1_022_007_000, "作文不存在!");
 | 
			
		||||
    ErrorCode WRITE_STREAM_ERROR = new ErrorCode(1_022_07_001, "写作生成异常!");
 | 
			
		||||
 | 
			
		||||
    // ========== API 思维导图 1-040-008-000 ==========
 | 
			
		||||
    ErrorCode MIND_MAP_NOT_EXISTS = new ErrorCode(1_040_008_000, "思维导图不存在!");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,25 @@
 | 
			
		||||
package cn.iocoder.yudao.module.ai.controller.admin.mindmap;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapGenerateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.service.mindmap.AiMindMapService;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Operation;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Parameter;
 | 
			
		||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.annotation.security.PermitAll;
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
import org.springframework.http.MediaType;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
import reactor.core.publisher.Flux;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 | 
			
		||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 | 
			
		||||
 | 
			
		||||
@Tag(name = "管理后台 - AI 思维导图")
 | 
			
		||||
@@ -32,4 +37,23 @@ public class AiMindMapController {
 | 
			
		||||
        return mindMapService.generateMindMap(generateReqVO, getLoginUserId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // ================ 导图管理 ================
 | 
			
		||||
 | 
			
		||||
    @DeleteMapping("/delete")
 | 
			
		||||
    @Operation(summary = "删除思维导图")
 | 
			
		||||
    @Parameter(name = "id", description = "编号", required = true)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermission('ai:mind-map:delete')")
 | 
			
		||||
    public CommonResult<Boolean> deleteMindMap(@RequestParam("id") Long id) {
 | 
			
		||||
        mindMapService.deleteMindMap(id);
 | 
			
		||||
        return success(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/page")
 | 
			
		||||
    @Operation(summary = "获得思维导图分页")
 | 
			
		||||
    @PreAuthorize("@ss.hasPermission('ai:mind-map:query')")
 | 
			
		||||
    public CommonResult<PageResult<AiMindMapRespVO>> getMindMapPage(@Valid AiMindMapPageReqVO pageReqVO) {
 | 
			
		||||
        PageResult<AiMindMapDO> pageResult = mindMapService.getMindMapPage(pageReqVO);
 | 
			
		||||
        return success(BeanUtils.toBean(pageResult, AiMindMapRespVO.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
package cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@Schema(description = "管理后台 - AI 思维导图分页 Request VO")
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@ToString(callSuper = true)
 | 
			
		||||
public class AiMindMapPageReqVO extends PageParam {
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "用户编号", example = "4325")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "生成内容提示", example = "Java 学习路线")
 | 
			
		||||
    private String prompt;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "创建时间")
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    private LocalDateTime[] createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,36 @@
 | 
			
		||||
package cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo;
 | 
			
		||||
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@Schema(description = "管理后台 - AI 思维导图 Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
public class AiMindMapRespVO {
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3373")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4325")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "生成内容提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 学习路线")
 | 
			
		||||
    private String prompt;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "生成的思维导图内容")
 | 
			
		||||
    private String generatedContent;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
 | 
			
		||||
    private String platform;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "gpt-3.5-turbo-0125")
 | 
			
		||||
    private String model;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "错误信息")
 | 
			
		||||
    private String errorMessage;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
 | 
			
		||||
    private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,9 @@
 | 
			
		||||
package cn.iocoder.yudao.module.ai.dal.mysql.mindmap;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
@@ -11,4 +14,13 @@ import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 */
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface AiMindMapMapper extends BaseMapperX<AiMindMapDO> {
 | 
			
		||||
 | 
			
		||||
    default PageResult<AiMindMapDO> selectPage(AiMindMapPageReqVO reqVO) {
 | 
			
		||||
        return selectPage(reqVO, new LambdaQueryWrapperX<AiMindMapDO>()
 | 
			
		||||
                .eqIfPresent(AiMindMapDO::getUserId, reqVO.getUserId())
 | 
			
		||||
                .eqIfPresent(AiMindMapDO::getPrompt, reqVO.getPrompt())
 | 
			
		||||
                .betweenIfPresent(AiMindMapDO::getCreateTime, reqVO.getCreateTime())
 | 
			
		||||
                .orderByDesc(AiMindMapDO::getId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,10 @@
 | 
			
		||||
package cn.iocoder.yudao.module.ai.service.mindmap;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapGenerateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
 | 
			
		||||
import reactor.core.publisher.Flux;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -20,4 +23,19 @@ public interface AiMindMapService {
 | 
			
		||||
     */
 | 
			
		||||
    Flux<CommonResult<String>> generateMindMap(AiMindMapGenerateReqVO generateReqVO, Long userId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除思维导图
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 编号
 | 
			
		||||
     */
 | 
			
		||||
    void deleteMindMap(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得思维导图分页
 | 
			
		||||
     *
 | 
			
		||||
     * @param pageReqVO 分页查询
 | 
			
		||||
     * @return 思维导图分页
 | 
			
		||||
     */
 | 
			
		||||
    PageResult<AiMindMapDO> getMindMapPage(AiMindMapPageReqVO pageReqVO);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,11 @@ import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
 | 
			
		||||
import cn.iocoder.yudao.framework.ai.core.util.AiUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapGenerateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
 | 
			
		||||
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
 | 
			
		||||
@@ -33,8 +35,10 @@ import reactor.core.publisher.Flux;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 | 
			
		||||
import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.MIND_MAP_NOT_EXISTS;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * AI 思维导图 Service 实现类
 | 
			
		||||
@@ -131,4 +135,23 @@ public class AiMindMapServiceImpl implements AiMindMapService {
 | 
			
		||||
        return model;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void deleteMindMap(Long id) {
 | 
			
		||||
        // 校验存在
 | 
			
		||||
        validateMindMapExists(id);
 | 
			
		||||
        // 删除
 | 
			
		||||
        mindMapMapper.deleteById(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void validateMindMapExists(Long id) {
 | 
			
		||||
        if (mindMapMapper.selectById(id) == null) {
 | 
			
		||||
            throw exception(MIND_MAP_NOT_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PageResult<AiMindMapDO> getMindMapPage(AiMindMapPageReqVO pageReqVO) {
 | 
			
		||||
        return mindMapMapper.selectPage(pageReqVO);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user