wlzboy
2026-03-19 c5ac97682e3b4ca748541ace97cb37a2295bd81e
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbHospDataServiceImpl.java
@@ -1,8 +1,11 @@
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;
@@ -16,6 +19,8 @@
@Service
public class TbHospDataServiceImpl implements ITbHospDataService
{
    private static final Logger logger = LoggerFactory.getLogger(TbHospDataServiceImpl.class);
    @Autowired
    private TbHospDataMapper tbHospDataMapper;
@@ -102,4 +107,63 @@
    {
        return tbHospDataMapper.deleteTbHospDataById(hospId);
    }
    /**
     * 批量生成并更新所有医院的分词
     * 供医院同步时调用
     *
     * @return 更新的医院数量
     */
    @Override
    public int generateAllHospitalKeywords()
    {
        logger.info("开始批量生成医院分词...");
        // 查询所有正常状态的医院
        TbHospData query = new TbHospData();
        query.setStatus("0");
        List<TbHospData> 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()
        );
    }
}