1. 添加多模型接入功能

master
xueqingkun 2 months ago
parent 91941cc015
commit dfe3782d67

@ -3,6 +3,7 @@ package com.supervision.police.controller;
import com.supervision.common.domain.R;
import com.supervision.police.domain.ModelAtomicIndex;
import com.supervision.police.domain.ModelIndex;
import com.supervision.police.dto.AtomicIndexUsedDTO;
import com.supervision.police.dto.CaseAtomicIndexDTO;
import com.supervision.police.dto.CaseAtomicResultWrapper;
import com.supervision.police.vo.GraphDebugReqVO;
@ -106,6 +107,14 @@ public class ModelIndexController {
}
@Operation(summary = "查询原子指标被使用情况")
@GetMapping("/atomic/used")
public R<List<AtomicIndexUsedDTO>> atomicUsed(@RequestParam String atomicIndexId) {
List<AtomicIndexUsedDTO> atomicIndexUsedDTOS = modelIndexService.atomicUsed(atomicIndexId);
return R.ok(atomicIndexUsedDTOS);
}
/**
*
* @return

@ -0,0 +1,57 @@
package com.supervision.police.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.common.domain.R;
import com.supervision.police.domain.ScoringModelInfo;
import com.supervision.police.service.ScoringModelInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@Tag(name = "赋分模型信息")
@RestController
@RequestMapping("/scoringModel")
@RequiredArgsConstructor
public class ScoringModelInfoController {
private final ScoringModelInfoService scoringModelInfoService;
@Operation(summary = "保存赋分模型")
@PostMapping("/save")
public R<String> saveScoringModel(@RequestBody ScoringModelInfo modelInfo) {
String roleId = scoringModelInfoService.saveScoringModel(modelInfo);
return R.ok(roleId);
}
@Operation(summary = "删除赋分模型")
@PostMapping("/delete")
public R<?> deleteScoringModel(@RequestBody ScoringModelInfo modelInfo) {
scoringModelInfoService.deleteScoringModel(modelInfo.getId());
return R.ok();
}
@Operation(summary = "修改赋分模型")
@PostMapping("/update")
public R<?> updateScoringModel(@RequestBody ScoringModelInfo modelInfo) {
scoringModelInfoService.updateScoringModel(modelInfo);
return R.ok();
}
@Operation(summary = "复制赋分模型")
@PostMapping("/copy")
public R<String> copyScoringModel(@RequestBody ScoringModelInfo modelInfo) {
String modelId = scoringModelInfoService.copyScoringModel(modelInfo.getId());
return R.ok(modelId);
}
@Operation(summary = "查看赋分模型列表")
@GetMapping("/pageList")
public R<IPage<ScoringModelInfo>> pageList(@RequestParam(required = false) @Parameter(name = "modelName",description = "模型名称") String modelName,
@RequestParam(defaultValue = "1") @Parameter(name = "pageNum",description = "页码") Integer pageNum,
@RequestParam(defaultValue = "10") @Parameter(name = "pageSize",description = "每页数量") Integer pageSize) {
IPage<ScoringModelInfo> page = scoringModelInfoService.pageList(modelName,pageNum, pageSize);
return R.ok(page);
}
}

@ -35,8 +35,9 @@ public class ModelAtomicIndex implements Serializable {
private String remark;
/**
*
* case_type
*/
@Deprecated(since = "dev_2.3 time:2024-07-05")
private String caseType;

