소스 검색

三院知识库后台配置接口开发完成

wangzhinan 2 년 전
부모
커밋
c7815167f3

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

@ -19,7 +19,10 @@ public interface BaseKnowledgeDictRelationDao extends JpaRepository<BaseKnowledg
    @Query("from BaseKnowledgeDictRelation p where p.dictId = ?1 ")
    List<BaseKnowledgeDictRelation> selectByDictId(String dictId);
    List<BaseKnowledgeDictRelation> selectListByDictId(String dictId);
    @Query("from BaseKnowledgeDictRelation p where p.dictId = ?1 ")
    BaseKnowledgeDictRelation selectByDictId(String dictId);
    @Modifying
    @Query("delete from BaseKnowledgeDictRelation p where p.dictId=?1 ")

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

@ -16,7 +16,7 @@ import java.util.List;
@Transactional
public interface BaseKnowledgeFlowConfigurationRelationDao extends JpaRepository<BaseKnowledgeFlowConfigurationRelation, String>, JpaSpecificationExecutor<BaseKnowledgeFlowConfigurationRelation> {
    @Query("from BaseKnowledgeFlowConfigurationRelation p where p.questionId = ?1 ")
    @Query("from BaseKnowledgeFlowConfigurationRelation p where p.questionId = ?1 order by p.sort asc")
    List<BaseKnowledgeFlowConfigurationRelation> selectByQuestionId(String questionId);
}

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

@ -148,7 +148,7 @@ public class BaseKnowledgeDictService extends BaseJpaService<BaseKnowledgeDict,
    public BaseKnowledgeDict selectById(String id){
        BaseKnowledgeDict dict = dictDao.findById(id).get();
        if (dict.getStatus()==1){
            List<BaseKnowledgeDictRelation> dictRelations = dictRelationDao.selectByDictId(dict.getId());
            List<BaseKnowledgeDictRelation> dictRelations = dictRelationDao.selectListByDictId(dict.getId());
            for (BaseKnowledgeDictRelation dictRelation:dictRelations){
                String dept = dictRelation.getDept();
                String doctor = dictRelation.getDoctor();

+ 8 - 1
business/base-service/src/main/java/com/yihu/jw/knowledge/service/BaseKnowledgeQuestionService.java

@ -52,11 +52,13 @@ public class BaseKnowledgeQuestionService extends BaseJpaService<BaseKnowledgeQu
            knowledgeQuestion.setDel(question.getDel());
            knowledgeQuestion.setSort(question.getSort());
            knowledgeQuestion.setUpdateTime(new Date());
            knowledgeQuestion.setFlag(question.getFlag());
        }else {
            knowledgeQuestion.setDel(1);
            knowledgeQuestion.setSort(maxSort("base_knowledge_question")+1);
            knowledgeQuestion.setCreateTime(new Date());
            knowledgeQuestion.setUpdateTime(new Date());
            knowledgeQuestion.setFlag(0);
        }
        return questionDao.save(knowledgeQuestion);
    }
@ -390,7 +392,12 @@ public class BaseKnowledgeQuestionService extends BaseJpaService<BaseKnowledgeQu
        }
        if (flowConfigurationRelations!=null&&flowConfigurationRelations.size()!=0){
            BaseKnowledgeFlowConfigurationRelation configurationRelation = flowConfigurationRelations.get(0);
            questionDao.updateFlagById(configurationRelation.getQuestionId(),1);
            if (configurationRelation.getStatus()==1){
                questionDao.updateFlagById(configurationRelation.getQuestionId(),1);
            }else {
                questionDao.updateFlagById(configurationRelation.getQuestionId(),0);
            }
        }
        return flowConfigurationRelations;
    }

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

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

+ 147 - 5
business/im-service/src/main/java/com/yihu/jw/im/service/RobotService.java

