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 { @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 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 listTerms(Map terms) { return mapper.listTerms(terms); } /** * 按条件统计 * @param terms 条件 * @return long */ public long countTerms(Map terms) { return mapper.countTerms(terms); } /** * 按条件分页查询 * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageQuery(PageRequest page, Map terms) { long total = mapper.countTerms(terms); List 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 extractLaws(String legalBasis) { // 先找出所有法律名称的正则表达式 String lawNameRegex = "《([^》]+)》"; Pattern lawNamePattern = Pattern.compile(lawNameRegex); Matcher lawNameMatcher = lawNamePattern.matcher(legalBasis); List results = new ArrayList<>(); Map lawMap = new HashMap<>(); // 用于跟踪已处理的法律名称和条款组合 Set processedCombinations = new HashSet<>(); while (lawNameMatcher.find()) { String lawName = lawNameMatcher.group(1).trim(); // 去掉法律名称中的括号及其内容 lawName = lawName.replaceAll("\\([^)]*\\)", "").replaceAll("([^)]*)", "").trim(); // 查询法律信息 Map 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; } }