|
|
|
@@ -7,8 +7,10 @@ import com.xueyi.common.core.constant.basic.SecurityConstants; |
|
|
|
import com.xueyi.common.core.constant.digitalman.MessageConstants; |
|
|
|
import com.xueyi.common.core.constant.digitalman.SkillConstants; |
|
|
|
import com.xueyi.common.core.utils.core.IdUtil; |
|
|
|
import com.xueyi.common.core.web.result.AjaxResult; |
|
|
|
import com.xueyi.common.core.web.result.R; |
|
|
|
import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; |
|
|
|
import com.xueyi.nlt.api.nlt.domain.vo.CoversationSessionVo; |
|
|
|
import com.xueyi.nlt.api.nlt.domain.vo.DmIntentVo; |
|
|
|
import com.xueyi.nlt.api.nlt.domain.vo.KnowledgeVo; |
|
|
|
import com.xueyi.nlt.api.nlt.domain.vo.response.DmIntentResponse; |
|
|
|
@@ -82,6 +84,30 @@ public class DmIntentServiceImpl extends BaseServiceImpl<DmIntentQuery, DmIntent |
|
|
|
|
|
|
|
@Override |
|
|
|
public DmIntentResponse conversation(DmIntentVo intent) { |
|
|
|
DmIntentResponse response = sessionHandle(intent); |
|
|
|
//已有session的处理 |
|
|
|
if(response != null && StringUtils.isNotEmpty(response.getSkillCode())){ |
|
|
|
return response; |
|
|
|
} |
|
|
|
|
|
|
|
response = regularAnswer(intent); |
|
|
|
if (response != null && (StringUtils.isNotEmpty(response.getSkillCode()) || StringUtils.isNotEmpty(response.getMsg()))) { |
|
|
|
return response; |
|
|
|
} |
|
|
|
else{ |
|
|
|
response = knowledgeAnswer(intent); |
|
|
|
} |
|
|
|
|
|
|
|
if(StringUtils.isEmpty(response.getSkillCode()) && intent.getMode().equals(MessageConstants.MODE_FREE_CHAT)) { |
|
|
|
JSONObject joResult = freeChatTemplate.handle(intent.getDevId(),intent.getContent()); |
|
|
|
response.setH5(joResult); |
|
|
|
} |
|
|
|
|
|
|
|
return response; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public DmIntentResponse regularAnswer(DmIntentVo intent) { |
|
|
|
MarkRecordVo recordVo = new MarkRecordVo(); |
|
|
|
recordVo.setDevId(intent.getDevId()); |
|
|
|
recordVo.setId(IdUtil.getSnowflakeNextId()); |
|
|
|
@@ -90,9 +116,9 @@ public class DmIntentServiceImpl extends BaseServiceImpl<DmIntentQuery, DmIntent |
|
|
|
recordVo.setHit(1); |
|
|
|
|
|
|
|
R<DmManDeviceDto> manDeviceDtoR = manDeviceService.manDeviceInfoInner(intent.getDevId()); |
|
|
|
String enterpriseId = manDeviceDtoR.getData().getTId().toString(); |
|
|
|
Long enterpriseId = manDeviceDtoR.getData().getTId(); |
|
|
|
String enterpriseName = ""; |
|
|
|
R<SysEnterpriseDto> enterpriseDtoR = remoteEnterpriseService.getInfo(Long.valueOf(enterpriseId)); |
|
|
|
R<SysEnterpriseDto> enterpriseDtoR = remoteEnterpriseService.getInfo(enterpriseId); |
|
|
|
Source source = SourceUtil.getSourceCache(enterpriseDtoR.getData().getStrategyId()); |
|
|
|
if (enterpriseDtoR.isOk()) { |
|
|
|
enterpriseName = enterpriseDtoR.getData().getName(); |
|
|
|
@@ -104,7 +130,7 @@ public class DmIntentServiceImpl extends BaseServiceImpl<DmIntentQuery, DmIntent |
|
|
|
sendToDashboard(intent, enterpriseName); |
|
|
|
|
|
|
|
// 判断是否有权限 |
|
|
|
R<List<DmSkillDto>> skilllistInner = remoteskillService.skilllistInner(intent.getDevId(),"1",Long.parseLong(enterpriseId), source.getMaster(), SecurityConstants.INNER); |
|
|
|
R<List<DmSkillDto>> skilllistInner = remoteskillService.skilllistInner(intent.getDevId(),"1",enterpriseId, source.getMaster(), SecurityConstants.INNER); |
|
|
|
if(skilllistInner.isOk()){ |
|
|
|
List<DmSkillDto> skilllist=skilllistInner.getData(); |
|
|
|
for (DmSkillDto dmSkillDto : skilllist) { |
|
|
|
@@ -122,21 +148,20 @@ public class DmIntentServiceImpl extends BaseServiceImpl<DmIntentQuery, DmIntent |
|
|
|
switch (response.getSkillCode()) { |
|
|
|
case "1": |
|
|
|
// 做会议室处理 |
|
|
|
response.setH5(meetingOrderTemplate.handle(intent.getDevId(), intent.getContent(), Long.valueOf(enterpriseId))); |
|
|
|
response.setH5(meetingOrderTemplate.handle(intent.getDevId(), intent.getContent(), enterpriseId)); |
|
|
|
break; |
|
|
|
case "33": |
|
|
|
// 做快递预约处理 |
|
|
|
response.setH5(deliveryOrderTemplate.handle(intent.getDevId(), intent.getContent(), Long.valueOf(enterpriseId))); |
|
|
|
response.setH5(deliveryOrderTemplate.handle(intent.getDevId(), intent.getContent(), enterpriseId)); |
|
|
|
break; |
|
|
|
case "34": |
|
|
|
// 做查询航班信息处理 |
|
|
|
response.setH5(flightMessageTemplate.handle(intent.getDevId(), intent.getContent(), Long.valueOf(enterpriseId))); |
|
|
|
response.setH5(flightMessageTemplate.handle(intent.getDevId(), intent.getContent(), enterpriseId)); |
|
|
|
break; |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
else if(response != null && StringUtils.isNotEmpty(response.getMsg())){ |
|
|
|
}else if(response != null && StringUtils.isNotEmpty(response.getMsg())){ |
|
|
|
// 记录log |
|
|
|
recordVo.setType(2); |
|
|
|
List answers = new ArrayList(); |
|
|
|
@@ -144,46 +169,93 @@ public class DmIntentServiceImpl extends BaseServiceImpl<DmIntentQuery, DmIntent |
|
|
|
recordVo.setAnswers(answers); |
|
|
|
return response; |
|
|
|
} |
|
|
|
else{ |
|
|
|
// 调用知识库问答 |
|
|
|
response.setSkillCode("30"); |
|
|
|
DmKnowledgeResponse qaAjax = null; |
|
|
|
KnowledgeVo knowledgeVo = new KnowledgeVo(); |
|
|
|
knowledgeVo.setManCode(manDeviceDtoR.getData().getManCode()); |
|
|
|
knowledgeVo.setTenantId(manDeviceDtoR.getData().getTId()); |
|
|
|
knowledgeVo.setQuestion(intent.getContent()); |
|
|
|
R<DmKnowledgeResponse> dmKnowledgeResponseR = remoteQAService.query(knowledgeVo); |
|
|
|
if (dmKnowledgeResponseR!= null && dmKnowledgeResponseR.getData() != null) { |
|
|
|
qaAjax = dmKnowledgeResponseR.getData(); |
|
|
|
} |
|
|
|
return response; |
|
|
|
} |
|
|
|
@Override |
|
|
|
public DmIntentResponse knowledgeAnswer(DmIntentVo intent){ |
|
|
|
MarkRecordVo recordVo = new MarkRecordVo(); |
|
|
|
recordVo.setDevId(intent.getDevId()); |
|
|
|
recordVo.setId(IdUtil.getSnowflakeNextId()); |
|
|
|
recordVo.setCreateTime(LocalDateTime.now()); |
|
|
|
recordVo.setQuestion(intent.getContent()); |
|
|
|
recordVo.setHit(1); |
|
|
|
|
|
|
|
String content = ""; |
|
|
|
if (qaAjax != null) { |
|
|
|
log.info("知识库问答返回结果:{}",qaAjax.toString()); |
|
|
|
if (qaAjax.getTarget() == 1) { |
|
|
|
content = qaAjax.getResult().get(0).getKnowledgeLib(); |
|
|
|
pushIntoDashboardRedis(enterpriseName,content,"knowledge"); |
|
|
|
response.setH5(JSONObject.from(qaAjax)); |
|
|
|
// 记录log |
|
|
|
recordVo.setType(2); |
|
|
|
List answers = new ArrayList(); |
|
|
|
answers.add(response.getMsg()); |
|
|
|
recordVo.setAnswers(answers); // 航班查询 |
|
|
|
return response; |
|
|
|
} |
|
|
|
else { |
|
|
|
// 知识库没有答案,返回空 |
|
|
|
response.clear(); |
|
|
|
response.setMsg(""); |
|
|
|
} |
|
|
|
} |
|
|
|
R<DmManDeviceDto> manDeviceDtoR = manDeviceService.manDeviceInfoInner(intent.getDevId()); |
|
|
|
Long enterpriseId = manDeviceDtoR.getData().getTId(); |
|
|
|
String enterpriseName = ""; |
|
|
|
R<SysEnterpriseDto> enterpriseDtoR = remoteEnterpriseService.getInfo(Long.valueOf(enterpriseId)); |
|
|
|
Source source = SourceUtil.getSourceCache(enterpriseDtoR.getData().getStrategyId()); |
|
|
|
if (enterpriseDtoR.isOk()) { |
|
|
|
enterpriseName = enterpriseDtoR.getData().getName(); |
|
|
|
} |
|
|
|
|
|
|
|
if(StringUtils.isEmpty(response.getSkillCode()) && intent.getMode().equals(MessageConstants.MODE_FREE_CHAT)) { |
|
|
|
JSONObject joResult = freeChatTemplate.handle(intent.getDevId(),intent.getContent()); |
|
|
|
response.setH5(joResult); |
|
|
|
// 调用知识库问答 |
|
|
|
DmIntentResponse response = new DmIntentResponse(); |
|
|
|
response.setSkillCode("30"); |
|
|
|
DmKnowledgeResponse qaAjax = null; |
|
|
|
KnowledgeVo knowledgeVo = new KnowledgeVo(); |
|
|
|
knowledgeVo.setManCode(manDeviceDtoR.getData().getManCode()); |
|
|
|
knowledgeVo.setTenantId(manDeviceDtoR.getData().getTId()); |
|
|
|
knowledgeVo.setQuestion(intent.getContent()); |
|
|
|
R<DmKnowledgeResponse> dmKnowledgeResponseR = remoteQAService.query(knowledgeVo); |
|
|
|
if (dmKnowledgeResponseR!= null && dmKnowledgeResponseR.getData() != null) { |
|
|
|
qaAjax = dmKnowledgeResponseR.getData(); |
|
|
|
} |
|
|
|
|
|
|
|
String content = ""; |
|
|
|
if (qaAjax != null) { |
|
|
|
log.info("知识库问答返回结果:{}",qaAjax.toString()); |
|
|
|
if (qaAjax.getTarget() == 1) { |
|
|
|
content = qaAjax.getResult().get(0).getKnowledgeLib(); |
|
|
|
pushIntoDashboardRedis(enterpriseName,content,"knowledge"); |
|
|
|
response.setH5(JSONObject.from(qaAjax)); |
|
|
|
// 记录log |
|
|
|
recordVo.setType(2); |
|
|
|
List answers = new ArrayList(); |
|
|
|
answers.add(response.getMsg()); |
|
|
|
recordVo.setAnswers(answers); // 航班查询 |
|
|
|
return response; |
|
|
|
} |
|
|
|
else { |
|
|
|
// 知识库没有答案,返回空 |
|
|
|
response.clear(); |
|
|
|
response.setMsg(""); |
|
|
|
} |
|
|
|
} |
|
|
|
return response; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public DmIntentResponse sessionHandle(DmIntentVo intent) { |
|
|
|
R<DmManDeviceDto> manDeviceDtoR = manDeviceService.manDeviceInfoInner(intent.getDevId()); |
|
|
|
Long enterpriseId = manDeviceDtoR.getData().getTId(); |
|
|
|
|
|
|
|
DmIntentResponse response = new DmIntentResponse(); |
|
|
|
// 判断会议室缓存 |
|
|
|
// 获取设备号对应缓存 |
|
|
|
//之前已有session信息 |
|
|
|
CoversationSessionVo sessionObject = (CoversationSessionVo) redisTemplate2.opsForValue().get("group:device" + ":" + intent.getDevId() + ":" +"session"); //category |
|
|
|
if (sessionObject != null) { |
|
|
|
switch (sessionObject.getCategory()) { |
|
|
|
case "meeting": |
|
|
|
response.setMsg(""); |
|
|
|
response.setSkillCode("1"); |
|
|
|
response.setH5(meetingOrderTemplate.handle(intent.getDevId(),intent.getContent(), enterpriseId)); |
|
|
|
response.setAction("Meeting"); |
|
|
|
break; |
|
|
|
case "delivery": |
|
|
|
response.setMsg(""); |
|
|
|
response.setSkillCode("33"); |
|
|
|
response.setH5(deliveryOrderTemplate.handle(intent.getDevId(),intent.getContent(), enterpriseId)); |
|
|
|
break; |
|
|
|
case "flight": |
|
|
|
response.setMsg(""); |
|
|
|
response.setSkillCode("34"); |
|
|
|
response.setH5(flightMessageTemplate.handle(intent.getDevId(),intent.getContent(), enterpriseId)); |
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return response; |
|
|
|
} |
|
|
|
|
|
|
|
|