@ -2,6 +2,7 @@ package com.yihu.jw.im.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.knowledge.*;
import com.yihu.jw.im.util.ImUtil;
@ -126,32 +127,145 @@ public class RobotService {
            welcome(session_id,mapSetting,map);
            //自动匹配回复文字内容
            replyContent(session_id,type,content,mapSetting,map);
        }catch (Exception e){
            e.printStackTrace();
        }
        return map;
    }
    //常见问题匹配
    public void replyContent(String type,String content,String consult){
    /**
     *
     * @param type 会话类型
     * @param content 消息内容
     * @param consult 咨询code
     * @param contentType 消息类型 文本1 问题集3002
     */
    //普通咨询常见问题匹配
    public void replyContent(String type,String content,String consult,Integer contentType){
        try {
            BaseSystemDialogSetting setting = dialogSettingDao.findBySystemTypeAndFunctionType(sessionTypeToType(type),"7",1);
            if(setting==null){
                return;
            }
            //查找相似问题
            BaseKnowledgeQuestion question = findQuestionLikeName(content);
            BaseKnowledgeQuestion question = new BaseKnowledgeQuestion();
            if (contentType==1){
                question = findQuestionLikeName(content);
            }else if ((contentType+"").equalsIgnoreCase(ImUtil.ContentType.KnowCommonQuestions+"")){
                question = knowledgeQuestionDao.findById(content).get();
            }
            if(question!=null){
                //匹配到相关问题后先推送答案
                String answer = question.getAnswer();
                WlyyHospitalSysDictDO dictDO = getSender();
                imUtil.sendTopicIM(dictDO.getDictCode(), dictDO.getDictName(), consult, "1", answer,null);
                //匹配问题是否关联其他配置;
                if (question.getFlag()==null){
                    List<BaseKnowledgeFlowConfigurationRelation> flowConfigurationRelations = findFlowConfigurationRelationLikeName(content);
                    if (flowConfigurationRelations!=null&&flowConfigurationRelations.size()!=0){
                        BaseKnowledgeFlowConfigurationRelation flowConfigurationRelation = flowConfigurationRelations.get(0);
                        String contentTypes = "1";
                        String contentMsg = "";
                        if (flowConfigurationRelation.getRelationType().equalsIgnoreCase("2")){
                            contentTypes = ImUtil.ContentType.KnowCommonDict+"";
                            contentMsg = selectByContentType(contentTypes,flowConfigurationRelation.getRelationCode()).toJSONString();
                        }else  if (flowConfigurationRelation.getRelationType().equalsIgnoreCase("3")){
                            contentTypes = ImUtil.ContentType.KnowCommonQuestions+"";
                            contentMsg = selectByContentType(contentTypes,flowConfigurationRelation.getRelationCode()).toJSONString();
                        }
                        imUtil.sendTopicIM(dictDO.getDictCode(), dictDO.getDictName(), consult, contentTypes, contentMsg,null);
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     *
     * @param senderId 发送人id
     * @param senderName 发送人名称
     * @param sessionId 会话id
     * @param type 咨询类型
     * @param content 内容
     * @param contentType 消息类型
     * @param businessType  业务类型
     * @param extend 扩展
     * 导诊咨询常见问题匹配
     */
    public void replyGuaidenceContent(String sessionId,String type,String content,String contentType,String businessType, String extend){
        try {
            BaseSystemDialogSetting setting = dialogSettingDao.findBySystemTypeAndFunctionType(sessionTypeToType(type),"7",1);
            if(setting==null){
                return;
            }
            Boolean re = imUtil.sessionIsExist(sessionId);
            if(re){
                //查找相似问题
                BaseKnowledgeQuestion question = new BaseKnowledgeQuestion();
                if (contentType.equalsIgnoreCase("1")){
                    question = findQuestionLikeName(content);
                }else if ((contentType+"").equalsIgnoreCase(ImUtil.ContentType.KnowCommonQuestions+"")){
                    question = knowledgeQuestionDao.findById(content).get();
                }
                if(question!=null){
                    //匹配到相关问题后先推送答案
                    String answer = question.getAnswer();
                    WlyyHospitalSysDictDO dictDO = getSender();
                    imService.patientGuaidenceAppend(dictDO.getDictCode(),dictDO.getDictValue(),sessionId,
                            contentType+"", answer, "1",null);
                    //匹配问题是否关联其他配置;
                    if (question.getFlag()==null){
                        List<BaseKnowledgeFlowConfigurationRelation> flowConfigurationRelations = findFlowConfigurationRelationLikeName(content);
                        if (flowConfigurationRelations!=null&&flowConfigurationRelations.size()!=0){
                            BaseKnowledgeFlowConfigurationRelation flowConfigurationRelation = flowConfigurationRelations.get(0);
                            String contentTypes = "1";
                            String contentMsg = "";
                            if (flowConfigurationRelation.getRelationType().equalsIgnoreCase("2")){
                                contentTypes = ImUtil.ContentType.KnowCommonDict+"";
                                contentMsg = selectByContentType(contentTypes,flowConfigurationRelation.getRelationCode()).toJSONString();
                            }else  if (flowConfigurationRelation.getRelationType().equalsIgnoreCase("3")){
                                contentTypes = ImUtil.ContentType.KnowCommonQuestions+"";
                                contentMsg = selectByContentType(contentTypes,flowConfigurationRelation.getRelationCode()).toJSONString();
                            }
                            imService.patientGuaidenceAppend(dictDO.getDictCode(),dictDO.getDictValue(),sessionId,
                                    contentTypes+"", contentMsg, "1",null);
                        }
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public JSONObject selectByContentType(String contentType,String id){
        JSONObject object = new JSONObject();
        if (contentType.equalsIgnoreCase(ImUtil.ContentType.KnowCommonDict+"")){
            BaseKnowledgeDict dict = knowledgeDictDao.findById(id).get();
            BaseKnowledgeDictRelation dictRelation  = knowledgeDictRelationDao.selectByDictId(id);
            if (dictRelation!=null){
                String dept = dictRelation.getDept();
            }
            List<DictHospitalDeptDO> deptDOList = findDeptList(id);
            object.put("content",deptDOList);
            object.put("contentType",contentType);
        }else if (contentType.equalsIgnoreCase(ImUtil.ContentType.KnowCommonQuestions+"")){
            BaseKnowledgeQuestions questions = knowledgeQuestionsDao.findById(id).get();
            List<BaseKnowledgeQuestionsRelation> questionsRelations = knowledgeQuestionsRelationDao.selectByQuestionsId(questions.getId());
            object.put("content",questionsRelations);
            object.put("contentType",contentType);
        }
        return object;
    }
    public void replyContent(String session_id,String type,String content,Map<String,BaseSystemDialogSetting> mapSetting,Map<String,JSONObject> map){
        try {
            BaseSystemDialogSetting setting = null;
@ -181,7 +295,7 @@ public class RobotService {
    public void welcome(String session_id,Map<String,BaseSystemDialogSetting> mapSetting,Map<String,JSONObject> map){
        try {
            Boolean re = imUtil.sessionIsExist(session_id);
            if(re){
            if(!re){
                //欢迎语
                BaseSystemDialogSetting welcomeSetting = mapSetting.get("1");
                if(welcomeSetting!=null){
@ -279,6 +393,17 @@ public class RobotService {
        return null;
    }
    //查找常见问题关联配置
    public List<BaseKnowledgeFlowConfigurationRelation> findFlowConfigurationRelationLikeName(String content){
        if(StringUtils.isNotEmpty(content)){
            return null;
        }
        String sql = "select p.* from base_knowledge_flow_configuration_relation p where " +
                "  p.relation_name like '%"+content+"%'  order by sort asc ";
        List<BaseKnowledgeFlowConfigurationRelation> flowConfigurationRelations = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseKnowledgeFlowConfigurationRelation.class));
        return flowConfigurationRelations;
    }
    public List<BaseKnowledgeQuestions> findTopQuestionsList(Integer limit,String ids){
        String sql = "select p.* from base_knowledge_questions p where p.status = 1 and p.del=1 and p.id in ('"+ids+"')" +
                "(p.time=1 or (p.time=2 and p.date<'"+DateUtil.getStringDate()+"'))  order by sort limit "+limit;
@ -293,12 +418,23 @@ public class RobotService {
        return questionList;
    }
    /**
     * 查询相关字典
     * @param limit
     * @param ids
     * @return
     */
    public List<BaseKnowledgeDict> findTopDictList(Integer limit,String ids){
        String sql = "select p.* from base_knowledge_dict p where p.del=1 and p.id in ('"+ids+"') order by sort limit "+limit;
        List<BaseKnowledgeDict> dictList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseKnowledgeDict.class));
        return dictList;
    }
    /**
     * 根据业务不一样转换相关的会话类型
     * @param type
     * @return
     */
    //会话类型转类型
    private String sessionTypeToType(String type){
        if(StringUtils.isNotEmpty(type)){
@ -319,4 +455,10 @@ public class RobotService {
        return type;
    }
    public List<DictHospitalDeptDO> findDeptList(String ids){
        String sql = "select p.* from dict_hospital_dept p where p.consult_dept_flag=1 and p.code in ('"+ids+"') ";
        List<DictHospitalDeptDO> deptDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(DictHospitalDeptDO.class));
        return deptDOList;
    }
}

+ 20 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/knowledge/BaseKnowledgeFlowConfigurationRelation.java

@ -19,15 +19,35 @@ public class BaseKnowledgeFlowConfigurationRelation extends UuidIdentityEntityWi
    private String questionId;//问题id
    private String relationType;//关联类型(1常见问题、2字典中心、3问题集)
    private String relationCode;//关联code
    private String relationName;//关联名称
    private Integer sort;//排序
    private Integer status;//1开启0关闭
    private BaseKnowledgeQuestion question;//常见问题
    private BaseKnowledgeDict dict;//问题字典
    private BaseKnowledgeQuestions questions;//问题集
    public String getRelationName() {
        return relationName;
    }
    public void setRelationName(String relationName) {
        this.relationName = relationName;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Transient
    public BaseKnowledgeQuestion getQuestion() {
        return question;

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/knowledge/BaseKnowledgeQuestion.java

@ -85,7 +85,7 @@ public class BaseKnowledgeQuestion extends UuidIdentityEntityWithOperator {
	}
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	@Column(name = "date", nullable = false, length = 0,updatable = false)
	@Column(name = "date", nullable = false, length = 0)
	public Date getDate() {
		return date;
	}

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/knowledge/BaseKnowledgeQuestions.java

@ -89,7 +89,7 @@ public class BaseKnowledgeQuestions extends UuidIdentityEntityWithOperator {
	}
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	@Column(name = "date", nullable = false, length = 0,updatable = false)
	@Column(name = "date", nullable = false, length = 0)
	public Date getDate() {
		return date;
	}

+ 2 - 1
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/consult/PatientConsultEndpoint.java

@ -1018,13 +1018,14 @@ public class PatientConsultEndpoint extends EnvelopRestEndpoint {
						content = imgeUrl;
					}
				}else{
				}
			}
			Map<String,JSONObject> map = robotService.robotReply(session_id,type,content);
			session_id = imService.getPatientGuaidenceConsult(sender_id,session_id,type);
			String result = imService.patientGuaidenceAppend(sender_id,sender_name,session_id,content_type,content,"1",extend);
			robotService.sendReplyMap(map);
			//消息存在时文本及问题集类型发送时自动回复
			robotService.replyGuaidenceContent(sender_id,type,content,content_type,"1",extend);
			List<BaseDoctorRoleDO> doctorRoleDOS = doctorRoleDao.findByRoleCode("guidance");
			for (BaseDoctorRoleDO doctorRoleDO:doctorRoleDOS){
				System.out.println("发送外层SOCKET消息:通知医生导诊");