@ -0,0 +1,68 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
/**
*
* @TableName scoring_model_info
*/
@Data
@TableName(value ="scoring_model_info")
public class ScoringModelInfo implements Serializable {
/**
*
*/
@TableId
private String id;
/**
*
*/
private String modelName;
/**
*
*/
private String modelDesc;
/**
*
*/
private String scoringRules;
/**
* id
*/
private String createUserId;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
*
*/
private String updateUserId;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@ -113,7 +113,6 @@ public class TripleInfo implements Serializable {
public TripleInfo() {
}
// todo
public TripleInfo(String startNode, String endNode, String relation,String caseId, String recordId, String recordSplitId, LocalDateTime createTime, String startNodeType, String endNodeType) {
this.startNode = startNode;
this.endNode = endNode;

@ -0,0 +1,22 @@
package com.supervision.police.dto;
import lombok.Data;
/**
* 使DTO
*/
@Data
public class AtomicIndexUsedDTO {
private String atomicIndexId;
private String atomicIndexName;
private String indexId;
private String indexName;
private String modelName;
private String modelId;
}

@ -12,6 +12,9 @@ public class IndexResultQuery {
@Schema(description = "指标类型")
private String indexType;
private String caseType;
@Schema(description = "指标名称")
private String indexName;

@ -457,9 +457,7 @@ public class CaseScoreDetailBuilder {
new LambdaQueryWrapper<ModelIndexResult>().eq(ModelIndexResult::getCaseId, caseId));
// 3.3 获取原子指标信息
List<ModelAtomicIndex> modelAtomicIndices = modelAtomicIndexMapper.selectList(
new LambdaQueryWrapper<ModelAtomicIndex>().eq(ModelAtomicIndex::getCaseType, modelCase.getCaseType())
.eq(ModelAtomicIndex::getDataStatus, "1"));
List<ModelAtomicIndex> modelAtomicIndices = modelAtomicIndexMapper.listCaseAtomicIndex(null, modelCase.getCaseType(), "1");
// 3.4 获取原子指标结果
List<ModelAtomicResult> modelAtomicResults = modelAtomicResultMapper.selectList(

@ -3,6 +3,7 @@ package com.supervision.police.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.police.domain.ModelAtomicIndex;
import com.supervision.police.dto.AtomicIndexUsedDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -22,5 +23,7 @@ public interface ModelAtomicIndexMapper extends BaseMapper<ModelAtomicIndex> {
List<ModelAtomicIndex> listCaseAtomicIndex(@Param("indexIdList") List<String> indexIdList,
@Param("caseType") String caseType,
@Param("indexSource") String indexSource);
List<AtomicIndexUsedDTO> atomicUsed(@Param("atomicIndexId") String atomicIndexId);
}

@ -0,0 +1,18 @@
package com.supervision.police.mapper;
import com.supervision.police.domain.ScoringModelInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description scoring_model_info()Mapper
* @createDate 2025-02-14 16:27:25
* @Entity com.supervision.police.domain.ScoringModelInfo
*/
public interface ScoringModelInfoMapper extends BaseMapper<ScoringModelInfo> {
}

@ -3,6 +3,7 @@ package com.supervision.police.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.ModelAtomicIndex;
import com.supervision.police.dto.AtomicIndexUsedDTO;
import com.supervision.police.mapper.ModelAtomicIndexMapper;
import java.util.List;
@ -21,12 +22,12 @@ public interface ModelAtomicIndexService extends IService<ModelAtomicIndex> {
/**
* id
* @param indexIdList id
* @param caseId id
* @param atomicIndexIds id
* @param caseType
* @param indexSource
* @return
*/
List<ModelAtomicIndex> listCaseAtomicIndex(List<String> indexIdList, String caseId, String indexSource);
List<ModelAtomicIndex> listCaseAtomicIndex(List<String> atomicIndexIds, String caseType, String indexSource);
@ -36,4 +37,7 @@ public interface ModelAtomicIndexService extends IService<ModelAtomicIndex> {
* @param atomicIndexId id
*/
void whenDeleteAtomicIndex(String caseType,String atomicIndexId);
List<AtomicIndexUsedDTO> atomicUsed(String atomicIndexId);
}

@ -61,5 +61,7 @@ public interface ModelCaseService extends IService<ModelCase> {
List<String> listCaseFileIds(String caseId);
boolean scoringModelIsUsed(String modelId);
}

@ -39,6 +39,6 @@ public interface ModelIndexAtomicRelationService extends IService<ModelIndexAtom
*/
void deleteByModelIndex(String modelIndexId);
void deleteByIndexIds(List<String> indexIds);
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.common.domain.R;
import com.supervision.police.domain.ModelAtomicIndex;
import com.supervision.police.domain.ModelIndex;
import com.supervision.police.dto.AtomicIndexUsedDTO;
import com.supervision.police.dto.CaseAtomicIndexDTO;
import com.supervision.police.dto.CaseAtomicResultWrapper;
import com.supervision.police.dto.ValueCalculateScopeDTO;
@ -28,6 +29,8 @@ public interface ModelIndexService extends IService<ModelIndex> {
R<?> del(String id);
void deleteModelIndexByCaseType(String caseType);
R<?> selectAllAtomic(ModelAtomicIndex modelAtomicIndex, Integer page, Integer size);
R<?> addOrUpdAtomic(ModelAtomicIndex modelAtomicIndex);
@ -59,5 +62,14 @@ public interface ModelIndexService extends IService<ModelIndex> {
Map<String,List<ValueCalculateScopeDTO>> listAtomicIndexAttributeScope(List<String> atomicIndexIds);
GraphDebugResVO graphDebug(GraphDebugReqVO graphDebugDTO);
/**
*
* @param oldModelId id
* @param newModelId id
*/
void copyIndex(String oldModelId, String newModelId);
List<AtomicIndexUsedDTO> atomicUsed(String atomicIndexId);
}

@ -0,0 +1,28 @@
package com.supervision.police.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.police.domain.ScoringModelInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.stream.LongStream;
/**
* @author Administrator
* @description scoring_model_info()Service
* @createDate 2025-02-14 16:27:25
*/
public interface ScoringModelInfoService extends IService<ScoringModelInfo> {
String saveScoringModel(ScoringModelInfo modelInfo);
void deleteScoringModel(String modelId);
void updateScoringModel(ScoringModelInfo modelInfo);
String copyScoringModel(String modelId);
IPage<ScoringModelInfo> pageList(String modelName, Integer pageNum, Integer pageSize);
String getScoringModelNameById(String modelId, List<ScoringModelInfo> modelInfoList);
}

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.constant.DataStatus;
import com.supervision.police.domain.ModelAtomicIndex;
import com.supervision.police.domain.ModelIndex;
import com.supervision.police.dto.AtomicIndexUsedDTO;
import com.supervision.police.dto.JudgeLogic;
import com.supervision.police.dto.ModelIndexDTO;
import com.supervision.police.mapper.ModelAtomicIndexMapper;
@ -81,4 +82,9 @@ public class ModelAtomicIndexServiceImpl extends ServiceImpl<ModelAtomicIndexMap
modelIndexService.lambdaUpdate().eq(ModelIndex::getId, modelIndexDTO.getId()).set(ModelIndex::getJudgeLogic, modelIndexDTO.getJudgeLogic()).update();
});
}
@Override
public List<AtomicIndexUsedDTO> atomicUsed(String atomicIndexId) {
return super.getBaseMapper().atomicUsed(atomicIndexId);
}
}

@ -373,6 +373,11 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase
Assert.notEmpty(query.getCaseId(), "案件id不能为空");
Assert.notEmpty(query.getIndexType(), "指标类型不能为空");
ModelCase modelCase = super.getById(query.getCaseId());
Assert.notNull(modelCase, "案件不存在");
Assert.notEmpty(modelCase.getCaseType(), "案件类型不能为空");
query.setCaseType(modelCase.getCaseType());
IPage<IndexDetail> iPage = modelCaseMapper.pageListIndexResult(query, Page.of(pageNum, pageSize));
List<IndexDetail> records = iPage.getRecords();
@ -462,6 +467,12 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase
return recordFileIds.stream().distinct().toList();
}
@Override
public boolean scoringModelIsUsed(String modelId) {
return super.lambdaQuery().eq(ModelCase::getCaseType, modelId).exists();
}
/**
*

@ -86,6 +86,15 @@ public class ModelIndexAtomicRelationServiceImpl extends ServiceImpl<ModelIndexA
}
super.remove(new LambdaQueryWrapper<ModelIndexAtomicRelation>().eq(ModelIndexAtomicRelation::getModelIndexId, modelIndexId));
}
@Override
public void deleteByIndexIds(List<String> indexIds) {
if (indexIds.isEmpty()){
log.warn("deleteByIndexIds: indexIds 为空,不删除关联关系....indexIds:{}", JSONUtil.toJsonStr(indexIds));
return;
}
super.lambdaUpdate().in(ModelIndexAtomicRelation::getModelIndexId, indexIds).remove();
}
}

@ -46,11 +46,10 @@ import org.neo4j.driver.internal.InternalNode;
import org.neo4j.driver.internal.InternalRelationship;
import org.neo4j.driver.types.Node;
import org.neo4j.driver.types.Relationship;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
@ -92,6 +91,9 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
private final Neo4jService neo4jService;
@Autowired
private ScoringModelInfoService scoringModelInfoService;
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public R<?> selectAll(ModelIndexReqVO modelIndex, Integer page, Integer size) {
@ -123,11 +125,12 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
// 分页查询
List<ModelIndex> records = iPage.getRecords();
List<ComDictionary> dicts = comDictionaryService.list();
List<ScoringModelInfo> scoringModelInfoList = scoringModelInfoService.list();
// 查询结果拼装
for (ModelIndex index : records) {
index.setIndexTypeName(comDictionaryService.getName(dicts, "index_type", index.getIndexType()));
index.setCaseTypeName(comDictionaryService.getName(dicts, "case_type", index.getCaseType()));
index.setCaseTypeName(scoringModelInfoService.getScoringModelNameById(index.getCaseType(), scoringModelInfoList));
//原子指标
String judgeLogic = index.getJudgeLogic();
Set<String> ids = new HashSet<>();
@ -193,6 +196,20 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
}
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public void deleteModelIndexByCaseType(String caseType) {
Assert.notEmpty(caseType, "模型类型不能为空");
List<ModelIndex> modelIndexList = super.lambdaQuery().eq(ModelIndex::getCaseType, caseType).list();
if (CollUtil.isEmpty(modelIndexList)) {
log.info("deleteModelIndexByCaseType:未查询到模型类型:{}的指标", caseType);
return;
}
super.lambdaUpdate().eq(ModelIndex::getCaseType, caseType).remove();
modelIndexAtomicRelationService.deleteByIndexIds(modelIndexList.stream().map(ModelIndex::getId).toList());
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public R<?> selectAllAtomic(ModelAtomicIndex modelAtomicIndex, Integer page, Integer size) {
@ -202,8 +219,9 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
List<ComDictionary> dicts = comDictionaryService.list();
String caseType = StrUtil.isNotEmpty(modelAtomicIndex.getCaseType()) ? modelAtomicIndex.getCaseType() : NotePromptConstants.CASE_TYPE_ENGINEERING_CONTRACT_FRAUD;
EvidenceCategoryDTO rootCategory = new EvidenceCategoryDTO(evidenceCategoryService.listCategoryTree(caseType));
List<ScoringModelInfo> scoringModelInfoList = scoringModelInfoService.list();
for (ModelAtomicIndex index : records) {
index.setCaseTypeName(comDictionaryService.getName(dicts, "case_type", index.getCaseType()));
index.setCaseTypeName(scoringModelInfoService.getScoringModelNameById(index.getCaseType(), scoringModelInfoList));
index.setIndexSourceName(comDictionaryService.getName(dicts, "index_source", index.getIndexSource()));
index.setRecordTypeName(comDictionaryService.getName(dicts, "record_type", index.getRecordType()));
index.setCategoryIdPath(rootCategory.listCategoryIdPath(index.getCategoryId()));
@ -480,6 +498,56 @@ public class ModelIndexServiceImpl extends ServiceImpl<ModelIndexMapper, ModelIn
return graphDebugResVO;
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public void copyIndex(String oldModelId, String newModelId) {
Assert.notEmpty(oldModelId, "原模型id不能为空");
Assert.notEmpty(newModelId, "新模型id不能为空");
List<ModelIndex> modelIndexList = super.lambdaQuery().eq(ModelIndex::getCaseType, oldModelId).eq(ModelIndex::getDataStatus, "1").list();
if (CollUtil.isEmpty(modelIndexList)){
log.info("copyIndex:未查询到原模型id:{}的指标", oldModelId);
return;
}
for (ModelIndex modelIndex : modelIndexList) {
ModelIndex newIndex = modelIndexCopy(modelIndex,newModelId);
modelIndexMapper.insert(newIndex);
modelIndexAtomicRelationService.saveByModelIndex(newIndex);
}
}
@Override
public List<AtomicIndexUsedDTO> atomicUsed(String atomicIndexId) {
Assert.notEmpty(atomicIndexId, "原子指标id不能为空");
List<AtomicIndexUsedDTO> atomicUsed = modelAtomicIndexService.atomicUsed(atomicIndexId);
// 根据指标id和案件类型id进行去重
return atomicUsed.stream().filter(dto -> StrUtil.isNotEmpty(dto.getIndexId()))
.collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(o -> o.getIndexId() + "-" + o.getModelId()))), ArrayList::new));
}
/**
*
* @param modelIndex
* @param caseType
* @return
*/
private ModelIndex modelIndexCopy(ModelIndex modelIndex,String caseType) {
ModelIndex newIndex = new ModelIndex();
newIndex.setName(modelIndex.getName());
newIndex.setShortName(modelIndex.getShortName());
newIndex.setRemark(modelIndex.getRemark());
newIndex.setIndexType(modelIndex.getIndexType());
newIndex.setIndexScore(modelIndex.getIndexScore());
newIndex.setAtomicIndexNum(modelIndex.getAtomicIndexNum());
newIndex.setCaseType(caseType);
newIndex.setJudgeLogic(modelIndex.getJudgeLogic());
newIndex.setIndexRule(modelIndex.getIndexRule());
newIndex.setDataStatus(modelIndex.getDataStatus());
return newIndex;
}
private List<WebRelDTO> generateRelations(List<Record> records) {

@ -86,7 +86,7 @@ public class ModelServiceImpl implements ModelService {
private final ModelIndexAtomicRelationService modelIndexAtomicRelationService;
private final NoteRecordService noteRecordService;
private final ModelAtomicIndexService modelAtomicIndexService;
@Autowired
private NotePromptService notePromptService;
@ -127,7 +127,7 @@ public class ModelServiceImpl implements ModelService {
log.error("未找到指标信息:【{}】", modelCase.getCaseType());
return R.fail("未找到指标信息");
}
List<ModelAtomicIndex> atomicIndices = modelAtomicIndexMapper.selectByCaseType(modelCase.getCaseType());
List<ModelAtomicIndex> atomicIndices = modelAtomicIndexService.listCaseAtomicIndex(null, modelCase.getCaseType(), null);
if (atomicIndices.isEmpty()) {
log.error("未找到原子指标信息:【{}】", modelCase.getCaseType());
return R.fail("未找到原子指标信息");

@ -0,0 +1,133 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.ScoringModelInfo;
import com.supervision.police.service.ModelCaseService;
import com.supervision.police.service.ModelIndexService;
import com.supervision.police.service.ScoringModelInfoService;
import com.supervision.police.mapper.ScoringModelInfoMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author Administrator
* @description scoring_model_info()Service
* @createDate 2025-02-14 16:27:25
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ScoringModelInfoServiceImpl extends ServiceImpl<ScoringModelInfoMapper, ScoringModelInfo>
implements ScoringModelInfoService{
private final ModelCaseService modelCaseService;
private final ModelIndexService modelIndexService;
@Override
public String saveScoringModel(ScoringModelInfo modelInfo) {
Assert.notEmpty(modelInfo.getModelName(), "模型名不能为空");
boolean exists = super.lambdaQuery().eq(ScoringModelInfo::getModelName, modelInfo.getModelName()).exists();
Assert.isFalse(exists, "模型名已存在");
super.save(modelInfo);
return modelInfo.getId();
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public void deleteScoringModel(String modelId) {
Assert.notEmpty(modelId, "模型id不能为空");
boolean used = modelCaseService.scoringModelIsUsed(modelId);
Assert.isFalse(used, "模型已被使用,无法删除");
super.removeById(modelId);
modelIndexService.deleteModelIndexByCaseType(modelId);
}
@Override
public void updateScoringModel(ScoringModelInfo modelInfo) {
Assert.notEmpty(modelInfo.getId(), "模型id不能为空");
ScoringModelInfo info = super.getById(modelInfo.getId());
Assert.notNull(info, "模型不存在");
Assert.notEmpty(modelInfo.getModelName(), "模型名不能为空");
if (!StrUtil.equals(info.getModelName(), modelInfo.getModelName())) {
boolean exists = super.lambdaQuery().eq(ScoringModelInfo::getModelName, modelInfo.getModelName()).exists();
Assert.isFalse(exists, "模型名已存在");
info.setModelName(modelInfo.getModelName());
}
info.setModelDesc(modelInfo.getModelDesc());
info.setScoringRules(modelInfo.getScoringRules());
super.updateById(modelInfo);
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public String copyScoringModel(String modelId) {
Assert.notEmpty(modelId, "模型id不能为空");
ScoringModelInfo modelInfo = super.getById(modelId);
Assert.notNull(modelInfo, "模型不存在!");
ScoringModelInfo scoringModelInfo = copyScoringModel(modelInfo);
modelIndexService.copyIndex(modelInfo.getId(), scoringModelInfo.getId());
return scoringModelInfo.getId();
}
/**
*
* @param modelInfo
* @return
*/
private ScoringModelInfo copyScoringModel(ScoringModelInfo modelInfo) {
Assert.notNull(modelInfo, "模型信息不能为空!");
String newModelName = generateModelName(modelInfo.getModelName());
ScoringModelInfo scoringModelInfo = new ScoringModelInfo();
scoringModelInfo.setModelName(newModelName);
scoringModelInfo.setModelDesc(modelInfo.getModelDesc());
scoringModelInfo.setScoringRules(modelInfo.getScoringRules());
super.save(scoringModelInfo);
return scoringModelInfo;
}
private String generateModelName(String baseName) {
Assert.notEmpty(baseName, "基础名称不能为空!");
List<ScoringModelInfo> likedInfo = super.lambdaQuery().likeRight(ScoringModelInfo::getModelName, baseName).list();
if (likedInfo.isEmpty()) {
return baseName;
}
int suffix = 1;
while (true) {
String newName = baseName + suffix;
boolean exists = likedInfo.stream().anyMatch(info -> StrUtil.equals(info.getModelName(), newName));
if (!exists) {
return newName;
}
suffix++;
}
}
@Override
public IPage<ScoringModelInfo> pageList(String modelName, Integer pageNum, Integer pageSize) {
return super.lambdaQuery().like(StrUtil.isNotEmpty(modelName), ScoringModelInfo::getModelName, modelName).page(new Page<>(pageNum, pageSize));
}
@Override
public String getScoringModelNameById(String modelId, List<ScoringModelInfo> modelInfoList) {
if (CollUtil.isEmpty(modelInfoList) || StrUtil.isEmpty(modelId)) {
return null;
}
return modelInfoList.stream().filter(modelInfo -> StrUtil.equals(modelInfo.getId(), modelId))
.findFirst().map(ScoringModelInfo::getModelName).orElse(null);
}
}

@ -36,21 +36,49 @@
select * from model_atomic_index where data_status = '1' and case_type = #{caseType}
</select>
<select id="listCaseAtomicIndex" resultType="com.supervision.police.domain.ModelAtomicIndex">
select *
from model_atomic_index
where data_status = '1'
select mai.id,
mai.name,
mai.remark,
mi.case_type,
mai.index_source,
mai.connect_status,
mai.judge_result,
mai.query_lang,
mai.prompt_id,
mai.properties,
mai.category_id,
mai.record_type,
mai.prompt,
mai.data_status
from model_atomic_index mai
left join model_index_atomic_relation miar on mai.id = miar.atomic_index_id
left join model_index mi on miar.model_index_id = mi.id
where mai.data_status = '1'
<if test="indexIdList != null and indexIdList.size() > 0">
and id in
and mai.id in
<foreach collection="indexIdList" item="indexId" open="(" separator="," close=")">
#{indexId}
</foreach>
</if>
<if test="caseType != null and caseType != ''">
and case_type = #{caseType}
and mi.case_type = #{caseType}
</if>
<if test="indexSource != null and indexSource != ''">
and index_source = #{indexSource}
and mai.index_source = #{indexSource}
</if>
</select>
<select id="atomicUsed" resultType="com.supervision.police.dto.AtomicIndexUsedDTO">
select mai.id as atomic_index_id,
mai.name as atomic_index_name,
mi.id as index_id,
mi.name as index_name,
smi.model_name,
smi.id as model_id
from model_atomic_index mai
left join model_index_atomic_relation miar on mai.id = miar.atomic_index_id
left join model_index mi on miar.model_index_id = mi.id
left join scoring_model_info smi on smi.id = mi.case_type
where mai.data_status = '1'
and mi.data_status = '1' and mai.id = #{atomicIndexId}
</select>
</mapper>

@ -112,6 +112,7 @@
left join model_index_result mir on (mi.id = mir.index_id and mir.case_id = #{query.caseId})
WHERE mi.data_status = '1'
and mi.index_type = #{query.indexType}
and mi.case_type = #{query.caseType}
<if test="query.indexName != null and query.indexName != ''">
and mi.name like concat('%', #{query.indexName}, '%')
</if>
@ -128,7 +129,7 @@
</choose>
and exists(select 1
from model_atomic_result mar
left join model_index_atomic_relation iar on mar.index_id = iar.model_index_id and mar.atomic_id = iar.atomic_index_id
left join model_index_atomic_relation iar on (mar.index_id = iar.model_index_id and mar.atomic_id = iar.atomic_index_id)
left join model_atomic_index mai on mar.atomic_id = mai.id
where mar.case_id = #{query.caseId}
<if test="query.atomicName != null and query.atomicName != ''">

@ -0,0 +1,23 @@
<?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.ScoringModelInfoMapper">
<resultMap id="BaseResultMap" type="com.supervision.police.domain.ScoringModelInfo">
<result property="id" column="id" jdbcType="VARCHAR"/>
<result property="modelName" column="model_name" jdbcType="VARCHAR"/>
<result property="modelDesc" column="model_desc" jdbcType="VARCHAR"/>
<result property="scoringRules" column="scoring_rules" jdbcType="VARCHAR"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,model_name,model_desc,
scoring_rules,create_user_id,create_time,
update_user_id,update_time
</sql>
</mapper>
Loading…
Cancel
Save