package com.ruoyi.system.service.impl; import com.ruoyi.common.utils.HospitalTokenizerUtil; import com.ruoyi.system.domain.TbHospData; import com.ruoyi.system.mapper.TbHospDataMapper; import com.ruoyi.system.service.ITbHospDataService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * 医院数据Service业务层处理 * * @author ruoyi */ @Service public class TbHospDataServiceImpl implements ITbHospDataService { private static final Logger logger = LoggerFactory.getLogger(TbHospDataServiceImpl.class); @Autowired private TbHospDataMapper tbHospDataMapper; /** * 查询医院数据列表 * * @param tbHospData 医院数据 * @return 医院数据 */ @Override public List selectTbHospDataList(TbHospData tbHospData) { return tbHospDataMapper.selectTbHospDataList(tbHospData); } /** * 根据医院ID查询医院数据 * * @param hospId 医院ID * @return 医院数据 */ @Override public TbHospData selectTbHospDataById(Long hospId) { return tbHospDataMapper.selectTbHospDataById(hospId); } /** * 根据旧系统医院ID查询医院数据 * * @param legacyHospId 旧系统医院ID * @return 医院数据 */ @Override public TbHospData selectTbHospDataByLegacyId(Integer legacyHospId) { return tbHospDataMapper.selectTbHospDataByLegacyId(legacyHospId); } /** * 新增医院数据 * * @param tbHospData 医院数据 * @return 结果 */ @Override public int insertTbHospData(TbHospData tbHospData) { return tbHospDataMapper.insertTbHospData(tbHospData); } /** * 修改医院数据 * * @param tbHospData 医院数据 * @return 结果 */ @Override public int updateTbHospData(TbHospData tbHospData) { return tbHospDataMapper.updateTbHospData(tbHospData); } /** * 批量删除医院数据 * * @param hospIds 需要删除的医院数据ID * @return 结果 */ @Override public int deleteTbHospDataByIds(Long[] hospIds) { return tbHospDataMapper.deleteTbHospDataByIds(hospIds); } /** * 删除医院数据信息 * * @param hospId 医院数据ID * @return 结果 */ @Override public int deleteTbHospDataById(Long hospId) { return tbHospDataMapper.deleteTbHospDataById(hospId); } /** * 批量生成并更新所有医院的分词 * 供医院同步时调用 * * @return 更新的医院数量 */ @Override public int generateAllHospitalKeywords() { logger.info("开始批量生成医院分词..."); // 查询所有正常状态的医院 TbHospData query = new TbHospData(); query.setStatus("0"); List hospitalList = tbHospDataMapper.selectTbHospDataList(query); logger.info("查询到 {} 个医院需要生成分词", hospitalList.size()); int updateCount = 0; for (TbHospData hospital : hospitalList) { try { // 生成分词 String keywords = generateKeywordsForHospital(hospital); hospital.setHospKeywords(keywords); // 更新数据库 int result = tbHospDataMapper.updateTbHospData(hospital); if (result > 0) { updateCount++; } } catch (Exception e) { logger.error("生成医院分词失败: hospId={}, hospName={}", hospital.getHospId(), hospital.getHospName(), e); } } logger.info("医院分词生成完成,更新了 {} 个医院", updateCount); return updateCount; } /** * 为单个医院生成分词 * * @param tbHospData 医院数据 * @return 生成的分词 */ @Override public String generateKeywordsForHospital(TbHospData tbHospData) { return HospitalTokenizerUtil.tokenize( tbHospData.getHospName(), tbHospData.getHospShort(), tbHospData.getHopsProvince(), tbHospData.getHopsCity(), tbHospData.getHopsArea(), tbHospData.getHospAddress() ); } }