1. 结构化数据存储改造

topo_dev
xueqingkun 5 months ago
parent 70e7c4bf8d
commit 34204a804a

@ -0,0 +1,82 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
*
* @TableName attribute_gwzs
*/
@TableName(value ="attribute_gwzs")
@Data
public class AttributeGwzs implements Serializable {
/**
*
*/
private String id;
/**
* id
*/
private String evidenceId;
/**
*
*/
@Schema(description = "项目名称", type = "1")
private String projectName;
/**
*
*/
@Schema(description = "项目状态", type = "1")
private String projectStatus;
/**
*
*/
@Schema(description = "发布单位", type = "1")
private String publishingUnit;
/**
*
*/
@Schema(description = "结论", type = "1")
private String conclusion;
/**
*
*/
@Schema(description = "发文时间", type = "3")
private String publicationTime;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
*
*/
private String createUserId;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
*
*/
private String updateUserId;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@ -1,9 +1,7 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@ -114,6 +112,7 @@ public class AttributeMmht implements Serializable {
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
@ -124,6 +123,7 @@ public class AttributeMmht implements Serializable {
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**

@ -0,0 +1,100 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
*
* @TableName attribute_xmht
*/
@TableName(value ="attribute_xmht")
@Data
public class AttributeXmht implements Serializable {
/**
*
*/
private String id;
/**
* id
*/
private String evidenceId;
/**
*
*/
@Schema(description = "项目名称", type = "1")
private String projectName;
/**
*
*/
@Schema(description = "甲方", type = "1")
private String partA;
/**
*
*/
@Schema(description = "乙方", type = "1")
private String partB;
/**
*
*/
@Schema(description = "项目范围", type = "1")
private String scope;
/**
*
*/
@Schema(description = "项目开始时间", type = "3")
private String projectStartTime;
/**
*
*/
@Schema(description = "项目结束时间", type = "3")
private String projectEndTime;
/**
*
*/
@Schema(description = "签订日期", type = "3")
private String signingTime;
/**
*
*/
@Schema(description = "项目状态", type = "1")
private String projectStatus;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
*
*/
private String createUserId;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
*
*/
private String updateUserId;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@ -1,9 +1,7 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@ -66,6 +64,7 @@ public class AttributeYhls implements Serializable {
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
@ -76,6 +75,7 @@ public class AttributeYhls implements Serializable {
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**

@ -1,9 +1,7 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@ -60,6 +58,7 @@ public class AttributeZfpz implements Serializable {
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
@ -70,6 +69,7 @@ public class AttributeZfpz implements Serializable {
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**

@ -0,0 +1,18 @@
package com.supervision.police.mapper;
import com.supervision.police.domain.AttributeGwzs;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description attribute_gwzsMapper
* @createDate 2024-11-21 10:09:13
* @Entity com.supervision.police.domain.AttributeGwzs
*/
public interface AttributeGwzsMapper extends BaseMapper<AttributeGwzs> {
}

@ -0,0 +1,18 @@
package com.supervision.police.mapper;
import com.supervision.police.domain.AttributeXmht;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description attribute_xmhtMapper
* @createDate 2024-11-21 10:09:13
* @Entity com.supervision.police.domain.AttributeXmht
*/
public interface AttributeXmhtMapper extends BaseMapper<AttributeXmht> {
}

@ -3,6 +3,8 @@ package com.supervision.police.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.supervision.police.domain.CasePerson;
import java.util.List;
/**
* (CasePerson)访
*
@ -11,5 +13,6 @@ import com.supervision.police.domain.CasePerson;
*/
public interface CasePersonMapper extends BaseMapper<CasePerson> {
List<CasePerson> listByEvidenceId(String evidenceId);
}

@ -0,0 +1,13 @@
package com.supervision.police.service;
import com.supervision.police.domain.AttributeGwzs;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Administrator
* @description attribute_gwzsService
* @createDate 2024-11-21 10:09:13
*/
public interface AttributeGwzsService extends IService<AttributeGwzs> {
}

@ -0,0 +1,13 @@
package com.supervision.police.service;
import com.supervision.police.domain.AttributeXmht;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Administrator
* @description attribute_xmhtService
* @createDate 2024-11-21 10:09:13
*/
public interface AttributeXmhtService extends IService<AttributeXmht> {
}

@ -161,4 +161,6 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
void updateEvidenceAppendProcessingNewTransaction(String evidenceId, String status,String appendProcessing);
void redoExtractAttributes(String caseId, List<CaseEvidence> caseEvidences);
}

@ -3,6 +3,8 @@ package com.supervision.police.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.CasePerson;
import java.util.List;
public interface CasePersonService extends IService<CasePerson> {
@ -14,4 +16,7 @@ public interface CasePersonService extends IService<CasePerson> {
* @return true false
*/
boolean saveCaseActor(String caseId,String caseActorName,String caseActorIdCard);
List<CasePerson> listByEvidenceId(String evidenceId);
}

@ -0,0 +1,22 @@
package com.supervision.police.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.AttributeGwzs;
import com.supervision.police.service.AttributeGwzsService;
import com.supervision.police.mapper.AttributeGwzsMapper;
import org.springframework.stereotype.Service;
/**
* @author Administrator
* @description attribute_gwzsService
* @createDate 2024-11-21 10:09:13
*/
@Service
public class AttributeGwzsServiceImpl extends ServiceImpl<AttributeGwzsMapper, AttributeGwzs>
implements AttributeGwzsService{
}

@ -0,0 +1,22 @@
package com.supervision.police.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.AttributeXmht;
import com.supervision.police.service.AttributeXmhtService;
import com.supervision.police.mapper.AttributeXmhtMapper;
import org.springframework.stereotype.Service;
/**
* @author Administrator
* @description attribute_xmhtService
* @createDate 2024-11-21 10:09:13
*/
@Service
public class AttributeXmhtServiceImpl extends ServiceImpl<AttributeXmhtMapper, AttributeXmht>
implements AttributeXmhtService{
}

@ -9,8 +9,10 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.CasePerson;
import com.supervision.police.dto.NotePromptExtractAttributesDto;
import com.supervision.police.service.CaseEvidencePropertyService;
import com.supervision.police.service.CasePersonService;
import com.supervision.police.service.ComDictionaryService;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.annotation.PostConstruct;
@ -32,23 +34,27 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
private final ApplicationContext applicationContext;
private final ComDictionaryService comDictionaryService;
private final CasePersonService casePersonService;
private final Map<String, IService<?>> evidencePropertyServiceMap = new HashMap<>();
private final Map<String, BeanDesc> beanDescMap = new HashMap<>();
@Override
public List<NotePromptExtractAttributesDto> findExtractAttributes(String categoryId) {
if (StrUtil.isEmpty(categoryId)){
return new ArrayList<>();
return new ArrayList<>(1);
}
String beanName = getEntityNameIfExist(categoryId);
if (StrUtil.isEmpty(beanName)){
return new ArrayList<>();
return new ArrayList<>(1);
}
BeanDesc beanDesc = beanDescMap.get(beanName);
Assert.notNull(beanDesc, "字典表evidence_property_bean中不存在"+beanName+"对应的属性");
if (beanDesc == null){
return new ArrayList<>(1);
}
return beanDesc.getProps().stream()
.filter(prop -> null != prop.getField().getAnnotation(Schema.class)).map(prop -> {
NotePromptExtractAttributesDto attributesDto = new NotePromptExtractAttributesDto();
@ -81,6 +87,8 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
log.warn("保存证据属性时属性为空不保存任何数据证据id:{}", evidenceId);
return;
}
extendPerson(entityJson, evidenceId);
iService.save(JSONUtil.toBean(entityJson, iService.getEntityClass()));
}
@ -101,9 +109,12 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
JSONObject entityJson = mapToEntityJson(entityName, attributes);
if (entityJson.isEmpty()){
log.warn("保存证据属性时属性为空不保存任何数据证据id:{}", evidenceId);
return;
}
extendPerson(entityJson, evidenceId);
iService.update(entityJson, new QueryWrapper<>().eq("evidence_id", evidenceId));
}
@ -162,6 +173,31 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
private void extendPerson(JSONObject entityJson, String evidenceId){
List<String> partKey = entityJson.keySet().stream().filter(k -> k.startsWith("part")).toList();
if (partKey.isEmpty()){
return;
}
List<CasePerson> casePersonList = casePersonService.listByEvidenceId(evidenceId);
if (CollUtil.isEmpty(casePersonList)){
return;
}
for (String key : partKey) {
String partName = entityJson.getStr(key);
if (StrUtil.isEmpty(partName)){
continue;
}
for (CasePerson casePerson : casePersonList) {
if (StrUtil.equals(casePerson.getName(),partName)){
entityJson.set(key+"Id", casePerson.getId());
break;
}
}
}
}
@PostConstruct
public void init(){

@ -905,6 +905,8 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
List<CaseEvidence> caseEvidenceList = this.lambdaQuery().eq(CaseEvidence::getCaseId, caseId).list();
this.redoExtractAttributes(caseId, caseEvidenceList);
EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO(evidenceDirectoryDTOS);
// 强行翻译
@ -928,6 +930,32 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
return evidenceDirectoryDTOS;
}
public void redoExtractAttributes(String caseId, List<CaseEvidence> caseEvidences) {
EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO(evidenceDirectoryService.listDirectoryTree(caseId));
Map<String, List<String>> categoryMapEvidence = new HashMap<>();
for (CaseEvidence caseEvidence : caseEvidences) {
EvidenceDirectoryDTO directory = rootDirectory.findDirectory(caseEvidence.getDirectoryId());
if (null != directory && StrUtil.isNotEmpty(directory.getCategoryId())){
List<String> evidenceIds = categoryMapEvidence.getOrDefault(directory.getCategoryId(), new ArrayList<>());
evidenceIds.add(caseEvidence.getId());
categoryMapEvidence.put(directory.getCategoryId(), evidenceIds);
}
}
Map<String, List<NotePromptExtractAttributesDto>> map = new HashMap<>();
for (Map.Entry<String, List<String>> entry : categoryMapEvidence.entrySet()) {
map.putAll(caseEvidencePropertyService.listEvidenceProperty(entry.getKey(), entry.getValue()));
}
for (CaseEvidence caseEvidence : caseEvidences) {
List<NotePromptExtractAttributesDto> attributesDtos = map.get(caseEvidence.getId());
// 兼容老数据
if (CollUtil.isNotEmpty(attributesDtos)){
caseEvidence.setProperty(attributesDtos);
}
}
}
/**
*
* @param rootDirectory

@ -10,6 +10,9 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
@ -46,4 +49,13 @@ public class CasePersonServiceImpl extends ServiceImpl<CasePersonMapper, CasePer
return save;
}
@Override
public List<CasePerson> listByEvidenceId(String evidenceId) {
if (StrUtil.isEmpty(evidenceId)){
return new ArrayList<>(1);
}
return super.getBaseMapper().listByEvidenceId(evidenceId);
}
}

@ -94,6 +94,8 @@ public class ModelServiceImpl implements ModelService {
private final EvidenceCategoryService evidenceCategoryService;
private final CaseEvidencePropertyService caseEvidencePropertyService;
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public R<?> analyseCase(AnalyseCaseDTO analyseCaseDTO) {
@ -207,12 +209,20 @@ public class ModelServiceImpl implements ModelService {
log.error("未找到提示词信息:【{}】", TYPE_STRUCTURAL_REASONING);
return R.fail("未找到提示词信息");
}
// 查询提示词对应的属性
for (NotePrompt notePrompt : notePrompts) {
notePrompt.setExtractAttributes(caseEvidencePropertyService.findExtractAttributes(notePrompt.getEvidenceCategoryId()));
}
List<EvidenceDirectory> evidenceDirectories = evidenceDirectoryService.list(new LambdaQueryWrapper<EvidenceDirectory>().eq(EvidenceDirectory::getCaseId, caseId));
if (evidenceDirectories.isEmpty()) {
log.error("未找到证据目录信息:【{}】", caseId);
return R.fail("未找到证据目录信息");
}
List<CaseEvidence> caseEvidences = caseEvidenceService.list(new LambdaQueryWrapper<CaseEvidence>().eq(CaseEvidence::getCaseId, caseId));
caseEvidenceService.redoExtractAttributes(caseId, caseEvidences);
List<ModelIndexAtomicRelation> modelIndexAtomicRelations = modelIndexAtomicRelationService.list();
if (modelIndexAtomicRelations.isEmpty()) {
log.error("未找到指标原子关系信息");
@ -317,6 +327,8 @@ public class ModelServiceImpl implements ModelService {
return R.ok();
}
private void removeAtomicResultWithNoReference(String modelIndexId, List<ModelIndexAtomicRelation> modelIndexAtomicRelations,
List<ModelAtomicResult> modelAtomicResultList) {
List<String> atomicIds = modelIndexAtomicRelations.stream()

@ -15,6 +15,7 @@ import com.supervision.minio.service.MinioService;
import com.supervision.police.domain.*;
import com.supervision.police.dto.LLMExtractDto;
import com.supervision.police.dto.NotePromptDTO;
import com.supervision.police.dto.NotePromptExtractAttributesDto;
import com.supervision.police.mapper.NotePromptMapper;
import com.supervision.police.service.*;
import com.supervision.thread.TripleExtractTask;
@ -63,6 +64,8 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
@Autowired
private EvidenceCategoryService evidenceCategoryService;
private final CaseEvidencePropertyService caseEvidencePropertyService;
@Override
public List<NotePrompt> listPromptBySplitId(String recordSplitId) {
@ -116,7 +119,14 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
@Override
public IPage<NotePromptDTO> listPrompt(NotePromptDTO notePromptDTO) {
return notePromptMapper.selectNotePromptWithMatchNum(new Page<>(notePromptDTO.getPage(), notePromptDTO.getSize()), notePromptDTO);
Page<NotePromptDTO> notePromptDTOPage = notePromptMapper.selectNotePromptWithMatchNum(new Page<>(notePromptDTO.getPage(), notePromptDTO.getSize()), notePromptDTO);
for (NotePromptDTO record : notePromptDTOPage.getRecords()) {
if (StrUtil.isEmpty(record.getEvidenceCategoryId())){
continue;
}
record.setExtractAttributes(caseEvidencePropertyService.findExtractAttributes(record.getEvidenceCategoryId()));
}
return notePromptDTOPage;
}
@Override
@ -186,6 +196,11 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
@Override
public NotePromptDTO getById(String id) {
NotePrompt notePrompt = super.getById(id);
if (null != notePrompt && StrUtil.isNotEmpty(notePrompt.getEvidenceCategoryId())){
notePrompt.setExtractAttributes(caseEvidencePropertyService.findExtractAttributes(notePrompt.getEvidenceCategoryId()));
}
NotePromptDTO notePromptDTO = new NotePromptDTO();
BeanUtils.copyProperties(notePrompt, notePromptDTO);

@ -0,0 +1,27 @@
<?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.supervision.police.mapper.AttributeGwzsMapper">
<resultMap id="BaseResultMap" type="com.supervision.police.domain.AttributeGwzs">
<result property="id" column="id" jdbcType="VARCHAR"/>
<result property="evidenceId" column="evidence_id" jdbcType="VARCHAR"/>
<result property="projectName" column="project_name" jdbcType="VARCHAR"/>
<result property="projectStatus" column="project_status" jdbcType="VARCHAR"/>
<result property="publishingUnit" column="publishing_unit" jdbcType="VARCHAR"/>
<result property="conclusion" column="conclusion" jdbcType="VARCHAR"/>
<result property="publicationTime" column="publication_time" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,evidence_id,project_name,
project_status,publishing_unit,conclusion,
publication_time,create_time,create_user_id,
update_time,update_user_id
</sql>
</mapper>

@ -0,0 +1,31 @@
<?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.supervision.police.mapper.AttributeXmhtMapper">
<resultMap id="BaseResultMap" type="com.supervision.police.domain.AttributeXmht">
<result property="id" column="id" jdbcType="VARCHAR"/>
<result property="evidenceId" column="evidence_id" jdbcType="VARCHAR"/>
<result property="projectName" column="project_name" jdbcType="VARCHAR"/>
<result property="partA" column="part_a" jdbcType="VARCHAR"/>
<result property="partB" column="part_b" jdbcType="VARCHAR"/>
<result property="scope" column="scope" jdbcType="VARCHAR"/>
<result property="projectStartTime" column="project_start_time" jdbcType="VARCHAR"/>
<result property="projectEndTime" column="project_end_time" jdbcType="VARCHAR"/>
<result property="signingTime" column="signing_time" jdbcType="VARCHAR"/>
<result property="projectStatus" column="project_status" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,evidence_id,project_name,
part_a,part_b,scope,
project_start_time,project_end_time,signing_time,
project_status,create_time,create_user_id,
update_time,update_user_id
</sql>
</mapper>

@ -2,4 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.police.mapper.CasePersonMapper">
<select id="listByEvidenceId" resultType="com.supervision.police.domain.CasePerson">
select cp.*
from case_evidence ce
join case_person cp on ce.case_id = cp.case_id
where ce.id = #{evidenceId}
</select>
</mapper>
Loading…
Cancel
Save