LAPTOP-KB9HII50\70708 2 years ago
parent
commit
571c88396b

+ 5 - 0
business/base-service/src/main/java/com/yihu/jw/knowledge/dao/BaseKnowledgeDictDao.java

@ -8,6 +8,8 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * 知识库-字典dao
 * @wangzhinan
@ -21,4 +23,7 @@ public interface BaseKnowledgeDictDao extends JpaRepository<BaseKnowledgeDict, S
    @Query("from BaseKnowledgeDict p where p.sort = ?1 ")
    BaseKnowledgeDict selectBySort(Integer sort);
    @Query(value = "select p.* from base_knowledge_dict p where p.del=1 order by p.sort limit ?1 ",nativeQuery = true)
    List<BaseKnowledgeDict> findTopList(Integer limit);
}

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

@ -7,6 +7,8 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * 知识库-常见问题dao
 * @wangzhinan
@ -25,4 +27,6 @@ public interface BaseKnowledgeQuestionDao extends JpaRepository<BaseKnowledgeQue
    @Query("from BaseKnowledgeQuestion p where p.sort = ?1 ")
    BaseKnowledgeQuestion selectBySort(Integer sort);
    @Query(value = "select p.* from base_knowledge_question p where p.status = 1 and p.del=1 and (p.time=1 or (p.time=2 and p.date<?1)) order by sort limit ?2 ",nativeQuery = true)
    List<BaseKnowledgeQuestion> findTopList(String date,Integer limit);
}

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

@ -1,6 +1,5 @@
package com.yihu.jw.knowledge.dao;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestion;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestions;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -8,6 +7,8 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * 知识库-问题集dao
 * @wangzhinan
@ -21,4 +22,7 @@ public interface BaseKnowledgeQuestionsDao extends JpaRepository<BaseKnowledgeQu
    @Modifying
    @Query("update BaseKnowledgeQuestions p set p.del = ?2 where p.id = ?1")
    void updateDelById(String id,Integer del);
    @Query(value = "select p.* from base_knowledge_questions p where p.status = 1 and p.del=1 and (p.time=1 or (p.time=2 and p.date<?1)) order by sort limit ?2 ",nativeQuery = true)
    List<BaseKnowledgeQuestions> findTopList(String date, Integer limit);
}

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

@ -1,6 +1,5 @@
package com.yihu.jw.knowledge.dao;
import com.yihu.jw.entity.knowledge.BaseKnowledgeDictRelation;
import com.yihu.jw.entity.knowledge.BaseSystemDialogSetting;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -18,4 +17,7 @@ public interface BaseSystemDialogSettingDao extends JpaRepository<BaseSystemDial
    @Query("from BaseSystemDialogSetting p where p.systemType = ?1 ")
    List<BaseSystemDialogSetting> selectBySystemType(String systemType);
    @Query("from BaseSystemDialogSetting p where p.systemType = ?1 and p.flag=?2")
    List<BaseSystemDialogSetting> selectBySystemTypeAndFlag(String systemType,Integer flag);
}

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

@ -7,8 +7,8 @@ import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.knowledge.BaseKnowledgeDict;
import com.yihu.jw.entity.knowledge.BaseKnowledgeDictRelation;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestion;
import com.yihu.jw.knowledge.dao.*;
import com.yihu.jw.knowledge.dao.BaseKnowledgeDictDao;
import com.yihu.jw.knowledge.dao.BaseKnowledgeDictRelationDao;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.utils.hibernate.HibenateUtils;
@ -103,7 +103,8 @@ public class BaseKnowledgeDictService extends BaseJpaService<BaseKnowledgeDict,
     * @param status
     */
    public MixEnvelop selectDictList(String name, String type, String status, Integer page, Integer size){
        String condition = " and del = 1 order by sort asc,create_time desc ";
        String orderBy = " order by sort asc,create_time desc ";
        String condition = "";
        String sql = "SELECT\n" +
                "\tid,\n" +
                "\ttype,\n" +
@ -124,7 +125,8 @@ public class BaseKnowledgeDictService extends BaseJpaService<BaseKnowledgeDict,
        if (StringUtils.isNoneBlank(status)){
            condition +=" and status ='"+type+"' ";
        }
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql+condition, page, size);
        condition += " and del = 1";
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql+condition+orderBy, page, size);
        String sqlCount ="select COUNT(1) as total from base_knowledge_dict where 1=1 ";
        List<Map<String, Object>> rstotal = hibenateUtils.createSQLQuery(sqlCount+condition);
        Long count = 0L;

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

