Browse Source

敏感词接口

mengkang 4 years ago
parent
commit
d5020dcab3

+ 15 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/BaseSensitiveDao.java

@ -0,0 +1,15 @@
package com.yihu.jw.hospital.prescription.dao;
import com.yihu.jw.entity.base.words.BaseSensitiveDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2020/7/6
 */
public interface BaseSensitiveDao extends PagingAndSortingRepository<BaseSensitiveDO, String>, JpaSpecificationExecutor<BaseSensitiveDO> {
    BaseSensitiveDO findBySensitiveWord(String sensitive);
}

+ 9 - 2
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -82,6 +82,7 @@ import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.jw.wechat.dao.WechatDao;
import com.yihu.jw.wechat.dao.WxPushLogDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.service.BaseSensitiveService;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import com.yihu.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
@ -244,6 +245,8 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    @Autowired
    private DictDeptDescDao dictDeptDescDao;
    @Autowired
    private BaseSensitiveService baseSensitiveService;
@ -3204,9 +3207,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                    "LEFT JOIN wlyy_consult_team c ON c.consult=b.relation_code AND c.doctor='" + doctor + "' " +
                    "WHERE a.relation_code=b.id AND b.doctor='" + doctor + "' order by b.create_time DESC ";
            List<Map<String, Object>> scoreList = jdbcTemplate.queryForList(sqlScoreList);
            if (scoreList != null && scoreList.size() > 0) {
//                Set<String> datelist = new HashSet<>();
               /* HashMap<String, List<Map<String, Object>>> waitinglist = new HashMap<>();
@ -3240,6 +3241,12 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                        if (!stringList.contains(id)){
                            stringList.add(id);
                        }
                        String content = (String)scorepatient.get("content");
                        if (StringUtils.isNotEmpty(content)){
                            String replace = baseSensitiveService.filterSensitiveWords(content);
                            scorepatient.put("content",replace);
                        }
                    }
                    for (String str:stringList){
                        com.alibaba.fastjson.JSONArray array = new com.alibaba.fastjson.JSONArray();

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/util/SensitiveWordInit.java

@ -1,4 +1,4 @@
package com.yihu.jw.base.util;
package com.yihu.jw.utils;
import java.io.*;
import java.util.HashMap;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/util/SensitivewordFilter.java

@ -1,4 +1,4 @@
package com.yihu.jw.base.util;
package com.yihu.jw.utils;
import java.util.HashSet;
import java.util.Iterator;

+ 56 - 0
business/base-service/src/main/java/com/yihu/jw/wechat/service/BaseSensitiveService.java

@ -0,0 +1,56 @@
package com.yihu.jw.wechat.service;
import com.yihu.jw.entity.base.words.BaseSensitiveDO;
import com.yihu.jw.file_upload.FileUploadService;
import com.yihu.jw.hospital.prescription.dao.BaseSensitiveDao;
import com.yihu.jw.utils.SensitivewordFilter;
import com.yihu.mysql.query.BaseJpaService;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2020/7/6
 */
@Service
public class BaseSensitiveService extends BaseJpaService<BaseSensitiveDO, BaseSensitiveDao> {
    @Autowired
    private BaseSensitiveDao baseSensitiveDao;
    @Autowired
    FileUploadService fileUploadService;
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(BaseSensitiveService.class);
    /**
     * 敏感词过滤
     * @param txt
     * @return
     */
    public String filterSensitiveWords(String txt){
        List<BaseSensitiveDO> list = (List<BaseSensitiveDO>) baseSensitiveDao.findAll();
        HashSet<String> set = new HashSet<>();
        for (BaseSensitiveDO one : list) {
            set.add(one.getSensitiveWord());
        }
        SensitivewordFilter filter = new SensitivewordFilter(set);
        Set<String> words = filter.getSensitiveWord(txt, 1);
        logger.info("语句中包含敏感词的个数为:" + words.size() + "。包含:" + words);
        logger.info("过滤前="+txt);
        String replaceTxt = filter.replaceSensitiveWord(txt, 1, "*");
        logger.info("过滤后="+replaceTxt);
        return replaceTxt;
    }
}

+ 0 - 10
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/word/BaseSensitiveEndpoint.java

@ -168,14 +168,4 @@ public class BaseSensitiveEndpoint extends EnvelopRestEndpoint {
        return failed("导入失败");
    }
    @GetMapping(value = BaseRequestMapping.BaseSensitive.filterSensitiveWords)
    @ApiOperation(value = "导出日志")
    public MixEnvelop filterSensitiveWords (
            @ApiParam(name = "txt", value = "txt")
            @RequestParam(value = "txt", required = false) String txt
    ) throws Exception {
        return baseSensitiveService.filterSensitiveWords(txt);
    }
}

+ 11 - 33
svr/svr-base/src/main/java/com/yihu/jw/base/service/word/BaseSensitiveService.java

@ -1,47 +1,25 @@
package com.yihu.jw.base.service.word;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.dao.word.BaseImportSensitiveDao;
import com.yihu.jw.base.dao.word.BaseSensitiveDao;
import com.yihu.jw.base.service.doctor.excelImport.BaseDoctorExcelDO;
import com.yihu.jw.base.service.word.excelImport.BaseSensitiveExcelDO;
import com.yihu.jw.base.useragent.UserAgent;
import com.yihu.jw.base.util.SensitiveWordInit;
import com.yihu.jw.base.util.SensitivewordFilter;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.sync.BaseSyncDataDO;
import com.yihu.jw.utils.SensitivewordFilter;
import com.yihu.jw.entity.base.words.BaseImportSensitiveDO;
import com.yihu.jw.entity.base.words.BaseSensitiveDO;
import com.yihu.jw.file_upload.FileUploadService;
import com.yihu.jw.restmodel.iot.common.UploadVO;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.rm.health.house.HealthyHouseMapping;
import com.yihu.jw.rm.iot.IotRequestMapping;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.mysql.query.BaseJpaService;
import jxl.Workbook;
import jxl.write.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Service;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;
import java.util.logging.Logger;
/**
 * @author HZY
@ -63,7 +41,7 @@ public class BaseSensitiveService extends BaseJpaService<BaseSensitiveDO, BaseSe
    FileUploadService fileUploadService;
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(BaseSensitiveService.class);
    /**
     * 创建敏感词汇
     * @param words
@ -150,7 +128,7 @@ public class BaseSensitiveService extends BaseJpaService<BaseSensitiveDO, BaseSe
            countSql.append(" AND (s.sensitive_word like'%").append(words).append("%'").append(" or ").append("s.explanation like'%").append(words).append("%')");
        }
        sql.append(" ORDER BY s.update_time desc LIMIT ").append((page-1)*pageSize).append(",").append(pageSize);
        Logger.getAnonymousLogger().info("sql="+sql.toString());
        logger.info("sql="+sql.toString());
        List<BaseSensitiveDO> list = jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(BaseSensitiveDO.class));
        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(countSql.toString());
        long count = (long)mapList.get(0).get("count");
@ -284,11 +262,11 @@ public class BaseSensitiveService extends BaseJpaService<BaseSensitiveDO, BaseSe
        try {
            String url = exportSensitiveWordsLog(os, operatorCode, fastdfs_file_url);
            rs.put("downloadLogUrl",url);
            Logger.getGlobal().info("downloadLogUrl="+url);
            logger.info("downloadLogUrl="+url);
        } catch (Exception e) {
            e.printStackTrace();
            rs.put("downloadLogUrl","导出日志失败");
            Logger.getGlobal().info("Logerror="+e.getMessage());
            logger.info("Logerror="+e.getMessage());
        }
        rs.put("success",total);
        return rs;
@ -300,7 +278,7 @@ public class BaseSensitiveService extends BaseJpaService<BaseSensitiveDO, BaseSe
     * @param txt
     * @return
     */
    public MixEnvelop filterSensitiveWords(String txt){
    public String filterSensitiveWords(String txt){
        List<BaseSensitiveDO> list = (List<BaseSensitiveDO>) baseSensitiveDao.findAll();
        HashSet<String> set = new HashSet<>();
        for (BaseSensitiveDO one : list) {
@ -308,11 +286,11 @@ public class BaseSensitiveService extends BaseJpaService<BaseSensitiveDO, BaseSe
        }
        SensitivewordFilter filter = new SensitivewordFilter(set);
        Set<String> words = filter.getSensitiveWord(txt, 1);
        Logger.getGlobal().info("语句中包含敏感词的个数为:" + words.size() + "。包含:" + words);
        Logger.getAnonymousLogger().info("过滤前="+txt);
        logger.info("语句中包含敏感词的个数为:" + words.size() + "。包含:" + words);
        logger.info("过滤前="+txt);
        String replaceTxt = filter.replaceSensitiveWord(txt, 1, "*");
        Logger.getGlobal().info("过滤后="+replaceTxt);
        return MixEnvelop.getSuccess("过滤成功",replaceTxt);
        logger.info("过滤后="+replaceTxt);
        return replaceTxt;
    }
}