src/main/java/cc/mrbird/febs/ai/controller/agent/ApiAgentController.java
New file @@ -0,0 +1,70 @@ package cc.mrbird.febs.ai.controller.agent; import cc.mrbird.febs.ai.req.agent.AiAgentInitDto; import cc.mrbird.febs.ai.req.agent.ApiAgentCategoryAllDto; import cc.mrbird.febs.ai.req.agent.ApiAgentPageDto; import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryAllDto; import cc.mrbird.febs.ai.res.agent.AiAgentInitVo; import cc.mrbird.febs.ai.res.agent.ApiAgentCategoryVo; import cc.mrbird.febs.ai.res.agent.ApiAgentVo; import cc.mrbird.febs.ai.res.productCategory.ApiProductCategoryVo; import cc.mrbird.febs.ai.service.AiAgentService; import cc.mrbird.febs.common.entity.FebsResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; /** * @author Administrator */ @Slf4j @Validated @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/ai/agent") @Api(value = "ApiAgentController", tags = "AI-智能体") public class ApiAgentController { private final AiAgentService service; @ApiOperation(value = "全部分类(带公司ID)", notes = "全部分类(带公司ID)") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiAgentCategoryVo.class) }) @PostMapping(value = "/allCategoryList") public FebsResponse allCategoryList(@RequestBody ApiAgentCategoryAllDto dto) { return service.allCategoryList(dto); } @ApiOperation(value = "列表", notes = "列表") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiAgentVo.class) }) @PostMapping(value = "/list") public FebsResponse list(@RequestBody @Validated ApiAgentPageDto dto) { return service.agentList(dto); } @ApiOperation(value = "初始化智能体", notes = "初始化智能体") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = AiAgentInitVo.class) }) @PostMapping(value = "/initAgent", produces = "application/json") public FebsResponse initAgent(@RequestBody @Validated AiAgentInitDto dto) { return service.initAgent(dto); } } src/main/java/cc/mrbird/febs/ai/entity/AiAgent.java
@@ -8,9 +8,6 @@ @TableName("ai_agent") public class AiAgent extends AiBaseEntity { /** 主键 */ private String id; /** 公司ID */ private String companyId; src/main/java/cc/mrbird/febs/ai/entity/AiAgentCategory.java
@@ -8,9 +8,6 @@ @TableName("ai_agent_category") public class AiAgentCategory extends AiBaseEntity { /** 主键 */ private String id; /** 公司ID */ private String companyId; src/main/java/cc/mrbird/febs/ai/entity/AiAgentStartQuestion.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.ai.entity; import cc.mrbird.febs.common.entity.AiBaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("ai_agent_start_question") public class AiAgentStartQuestion extends AiBaseEntity { /** 公司ID */ private String companyId; /** 代理ID */ private String agentId; /** 问题内容 */ private String title; } src/main/java/cc/mrbird/febs/ai/mapper/AiAgentMapper.java
@@ -1,7 +1,14 @@ package cc.mrbird.febs.ai.mapper; import cc.mrbird.febs.ai.entity.AiAgent; import cc.mrbird.febs.ai.req.agent.ApiAgentPageDto; import cc.mrbird.febs.ai.res.agent.ApiAgentVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; public interface AiAgentMapper extends BaseMapper<AiAgent> { Page<ApiAgentVo> getPageListByQuery(Page<ApiAgentVo> page, @Param("record")ApiAgentPageDto dto); } src/main/java/cc/mrbird/febs/ai/mapper/AiAgentStartQuestionMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.ai.mapper; import cc.mrbird.febs.ai.entity.AiAgentStartQuestion; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface AiAgentStartQuestionMapper extends BaseMapper<AiAgentStartQuestion> { } src/main/java/cc/mrbird/febs/ai/req/agent/AiAgentInitDto.java
New file @@ -0,0 +1,16 @@ package cc.mrbird.febs.ai.req.agent; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; @Data @ApiModel(value = "AiAgentInitDto", description = "参数") public class AiAgentInitDto { @NotBlank(message = "智能体不能为空") @ApiModelProperty(value = "智能体ID", example = "you_ke_*****") private String id; } src/main/java/cc/mrbird/febs/ai/req/agent/ApiAgentCategoryAllDto.java
New file @@ -0,0 +1,13 @@ package cc.mrbird.febs.ai.req.agent; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiAgentCategoryAllDto", description = "参数") public class ApiAgentCategoryAllDto { @ApiModelProperty(value = "公司ID", example = "1") private String companyId; } src/main/java/cc/mrbird/febs/ai/req/agent/ApiAgentPageDto.java
New file @@ -0,0 +1,28 @@ package cc.mrbird.febs.ai.req.agent; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data @ApiModel(value = "ApiAgentPageDto", description = "参数") public class ApiAgentPageDto { @NotNull(message = "页码不能为空") @ApiModelProperty(value = "页码", example = "1") private Integer pageNow; @NotNull(message = "每页数量不能为空") @ApiModelProperty(value = "每页数量", example = "10") private Integer pageSize; @ApiModelProperty(value = "分类ID", example = "123") private String categoryId; @ApiModelProperty(value = "公司ID", example = "123") private String companyId; } src/main/java/cc/mrbird/febs/ai/res/agent/AiAgentInitVo.java
New file @@ -0,0 +1,26 @@ package cc.mrbird.febs.ai.res.agent; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "AiAgentInitVo", description = "参数") public class AiAgentInitVo { @ApiModelProperty(value = "智能体ID*", example = "1") private String id; @ApiModelProperty(value = "名称*", example = "1") private String name; @ApiModelProperty(value = "描述*", example = "1") private String description; @ApiModelProperty(value = "小图标*", example = "1") private String iconImg; @ApiModelProperty(value = "开场白*", example = "1") private String introduct; @ApiModelProperty(value = "开场白预设问题", example = "1") private List<String> items; } src/main/java/cc/mrbird/febs/ai/res/agent/ApiAgentCategoryVo.java
New file @@ -0,0 +1,19 @@ package cc.mrbird.febs.ai.res.agent; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiAgentCategoryVo", description = "参数") public class ApiAgentCategoryVo { @ApiModelProperty(value = "ID") private String id; /** * 名称 */ @ApiModelProperty(value = "名称") private String name; } src/main/java/cc/mrbird/febs/ai/res/agent/ApiAgentVo.java
New file @@ -0,0 +1,36 @@ package cc.mrbird.febs.ai.res.agent; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiAgentVo", description = "参数") public class ApiAgentVo { @ApiModelProperty(value = "ID") private String id; /** * 名称 */ @ApiModelProperty(value = "ID") private String name; /** * 目标 */ @ApiModelProperty(value = "描述") private String description; /** * 小图标 */ @ApiModelProperty(value = "图片") private String iconImg; /** 开场白 */ @ApiModelProperty(value = "开场白") private String introduct; } src/main/java/cc/mrbird/febs/ai/service/AiAgentService.java
@@ -1,7 +1,17 @@ package cc.mrbird.febs.ai.service; import cc.mrbird.febs.ai.entity.AiAgent; import cc.mrbird.febs.ai.req.agent.AiAgentInitDto; import cc.mrbird.febs.ai.req.agent.ApiAgentCategoryAllDto; import cc.mrbird.febs.ai.req.agent.ApiAgentPageDto; import cc.mrbird.febs.common.entity.FebsResponse; import com.baomidou.mybatisplus.extension.service.IService; public interface AiAgentService extends IService<AiAgent> { FebsResponse allCategoryList(ApiAgentCategoryAllDto dto); FebsResponse agentList(ApiAgentPageDto dto); FebsResponse initAgent(AiAgentInitDto dto); } src/main/java/cc/mrbird/febs/ai/service/impl/AiAgentServiceImpl.java
@@ -1,15 +1,101 @@ package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiAgent; import cc.mrbird.febs.ai.entity.*; import cc.mrbird.febs.ai.enumerates.AiCommonEnum; import cc.mrbird.febs.ai.enumerates.ProductCategoryLevelEnum; import cc.mrbird.febs.ai.mapper.AiAgentCategoryMapper; import cc.mrbird.febs.ai.mapper.AiAgentMapper; import cc.mrbird.febs.ai.mapper.AiAgentStartQuestionMapper; import cc.mrbird.febs.ai.req.agent.AiAgentInitDto; import cc.mrbird.febs.ai.req.agent.ApiAgentCategoryAllDto; import cc.mrbird.febs.ai.req.agent.ApiAgentPageDto; import cc.mrbird.febs.ai.res.agent.AiAgentInitVo; import cc.mrbird.febs.ai.res.agent.ApiAgentCategoryVo; import cc.mrbird.febs.ai.res.agent.ApiAgentVo; import cc.mrbird.febs.ai.res.product.ApiProductVo; import cc.mrbird.febs.ai.res.productCategory.ApiProductCategoryVo; import cc.mrbird.febs.ai.service.AiAgentService; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.exception.FebsException; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Slf4j @Service @RequiredArgsConstructor public class AiAgentServiceImpl extends ServiceImpl<AiAgentMapper, AiAgent> implements AiAgentService { private final AiAgentMapper aiAgentMapper; private final AiAgentCategoryMapper aiAgentCategoryMapper; private final AiAgentStartQuestionMapper aiAgentStartQuestionMapper; @Override public FebsResponse allCategoryList(ApiAgentCategoryAllDto dto) { List<ApiAgentCategoryVo> list = new ArrayList<>(); LambdaQueryWrapper<AiAgentCategory> query = Wrappers.lambdaQuery(AiAgentCategory.class); if (StrUtil.isEmpty(dto.getCompanyId())){ dto.setCompanyId(AiCommonEnum.COMPANY_ID.getPrompt()); } query.eq(AiAgentCategory::getCompanyId, dto.getCompanyId()); query.eq(AiAgentCategory::getState, 1); query.orderByAsc(AiAgentCategory::getSort); List<AiAgentCategory> listByQuery = aiAgentCategoryMapper.selectList(query); if (CollUtil.isNotEmpty(listByQuery)){ for (AiAgentCategory entity : listByQuery){ ApiAgentCategoryVo vo = new ApiAgentCategoryVo(); vo.setId(entity.getId()); vo.setName(entity.getName()); list.add(vo); } } return new FebsResponse().success().data(list); } @Override public FebsResponse agentList(ApiAgentPageDto dto) { // 创建分页对象,传入当前页和每页大小 Page<ApiAgentVo> page = new Page<>(dto.getPageNow(), dto.getPageSize()); Page<ApiAgentVo> pageListByQuery = aiAgentMapper.getPageListByQuery(page, dto); return new FebsResponse().success().data(pageListByQuery); } @Override public FebsResponse initAgent(AiAgentInitDto dto) { String id = dto.getId(); AiAgent aiAgent = aiAgentMapper.selectById(id); if (aiAgent == null) { throw new FebsException("智能体异常"); } AiAgentInitVo vo = new AiAgentInitVo(); //将chatWebPlugin复制给apiInitPluginVo BeanUtil.copyProperties(aiAgent, vo); List<AiAgentStartQuestion> aiAgentStartQuestions = aiAgentStartQuestionMapper.selectList( Wrappers.lambdaQuery(AiAgentStartQuestion.class) .select(AiAgentStartQuestion::getTitle) .eq(AiAgentStartQuestion::getAgentId, id) ); if (CollUtil.isNotEmpty(aiAgentStartQuestions)){ List<String> items = new ArrayList<>(); for (AiAgentStartQuestion aiAgentStartQuestion : aiAgentStartQuestions) { items.add(aiAgentStartQuestion.getTitle()); } vo.setItems( items); } return new FebsResponse().success().data(vo); } } src/main/resources/mapper/modules/AiAgentMapper.xml
@@ -1,4 +1,25 @@ <?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="cc.mrbird.febs.ai.mapper.AiAgentMapper"> <select id="getPageListByQuery" resultType="cc.mrbird.febs.ai.res.agent.ApiAgentVo"> select a.id as id, a.name as name, a.description as description, a.icon_img as iconImg, a.introduct as introduct from ai_agent a <where> a.state = 1 and a.company_id = #{record.companyId} <if test="record != null"> <if test="record.categoryId != null and record.categoryId != ''"> and a.agent_category_id = #{record.categoryId} </if> </if> </where> </select> </mapper>