Commit ba70af16 authored by pengxin's avatar pengxin

新增标记数据统计接口。

parent 651b8ce3
package com.yice.webadmin.app.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "llm-model")
public class LlmModelConfig {
/**
* 大模型管理接口地址
*/
private String llmModelInterface;
/**
* 模型停止
*/
private String stop;
/**
* 重新模型部署
*/
private String reload;
/**
* 模型启动
*/
private String start;
/**
* 列出当前已加载模型
*/
private String listRunningModels;
}
package com.yice.webadmin.app.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "other")
public class OtherConfig {
/**
* 其他通用接口地址
*/
private String otherInterface;
/**
* 获取GPU信息
*/
private String getGpuInfo;
}
package com.yice.webadmin.app.controller;
import com.yice.common.log.annotation.OperationLog;
import com.yice.common.log.model.constant.SysOperationLogType;
import com.github.pagehelper.page.PageMethod;
import com.yice.webadmin.app.vo.*;
import com.yice.webadmin.app.dto.*;
import com.yice.webadmin.app.model.*;
import com.yice.webadmin.app.service.*;
import com.yice.common.core.object.*;
import com.yice.common.core.util.*;
import com.yice.common.core.constant.*;
import com.yice.common.core.annotation.MyRequestBody;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* 知识图谱管理操作控制器类。
*
* @author linking
* @date 2023-04-13
*/
@Api(tags = "知识图谱管理管理接口")
@Slf4j
@RestController
@RequestMapping("/admin/app/kGManage")
public class KGManageController {
@Autowired
private KGManageService kGManageService;
/**
* 新增知识图谱管理数据。
*
* @param kGManageDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。
*/
@ApiOperationSupport(ignoreParameters = {"kGManageDto.kgId"})
@OperationLog(type = SysOperationLogType.ADD)
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody KGManageDto kGManageDto) {
String errorMessage = MyCommonUtil.getModelValidationError(kGManageDto, false);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
KGManage kGManage = MyModelUtil.copyTo(kGManageDto, KGManage.class);
kGManage = kGManageService.saveNew(kGManage);
return ResponseResult.success(kGManage.getKgId());
}
/**
* 更新知识图谱管理数据。
*
* @param kGManageDto 更新对象。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody KGManageDto kGManageDto) {
String errorMessage = MyCommonUtil.getModelValidationError(kGManageDto, true);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
KGManage kGManage = MyModelUtil.copyTo(kGManageDto, KGManage.class);
KGManage originalKGManage = kGManageService.getById(kGManage.getKgId());
if (originalKGManage == null) {
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!kGManageService.update(kGManage, originalKGManage)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
/**
* 删除知识图谱管理数据。
*
* @param kgId 删除对象主键Id。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.DELETE)
@PostMapping("/delete")
public ResponseResult<Void> delete(@MyRequestBody Long kgId) {
if (MyCommonUtil.existBlankArgument(kgId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return this.doDelete(kgId);
}
/**
* 列出符合过滤条件的知识图谱管理列表。
*
* @param kGManageDtoFilter 过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<KGManageVo>> list(
@MyRequestBody KGManageDto kGManageDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
KGManage kGManageFilter = MyModelUtil.copyTo(kGManageDtoFilter, KGManage.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, KGManage.class);
List<KGManage> kGManageList = kGManageService.getKGManageListWithRelation(kGManageFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(kGManageList, KGManage.INSTANCE));
}
/**
* 查看指定知识图谱管理对象详情。
*
* @param kgId 指定对象主键Id。
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<KGManageVo> view(@RequestParam Long kgId) {
KGManage kGManage = kGManageService.getByIdWithRelation(kgId, MyRelationParam.full());
if (kGManage == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
KGManageVo kGManageVo = KGManage.INSTANCE.fromModel(kGManage);
return ResponseResult.success(kGManageVo);
}
private ResponseResult<Void> doDelete(Long kgId) {
String errorMessage;
// 验证关联Id的数据合法性
KGManage originalKGManage = kGManageService.getById(kgId);
if (originalKGManage == null) {
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!kGManageService.remove(kgId)) {
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
return ResponseResult.success();
}
}
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.KGManage;
import org.apache.ibatis.annotations.Param;
import java.util.*;
/**
* 知识图谱管理数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface KGManageMapper extends BaseDaoMapper<KGManage> {
/**
* 批量插入对象列表。
*
* @param kGManageList 新增对象列表。
*/
void insertList(List<KGManage> kGManageList);
/**
* 获取过滤后的对象列表。
*
* @param kGManageFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<KGManage> getKGManageList(
@Param("kGManageFilter") KGManage kGManageFilter, @Param("orderBy") String orderBy);
}
<?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.yice.webadmin.app.dao.KGManageMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.app.model.KGManage">
<id column="kg_id" jdbcType="BIGINT" property="kgId"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="kg_name" jdbcType="VARCHAR" property="kgName"/>
<result column="kg_describe" jdbcType="VARCHAR" property="kgDescribe"/>
<result column="kg_url" jdbcType="VARCHAR" property="kgUrl"/>
<result column="kg_user_name" jdbcType="VARCHAR" property="kgUserName"/>
<result column="kg_password" jdbcType="VARCHAR" property="kgPassword"/>
<result column="kg_bower_url" jdbcType="VARCHAR" property="kgBowerUrl"/>
<result column="kg_type" jdbcType="VARCHAR" property="kgType"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_kg_manage
(kg_id,
create_user_id,
create_time,
update_user_id,
update_time,
kg_name,
kg_describe,
kg_url,
kg_user_name,
kg_password,
kg_bower_url,
kg_type)
VALUES
<foreach collection="list" index="index" item="item" separator="," >
(#{item.kgId},
#{item.createUserId},
#{item.createTime},
#{item.updateUserId},
#{item.updateTime},
#{item.kgName},
#{item.kgDescribe},
#{item.kgUrl},
#{item.kgUserName},
#{item.kgPassword},
#{item.kgBowerUrl},
#{item.kgType})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.app.dao.KGManageMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="kGManageFilter != null">
<if test="kGManageFilter.kgName != null and kGManageFilter.kgName != ''">
AND lmp_kg_manage.kg_name = #{kGManageFilter.kgName}
</if>
</if>
</sql>
<select id="getKGManageList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.KGManage">
SELECT * FROM lmp_kg_manage
<where>
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
package com.yice.webadmin.app.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* DatasetDataSummaryDto视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("DatasetDataSummaryDto视图对象")
@Data
public class DatasetDataSummaryDto {
/**
* 全部标记数
*/
@ApiModelProperty(value = "全部标记数")
private Long allMarkCount;
/**
* 未标记数
*/
@ApiModelProperty(value = "未标记数")
private Long unMarkCount;
/**
* 已标记数
*/
@ApiModelProperty(value = "已标记数")
private Long markCount;
}
package com.yice.webadmin.app.dto;
import com.yice.common.core.validator.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
/**
* KGManageDto对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("KGManageDto对象")
@Data
public class KGManageDto {
/**
* 知识图谱ID。
*/
@ApiModelProperty(value = "知识图谱ID", required = true)
@NotNull(message = "数据验证失败,知识图谱ID不能为空!", groups = {UpdateGroup.class})
private Long kgId;
/**
* 知识图谱名称。
*/
@ApiModelProperty(value = "知识图谱名称")
@NotNull(message = "数据验证失败,知识图谱名称不能为空!", groups = {UpdateGroup.class})
private String kgName;
/**
* 知识图谱描述。
*/
@ApiModelProperty(value = "知识图谱描述")
private String kgDescribe;
/**
* 知识图谱地址。
*/
@ApiModelProperty(value = "知识图谱地址")
private String kgUrl;
/**
* 知识图谱用户名。
*/
@ApiModelProperty(value = "知识图谱用户名")
private String kgUserName;
/**
* 知识图谱密码。
*/
@ApiModelProperty(value = "知识图谱密码")
private String kgPassword;
/**
* 知识图谱浏览地址。
*/
@ApiModelProperty(value = "知识图谱浏览地址")
private String kgBowerUrl;
/**
* 知识图谱类型。
*/
@ApiModelProperty(value = "知识图谱类型")
private String kgType;
}
package com.yice.webadmin.app.model;
import com.baomidou.mybatisplus.annotation.*;
import com.yice.common.core.base.model.BaseModel;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.webadmin.app.vo.KGManageVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
/**
* KGManage实体对象。
*
* @author linking
* @date 2023-04-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_kg_manage")
public class KGManage extends BaseModel {
/**
* 知识图谱ID。
*/
@TableId(value = "kg_id")
private Long kgId;
/**
* 知识图谱名称。
*/
private String kgName;
/**
* 知识图谱描述。
*/
private String kgDescribe;
/**
* 知识图谱地址。
*/
private String kgUrl;
/**
* 知识图谱用户名。
*/
private String kgUserName;
/**
* 知识图谱密码。
*/
private String kgPassword;
/**
* 知识图谱浏览地址。
*/
private String kgBowerUrl;
/**
* 知识图谱类型。
*/
private String kgType;
@Mapper
public interface KGManageModelMapper extends BaseModelMapper<KGManageVo, KGManage> {
}
public static final KGManageModelMapper INSTANCE = Mappers.getMapper(KGManageModelMapper.class);
}
package com.yice.webadmin.app.service;
import com.yice.webadmin.app.model.*;
import com.yice.common.core.base.service.IBaseService;
import java.util.*;
/**
* 知识图谱管理数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface KGManageService extends IBaseService<KGManage, Long> {
/**
* 保存新增对象。
*
* @param kGManage 新增对象。
* @return 返回新增对象。
*/
KGManage saveNew(KGManage kGManage);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param kGManageList 新增对象列表。
*/
void saveNewBatch(List<KGManage> kGManageList);
/**
* 更新数据对象。
*
* @param kGManage 更新的对象。
* @param originalKGManage 原有数据对象。
* @return 成功返回true,否则false。
*/
boolean update(KGManage kGManage, KGManage originalKGManage);
/**
* 删除指定数据。
*
* @param kgId 主键Id。
* @return 成功返回true,否则false。
*/
boolean remove(Long kgId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getKGManageListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<KGManage> getKGManageList(KGManage filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getKGManageList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<KGManage> getKGManageListWithRelation(KGManage filter, String orderBy);
}
package com.yice.webadmin.app.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.yice.webadmin.app.service.*;
import com.yice.webadmin.app.dao.*;
import com.yice.webadmin.app.model.*;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.common.core.object.MyRelationParam;
import com.yice.common.core.base.service.BaseService;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* 知识图谱管理数据操作服务类。
*
* @author linking
* @date 2023-04-13
*/
@Slf4j
@Service("kGManageService")
public class KGManageServiceImpl extends BaseService<KGManage, Long> implements KGManageService {
@Autowired
private KGManageMapper kGManageMapper;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<KGManage> mapper() {
return kGManageMapper;
}
/**
* 保存新增对象。
*
* @param kGManage 新增对象。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public KGManage saveNew(KGManage kGManage) {
kGManageMapper.insert(this.buildDefaultValue(kGManage));
return kGManage;
}
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param kGManageList 新增对象列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveNewBatch(List<KGManage> kGManageList) {
if (CollUtil.isNotEmpty(kGManageList)) {
kGManageList.forEach(this::buildDefaultValue);
kGManageMapper.insertList(kGManageList);
}
}
/**
* 更新数据对象。
*
* @param kGManage 更新的对象。
* @param originalKGManage 原有数据对象。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(KGManage kGManage, KGManage originalKGManage) {
MyModelUtil.fillCommonsForUpdate(kGManage, originalKGManage);
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<KGManage> uw = this.createUpdateQueryForNullValue(kGManage, kGManage.getKgId());
return kGManageMapper.update(kGManage, uw) == 1;
}
/**
* 删除指定数据。
*
* @param kgId 主键Id。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long kgId) {
return kGManageMapper.deleteById(kgId) == 1;
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getKGManageListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<KGManage> getKGManageList(KGManage filter, String orderBy) {
return kGManageMapper.getKGManageList(filter, orderBy);
}
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getKGManageList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<KGManage> getKGManageListWithRelation(KGManage filter, String orderBy) {
List<KGManage> resultList = kGManageMapper.getKGManageList(filter, orderBy);
// 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
}
private KGManage buildDefaultValue(KGManage kGManage) {
if (kGManage.getKgId() == null) {
kGManage.setKgId(idGenerator.nextLongId());
}
MyModelUtil.fillCommonsForInsert(kGManage);
return kGManage;
}
}
package com.yice.webadmin.app.util;
/*import org.neo4j.driver.Driver;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Config;*/
public class Neo4jUtil {
public void test() {
// 配置 Neo4j 驱动程序
/* Config config = Config.builder().
.withCredentials(AuthTokens.basic("username", "password")) // 替换为你的用户名和密码
.build();
// 获取 Neo4j 驱动实例
Driver driver = Driver.builder()
.withConfig(config)
.build();
// 打开与 Neo4j 的连接
try (GraphDatabase graphDatabase = driver.session()) {
// 在此处执行你的数据库操作
// 例如,查询节点或关系
// 关闭会话
graphDatabase.shutdown();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭驱动程序
driver.close();
}*/
}
}
package com.yice.webadmin.app.vo;
import com.yice.common.core.base.vo.BaseVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* KGManageVO视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("KGManageVO视图对象")
@Data
@EqualsAndHashCode(callSuper = true)
public class KGManageVo extends BaseVo {
/**
* 知识图谱ID。
*/
@ApiModelProperty(value = "知识图谱ID")
private Long kgId;
/**
* 知识图谱名称。
*/
@ApiModelProperty(value = "知识图谱名称")
private String kgName;
/**
* 知识图谱描述。
*/
@ApiModelProperty(value = "知识图谱描述")
private String kgDescribe;
/**
* 知识图谱地址。
*/
@ApiModelProperty(value = "知识图谱地址")
private String kgUrl;
/**
* 知识图谱用户名。
*/
@ApiModelProperty(value = "知识图谱用户名")
private String kgUserName;
/**
* 知识图谱密码。
*/
@ApiModelProperty(value = "知识图谱密码")
private String kgPassword;
/**
* 知识图谱浏览地址。
*/
@ApiModelProperty(value = "知识图谱浏览地址")
private String kgBowerUrl;
/**
* 知识图谱类型。
*/
@ApiModelProperty(value = "知识图谱类型")
private String kgType;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment