Browse Source

im自动回复

LAPTOP-KB9HII50\70708 2 years ago
parent
commit
9dcdba35b4

+ 4 - 1
business/base-service/src/main/java/com/yihu/jw/knowledge/dao/BaseKnowledgeFlowConfigurationRelationDao.java

@ -1,9 +1,9 @@
package com.yihu.jw.knowledge.dao;
import com.yihu.jw.entity.knowledge.BaseKnowledgeFlowConfigurationRelation;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestionsRelation;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
@ -19,4 +19,7 @@ public interface BaseKnowledgeFlowConfigurationRelationDao extends JpaRepository
    @Query("from BaseKnowledgeFlowConfigurationRelation p where p.questionId = ?1 order by p.sort asc")
    List<BaseKnowledgeFlowConfigurationRelation> selectByQuestionId(String questionId);
    @Modifying
    @Query("delete from BaseKnowledgeFlowConfigurationRelation p where p.questionId = ?1")
    void deleteByQuestionId(String questionId);
}

+ 23 - 0
business/base-service/src/main/java/com/yihu/jw/knowledge/service/BaseKnowledgeDictService.java

@ -1,6 +1,8 @@
package com.yihu.jw.knowledge.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
@ -176,6 +178,27 @@ public class BaseKnowledgeDictService extends BaseJpaService<BaseKnowledgeDict,
        return dict;
    }
    //根据字段id获取关联科室
    public JSONArray findDeptById(String id){
        JSONArray jsonArray = new JSONArray();
        List<BaseKnowledgeDictRelation> dictRelations = dictRelationDao.selectListByDictId(id);
        for (BaseKnowledgeDictRelation dictRelation:dictRelations){
            String dept = dictRelation.getDept();
            String deptstr[]= dept.split(",");
            for (int i=0;i<deptstr.length;i++){
                DictHospitalDeptDO hospitalDeptDO = hospitalDeptDao.findByCode(deptstr[i]);
                if(hospitalDeptDO!=null){
                    JSONObject json = new JSONObject();
                    json.put("code",hospitalDeptDO.getCode());
                    json.put("name",hospitalDeptDO.getName());
                    json.put("img",hospitalDeptDO.getDeptImg());
                    jsonArray.add(json);
                }
            }
        }
        return jsonArray;
    }
    /**
     * 字典设置排序

+ 2 - 3
business/im-service/src/main/java/com/yihu/jw/im/service/ImService.java

@ -642,9 +642,8 @@ public class ImService {
                failed.add(String.valueOf(resObj.get("data")));
            }
        }
        if(type==1||type==3001){
            robotService.replyContent(consultModel.getType()+"",content,consult,type);
        }
        robotService.reply(consultModel.getType()+"",content,consult,type);
        return failed;
    }

+ 50 - 4
business/im-service/src/main/java/com/yihu/jw/im/service/RobotService.java

@ -1,5 +1,6 @@
package com.yihu.jw.im.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
@ -7,6 +8,7 @@ import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.knowledge.*;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.knowledge.dao.*;
import com.yihu.jw.knowledge.service.BaseKnowledgeDictService;
import com.yihu.jw.sms.dao.HospitalSysDictDao;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
@ -49,6 +51,8 @@ public class RobotService {
    private ImService imService;
    @Autowired
    private HospitalSysDictDao hospitalSysDictDao;
    @Autowired
    private BaseKnowledgeDictService baseKnowledgeDictService;
    /**
@ -133,15 +137,46 @@ public class RobotService {
        return map;
    }
    public void reply(String sessionType,String content,String consult,Integer contentType){
        if(contentType==1||contentType==3001){
            //常见问题
            replyContent(sessionType,content,consult,contentType);
            return;
        }
        if(contentType==3006){
            //回复疾病
            replyDisease(sessionType,content,null,consult,contentType+"");
            return;
        }
    }
    //回复疾病
    public void replyDisease(String sessionType,String content,String sessionId,String consult,String contentType){
        try {
            JSONObject jsonObject = JSON.parseObject(content);
            String id = jsonObject.getString("id");
            JSONArray jsonArray = baseKnowledgeDictService.findDeptById(id);
            WlyyHospitalSysDictDO dictDO = getSender();
            if(StringUtils.isNotEmpty(consult)){
                imUtil.sendTopicIM(dictDO.getDictCode(), dictDO.getDictName(), consult, ImUtil.ContentType.KnowSymptomsDiseaseA.getValue(), jsonArray.toJSONString(),null);
            }else {
                imService.patientGuaidenceAppend(dictDO.getDictCode(),dictDO.getDictValue(),sessionId,
                        ImUtil.ContentType.KnowSymptomsDiseaseA.getValue(),jsonArray.toJSONString(),"1",null);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     *
     * @param type 会话类型
     * @param sessionType 会话类型
     * @param content 消息内容
     * @param consult 咨询code
     * @param contentType 消息类型 文本1 问题集3002
     */
    //普通咨询常见问题匹配
    public void replyContent(String type,String content,String consult,Integer contentType){
    public void replyContent(String sessionType,String content,String consult,Integer contentType){
        try {
            WlyyHospitalSysDictDO dictDO = getSender();
            if (contentType==3003){
@ -149,7 +184,7 @@ public class RobotService {
                String contentMsg = selectByContentType(contentTypes,content).toJSONString();
                imUtil.sendTopicIM(dictDO.getDictCode(), dictDO.getDictName(), consult, contentTypes, contentMsg,null);
            }
            BaseSystemDialogSetting setting = dialogSettingDao.findBySystemTypeAndFunctionType(sessionTypeToType(type),"7",1);
            BaseSystemDialogSetting setting = dialogSettingDao.findBySystemTypeAndFunctionType(sessionTypeToType(sessionType),"7",1);
            if(setting==null){
                return;
            }
@ -200,9 +235,14 @@ public class RobotService {
     */
    public void replyGuaidenceContent(String sessionId,String type,String content,String contentType,String businessType, String extend){
        try {
            if(contentType.equals(ImUtil.ContentType.KnowSymptomsDiseaseQ.getValue())){
                //回复疾病
                replyDisease(type,content,sessionId,null,contentType);
                return;
            }
            WlyyHospitalSysDictDO dictDO = getSender();
            if (contentType.equalsIgnoreCase("3003")){
                String contentTypes = ImUtil.ContentType.KnowCommonDict+"";
                String contentTypes = ImUtil.ContentType.KnowCommonDict.getValue();
                String contentMsg = selectByContentType(contentTypes,content).toJSONString();
                imService.patientGuaidenceAppend(dictDO.getDictCode(),dictDO.getDictValue(),sessionId,
                        contentTypes+"", contentMsg, "1",null);
@ -308,6 +348,12 @@ public class RobotService {
        try {
            Boolean re = imUtil.sessionIsExist(session_id);
            if(!re){
                //系统客服tip
                JSONObject tip = new JSONObject();
                tip.put("content","");
                tip.put("content_type",ImUtil.ContentType.KnowCommonCustomer.getValue());
                tip.put("session_id",session_id);
                map.put("0",tip);
                //欢迎语
                BaseSystemDialogSetting welcomeSetting = mapSetting.get("1");
                if(welcomeSetting!=null){

+ 4 - 1
business/im-service/src/main/java/com/yihu/jw/im/util/ImUtil.java

@ -48,10 +48,13 @@ public class ImUtil {
		Reservation("转诊预约发送","21"),
		Know("已知悉","22"),
		KnowCommonQuestion("知识库-常见问题","3001"),
		KnowCommonCustomer("知识库-客服欢迎","3008"),
		KnowCommonQuestions("知识库-常见问题集","3002"),
		KnowCommonDict("知识库-字典","3003"),
		KnowDeptDoctor("知识库-科室医生","3004"),
		KnowSymptomsDisease("知识库-疾病症状","3005");
		KnowSymptomsDisease("知识库-疾病症状","3005"),
		KnowSymptomsDiseaseQ("知识库-疾病症状问题","3006"),
		KnowSymptomsDiseaseA("知识库-疾病症状回答","3007");
		private String name;
		private String value;