package cn.huge.module.knowledge.service;
|
|
import cn.huge.base.common.exception.ServiceException;
|
import cn.huge.base.common.utils.DateUtils;
|
import cn.huge.base.common.utils.IdUtils;
|
import cn.huge.module.client.api.impl.UtilsClientImpl;
|
import cn.huge.module.knowledge.dao.mapper.CpwsCaseTextMapper;
|
import cn.huge.module.knowledge.domain.dto.CpwsCaseDTO;
|
import cn.huge.module.knowledge.domain.dto.LawCpwsDTO;
|
import cn.huge.module.knowledge.domain.dto.LawIndex;
|
import cn.huge.module.knowledge.domain.po.CpwsCaseText;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageRequest;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.PostConstruct;
|
import java.util.*;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* @title: 裁判文书网案件文本表业务逻辑处理
|
* @Description 裁判文书网案件文本表业务逻辑处理
|
* @company hugeinfo
|
* @author huangh
|
* @Time 2024-12-10 17:28:00
|
* @version 1.0.0
|
*/
|
@Slf4j
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class CpwsCaseTextService extends ServiceImpl<CpwsCaseTextMapper, CpwsCaseText> {
|
|
@Autowired
|
private CpwsCaseTextMapper mapper;
|
|
@Autowired
|
private UtilsClientImpl utilsClient;
|
|
@Autowired
|
private LawOriginalInfoService lawInfoService;
|
|
/**
|
* 更新对象
|
* @param entity 对象
|
*/
|
public void updateCpwsCaseText(CpwsCaseText entity) {
|
try {
|
mapper.updateCpwsCaseText(entity);
|
} catch (Exception e) {
|
log.error("[CpwsCaseTextService.updateCpwsCaseText]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CpwsCaseTextService.updateCpwsCaseText", e);
|
}
|
}
|
|
/**
|
* 条件更新对象
|
* @param entity 对象
|
* @param terms 条件
|
*/
|
public void updateCpwsCaseTextTerms(CpwsCaseText entity, Map<String, Object> terms) {
|
try {
|
mapper.updateCpwsCaseTextTerms(entity, terms);
|
} catch (Exception e) {
|
log.error("[CpwsCaseTextService.updateCpwsCaseTextTerms]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CpwsCaseTextService.updateCpwsCaseTextTerms", e);
|
}
|
}
|
|
/**
|
* 根据编号物理删除
|
* @param id 查询条件集合
|
*/
|
public void deleteCpwsCaseText(String id) {
|
try {
|
mapper.deleteCpwsCaseText(id);
|
} catch (Exception e) {
|
log.error("[CpwsCaseTextService.deleteCpwsCaseText]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CpwsCaseTextService.deleteCpwsCaseText", e);
|
}
|
}
|
|
/**
|
* 按条件查询
|
* @param terms 条件
|
* @return List
|
*/
|
public List<CpwsCaseText> listTerms(Map<String, Object> terms) {
|
return mapper.listTerms(terms);
|
}
|
|
/**
|
* 按条件统计
|
* @param terms 条件
|
* @return long
|
*/
|
public long countTerms(Map<String, Object> terms) {
|
return mapper.countTerms(terms);
|
}
|
|
/**
|
* 按条件分页查询
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<CpwsCaseText> pageQuery(PageRequest page, Map<String, Object> terms) {
|
long total = mapper.countTerms(terms);
|
List<CpwsCaseText> content = mapper.pageTerms(page, terms);
|
return new PageImpl<>(content, page, total);
|
}
|
|
/**
|
* 新增或更新对象
|
* @param cpwsCaseText 实体对象
|
*/
|
public void saveCpwsCaseText(CpwsCaseText cpwsCaseText) {
|
try {
|
Date nowDate = DateUtils.getNowDate();
|
// 判断是否新增
|
if (IdUtils.checkNewId(cpwsCaseText.getCpwsCaseTextId())) {
|
cpwsCaseText.setCpwsCaseTextId(utilsClient.getNewTimeId());
|
cpwsCaseText.setCreateTime(nowDate);
|
}
|
cpwsCaseText.setUpdateTime(nowDate);
|
this.saveOrUpdate(cpwsCaseText);
|
} catch (Exception e) {
|
log.error("[CpwsCaseTextService.saveCpwsCaseText]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CpwsCaseTextService.saveCpwsCaseText", e);
|
}
|
}
|
|
public List<LawIndex> extractLaws(String legalBasis) {
|
// 先找出所有法律名称的正则表达式
|
String lawNameRegex = "《([^》]+)》";
|
Pattern lawNamePattern = Pattern.compile(lawNameRegex);
|
Matcher lawNameMatcher = lawNamePattern.matcher(legalBasis);
|
|
List<LawIndex> results = new ArrayList<>();
|
Map<String, LawIndex> lawMap = new HashMap<>();
|
// 用于跟踪已处理的法律名称和条款组合
|
Set<String> processedCombinations = new HashSet<>();
|
|
while (lawNameMatcher.find()) {
|
String lawName = lawNameMatcher.group(1).trim();
|
|
// 去掉法律名称中的括号及其内容
|
lawName = lawName.replaceAll("\\([^)]*\\)", "").replaceAll("([^)]*)", "").trim();
|
|
// 查询法律信息
|
Map<String, Object> terms = new HashMap<>();
|
terms.put("title", lawName);
|
LawCpwsDTO lawCpwsDTO = lawInfoService.getLawByTitle(terms);
|
|
// 只有找到对应的法律信息才继续处理
|
if (lawCpwsDTO != null) {
|
// 查找这个法律名称后面的条款内容
|
String indexRegex = "《" + Pattern.quote(lawName) + "》:?([^,。;:,\\s》]+)";
|
Pattern indexPattern = Pattern.compile(indexRegex);
|
Matcher indexMatcher = indexPattern.matcher(legalBasis);
|
|
while (indexMatcher.find()) {
|
String index = indexMatcher.group(1).trim();
|
// 去掉可能的冒号
|
if (index.startsWith(":")) {
|
index = index.substring(1).trim();
|
}
|
|
// 创建组合键以检查是否已处理过这个法律名称和条款组合
|
String combinationKey = lawName + "|" + index;
|
if (!processedCombinations.contains(combinationKey)) {
|
processedCombinations.add(combinationKey);
|
|
// 检查是否已存在这个法律的 LawIndex
|
LawIndex existingLawIndex = lawMap.get(lawName);
|
if (existingLawIndex != null) {
|
// 如果已存在,只添加新的条款
|
existingLawIndex.addIndex(index);
|
} else {
|
// 如果不存在,创建新的 LawIndex
|
LawIndex newLawIndex = new LawIndex(lawName, "");
|
newLawIndex.setLawOriginalInfoId(lawCpwsDTO.getLawOriginalInfoId());
|
newLawIndex.addIndex(index);
|
lawMap.put(lawName, newLawIndex);
|
results.add(newLawIndex);
|
}
|
}
|
}
|
}
|
}
|
|
return results;
|
}
|
}
|