@ -1,11 +1,13 @@
package com.yihu.jw.knowledge.service;
import com.yihu.jw.entity.knowledge.*;
import com.yihu.jw.entity.knowledge.BaseKnowledgeFlowConfigurationRelation;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestion;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestions;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestionsRelation;
import com.yihu.jw.knowledge.dao.*;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
@ -226,7 +228,8 @@ public class BaseKnowledgeQuestionService extends BaseJpaService<BaseKnowledgeQu
     * @param status
     */
    public MixEnvelop selectQuestionsList(String name,String type,String status,Integer page,Integer size){
        String condition = " and del = 1 order by sort asc,create_time desc ";
        String orderBy = " order by sort asc,create_time desc ";
        String condition = "";
        String sql = "SELECT\n" +
                "\tid,\n" +
                "\tbusiness_type AS businessType,\n" +
@ -249,7 +252,8 @@ public class BaseKnowledgeQuestionService extends BaseJpaService<BaseKnowledgeQu
        if (StringUtils.isNoneBlank(status)){
            condition +=" and status ='"+type+"' ";
        }
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql+condition, page, size);
        condition += " and del = 1";
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql+condition+orderBy, page, size);
        for (Map<String,Object> map:list){
            String id = map.get("id").toString();
            List<BaseKnowledgeQuestionsRelation> questionsRelations = questionsRelationDao.selectByQuestionsId(id);

+ 2 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/knowledge/BaseSystemDialogSetting.java

@ -16,9 +16,9 @@ import java.util.List;
@Table(name = "base_system_dialog_setting")
public class BaseSystemDialogSetting extends UuidIdentityEntityWithOperator {
	private String systemType;//系统业务类型(字典systemBusinessType)
	private String systemType;//系统业务类型(字典systemBusinessType)//{"1":"在线导诊","2":"专属服务引导","3":"在线候诊室","4":"在线候诊"}
	private String systemName;//系统业务名称
	private String functionType;//业务类型(字典 sessionFunctionType)
	private String functionType;//业务类型(字典 sessionFunctionType)//{"1":"欢迎消息","2":"欢迎消息关联问题","3":"客服无应答时消息","4":"用户无应答时消息","5":"会话结束","6":"系统自动结束会话","7":"系统自动回复"}
	private String functionName;//业务名称
	private Integer flag;//1开0关
	private Integer relationType;//1关联文本(对应content)2关联业务(对应relaitonCode)

+ 133 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/service/consult/RobotService.java

@ -0,0 +1,133 @@
package com.yihu.jw.hospital.service.consult;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.knowledge.BaseKnowledgeDict;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestion;
import com.yihu.jw.entity.knowledge.BaseKnowledgeQuestions;
import com.yihu.jw.entity.knowledge.BaseSystemDialogSetting;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.knowledge.dao.*;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 机器人
 * Created by yeshijie on 2023/4/12.
 */
@Service
public class RobotService {
    @Autowired
    private ImUtil imUtil;
    @Autowired
    private BaseSystemDialogSettingDao dialogSettingDao;
    @Autowired
    private BaseKnowledgeDictDao knowledgeDictDao;
    @Autowired
    private BaseKnowledgeDictRelationDao knowledgeDictRelationDao;
    @Autowired
    private BaseKnowledgeQuestionDao knowledgeQuestionDao;
    @Autowired
    private  BaseKnowledgeFlowConfigurationRelationDao knowledgeFlowConfigurationRelationDao;
    @Autowired
    private BaseKnowledgeQuestionsDao knowledgeQuestionsDao;
    @Autowired
    private BaseKnowledgeQuestionsRelationDao knowledgeQuestionsRelationDao;
    //智能导致助手回复
    public void robotReply(String session_id,String type,String content){
        List<BaseSystemDialogSetting> settingList = dialogSettingDao.selectBySystemTypeAndFlag(sessionTypeToType(type),1);
        if(settingList.size()==0){
            //未配置自动回复内容
            return;
        }
        Map<String,BaseSystemDialogSetting> mapSetting = settingList.stream().collect(Collectors.toMap(BaseSystemDialogSetting::getFunctionType, v -> v,(o1,o2)->o1));
        //欢迎语
        welcome(session_id,mapSetting);
        //自动匹配回复文字内容
        replyContent(session_id,content,mapSetting);
    }
    public void replyContent(String session_id,String content,Map<String,BaseSystemDialogSetting> mapSetting){
    }
    public void welcome(String session_id,Map<String,BaseSystemDialogSetting> mapSetting){
        Boolean re = imUtil.sessionIsExist(session_id);
        if(re){
            //欢迎语
            BaseSystemDialogSetting welcomeSetting = mapSetting.get("1");
            if(welcomeSetting!=null){
                String welcomeContent = welcomeSetting.getContent();
            }
            //欢迎消息关联问题
            BaseSystemDialogSetting welcomeQueSetting = mapSetting.get("2");
            if(welcomeQueSetting!=null){
                Integer relaitonCodeType = welcomeQueSetting.getRelaitonCodeType();//1常见问题2字典中心3问题集
                relaitonCodeType = relaitonCodeType==null?-1:relaitonCodeType;
                String relationCode = welcomeQueSetting.getRelationCode();//relationType2对应业务code,多个逗号隔开
                if(relaitonCodeType==1){
                    //1常见问题
                    List<BaseKnowledgeQuestion> questionList = knowledgeQuestionDao.findTopList(DateUtil.getStringDate(),10);
                    JSONArray jsonArray = new JSONArray();
                    for (BaseKnowledgeQuestion question:questionList){
                        JSONObject json = new JSONObject();
                        json.put("id",question.getId());
                        json.put("questionName",question.getQuestionName());
                        jsonArray.add(jsonArray);
                    }
                }else if(relaitonCodeType==2){
                    List<BaseKnowledgeDict> dictList = knowledgeDictDao.findTopList(10);
                    JSONArray jsonArray = new JSONArray();
                    for (BaseKnowledgeDict dict:dictList){
                        JSONObject json = new JSONObject();
                        json.put("id",dict.getId());
                        json.put("name",dict.getName());
                        jsonArray.add(jsonArray);
                    }
                }else if(relaitonCodeType==3){
                    List<BaseKnowledgeQuestions> questionsList = knowledgeQuestionsDao.findTopList(DateUtil.getStringDate(),10);
                    JSONArray jsonArray = new JSONArray();
                    for (BaseKnowledgeQuestions questions:questionsList){
                        JSONObject json = new JSONObject();
                        json.put("id",questions.getId());
                        json.put("questionsName",questions.getQuestionsName());
                        json.put("businessType",questions.getBusinessType());
                        jsonArray.add(jsonArray);
                    }
                }
            }
        }
    }
    //会话类型转类型
    private String sessionTypeToType(String type){
        if(StringUtils.isNotEmpty(type)){
            return type;
        }
        if("18".equals(type)){
            return "1";
        }
        if("26".equals(type)){
            return "2";
        }
        if("27".equals(type)){
            return "3";
        }
        if("28".equals(type)){
            return "4";
        }
        return type;
    }
}