From f578a3ebe53220cec87241dd0f947ad4c9a0fbcb Mon Sep 17 00:00:00 2001 From: liu Date: Thu, 25 Apr 2024 14:48:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervision/controller/AskController.java | 18 +++---- .../dto/roundAsk/SessionParamDTO.java | 5 ++ .../com/supervision/enums/RetireRoleEnum.java | 44 +++++++--------- .../com/supervision/service/AskService.java | 7 ++- .../service/impl/AskServiceImpl.java | 50 +++++++++++-------- .../java/com/supervision/vo/RoleSetNode.java | 14 ++++++ .../java/com/supervision/vo/RoleSetReqVO.java | 9 ++-- .../com/supervision/vo/RoundTalkReqVO.java | 2 + 8 files changed, 87 insertions(+), 62 deletions(-) create mode 100644 kbqa-graph/src/main/java/com/supervision/vo/RoleSetNode.java diff --git a/kbqa-graph/src/main/java/com/supervision/controller/AskController.java b/kbqa-graph/src/main/java/com/supervision/controller/AskController.java index a73ba37..441537a 100644 --- a/kbqa-graph/src/main/java/com/supervision/controller/AskController.java +++ b/kbqa-graph/src/main/java/com/supervision/controller/AskController.java @@ -1,6 +1,7 @@ package com.supervision.controller; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Pair; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.supervision.dto.roundAsk.SessionParamDTO; @@ -13,10 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import static com.supervision.service.impl.AskServiceImpl.SESSION_PARAM; @@ -65,15 +63,15 @@ public class AskController { } - @ApiOperation("多轮对话中用户手动填写参数") + @ApiOperation("多轮对话中用户手动填写参数,返回唯一的角色设置ID") @PostMapping("saveUserParam") - public void saveUserParam(@RequestBody RoleSetReqVO paramReqVO) { - askService.saveUserParam(paramReqVO); + public String saveUserParam(@RequestBody List paramList) { + return askService.saveUserParam(paramList); } - @ApiOperation("查询多轮对话中用户需要填写的参数") + @ApiOperation("查询多轮对话中用户需要填写的参数以及回答的码表") @GetMapping("queryUserNeedParam") - public RoleSetResVO queryUserNeedParam(String sessionId) { - return askService.queryUserNeedParam(sessionId); + public Map, List>> queryUserNeedParam() { + return askService.queryUserNeedParam(); } } diff --git a/kbqa-graph/src/main/java/com/supervision/dto/roundAsk/SessionParamDTO.java b/kbqa-graph/src/main/java/com/supervision/dto/roundAsk/SessionParamDTO.java index eb7c811..c21423c 100644 --- a/kbqa-graph/src/main/java/com/supervision/dto/roundAsk/SessionParamDTO.java +++ b/kbqa-graph/src/main/java/com/supervision/dto/roundAsk/SessionParamDTO.java @@ -21,6 +21,11 @@ public class SessionParamDTO { */ private String sessionId; + /** + * 角色设置ID + */ + private String roleSetId; + /** * 意图名称 */ diff --git a/kbqa-graph/src/main/java/com/supervision/enums/RetireRoleEnum.java b/kbqa-graph/src/main/java/com/supervision/enums/RetireRoleEnum.java index 324583e..eb05727 100644 --- a/kbqa-graph/src/main/java/com/supervision/enums/RetireRoleEnum.java +++ b/kbqa-graph/src/main/java/com/supervision/enums/RetireRoleEnum.java @@ -1,39 +1,33 @@ package com.supervision.enums; -public enum RetireRoleEnum { +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.lang.Pair; - sex("sex", "性别", null), - job("job", "职业", null), - age("age", "年龄", EntityQuestionEnum.年龄), - residentLocation("residentLocation", "户口所在地", EntityQuestionEnum.户口所在地), - offsiteSocialSecurityInfo("offsiteSocialSecurityInfo", "异地社保转入情况", null), - lastInsuredPlace("lastInsuredPlace", "最后参保地", null), - pensionPaymentPeriod("pensionPaymentPeriod", "养老缴费年限", EntityQuestionEnum.缴费年限); +import java.util.List; - private final String code; +public enum RetireRoleEnum { - private final String name; + sex("性别", ListUtil.list(false, Pair.of(0, "男"), Pair.of(1, "女"))), + age("年龄", ListUtil.list(false, Pair.of(0, "年满60岁"), Pair.of(1, "未满60岁"))), + socialSecurityType("退休类型", ListUtil.list(false, Pair.of(0, "城乡居民"), Pair.of(1, "企业职工"))), + residentLocation("户口所在地", ListUtil.list(false, Pair.of(0, "深圳户口"), Pair.of(1, "港澳台和外籍人员"), Pair.of(2, "广东省其他地区"), Pair.of(3, "省外户口"))), + offsiteSocialSecurityInfo("异地社保转入情况", ListUtil.list(false, Pair.of(0, "无异地社保"), Pair.of(1, "已转入"), Pair.of(2, "未转入"))), + pensionPaymentPeriod("缴费年限", ListUtil.list(false, Pair.of(0, "实际缴费年限+视同缴费年限满15年"), Pair.of(1, "实际缴费年限+视同缴费年限未满15年"))); - /** - * 关联的实体类型 - */ - private final EntityQuestionEnum entityEnum; + private final String zhName; - RetireRoleEnum(String code, String name, EntityQuestionEnum entityEnum) { - this.code = code; - this.name = name; - this.entityEnum = entityEnum; - } + private final List> answerList; - public String getCode() { - return code; + RetireRoleEnum(String zhName, List> answerList) { + this.zhName = zhName; + this.answerList = answerList; } - public String getName() { - return name; + public String getZhName() { + return zhName; } - public EntityQuestionEnum getEntityEnum() { - return entityEnum; + public List> getAnswerList() { + return answerList; } } diff --git a/kbqa-graph/src/main/java/com/supervision/service/AskService.java b/kbqa-graph/src/main/java/com/supervision/service/AskService.java index 62c5c2f..a92ae4b 100644 --- a/kbqa-graph/src/main/java/com/supervision/service/AskService.java +++ b/kbqa-graph/src/main/java/com/supervision/service/AskService.java @@ -1,8 +1,11 @@ package com.supervision.service; +import cn.hutool.core.lang.Pair; import com.supervision.vo.*; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; +import java.util.Map; import java.util.Set; public interface AskService { @@ -11,7 +14,7 @@ public interface AskService { SingleTalkResVO singleTalk(SingleTalkReqVO singleTalkReqVO); - void saveUserParam(RoleSetReqVO paramReqVO); + String saveUserParam(List paramList); - RoleSetResVO queryUserNeedParam(String sessionId); + Map, List>> queryUserNeedParam(); } diff --git a/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java b/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java index 4a82104..f670b16 100644 --- a/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java +++ b/kbqa-graph/src/main/java/com/supervision/service/impl/AskServiceImpl.java @@ -2,8 +2,12 @@ package com.supervision.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Pair; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.supervision.dto.roundAsk.EntityQuestionDTO; import com.supervision.dto.roundAsk.SessionParamDTO; import com.supervision.enums.EntityQuestionEnum; @@ -24,6 +28,7 @@ import com.supervision.service.AskService; import com.supervision.vo.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -370,19 +375,25 @@ public class AskServiceImpl implements AskService { */ private void filterUserRoleSet(SessionParamDTO sessionParamDTO) { // 再获取用户填写的缓存 - Object userParamObject = redisTemplate.opsForValue().get(USER_PARAM + sessionParamDTO.getSessionId()); + Object userParamObject = redisTemplate.opsForValue().get(USER_PARAM + sessionParamDTO.getRoleSetId()); if (ObjectUtil.isNotEmpty(userParamObject)) { - Map stringObjectMap = BeanUtil.beanToMap(userParamObject, false, true); - for (Map.Entry entry : stringObjectMap.entrySet()) { - String key = entry.getKey(); - // 去枚举里面去找 - RetireRoleEnum roleEnum = Arrays.stream(RetireRoleEnum.values()).filter(e -> e.getCode().equals(key)).findFirst().orElseThrow(() -> new BusinessException("未找到的参数")); - // 如果匹配的实体不为空,就去校验是否存在该实体一致的判断对象 - if (null != roleEnum.getEntityEnum()) { + List list = JSONUtil.toList(JSONUtil.toJsonStr(userParamObject), RoleSetNode.class); + for (RoleSetNode roleSetNode : list) { + // 根据编码找到枚举值 + RetireRoleEnum retireRoleEnum = RetireRoleEnum.valueOf(roleSetNode.getItemEn()); + if (ObjectUtils.isNotEmpty(retireRoleEnum)) { + Map entityCountMap = sessionParamDTO.getEntityCountMap(); + // 如果包含,就去尝试排除路径 - if (entityCountMap.containsKey(roleEnum.getEntityEnum().getEntityType())) { - filterPath(sessionParamDTO, String.valueOf(entry.getValue())); + if (entityCountMap.containsKey(retireRoleEnum.getZhName()) && ObjectUtil.isNotEmpty(roleSetNode.getValueNum())) { + List> answerList = retireRoleEnum.getAnswerList(); + for (Pair pair : answerList) { + // 如果枚举的key和用户填写的value相等,就排除 + if (pair.getKey().equals(roleSetNode.getValueNum())) { + filterPath(sessionParamDTO, pair.getValue()); + } + } } } } @@ -397,21 +408,20 @@ public class AskServiceImpl implements AskService { } @Override - public void saveUserParam(RoleSetReqVO paramReqVO) { + public String saveUserParam(List paramList) { + String roleSetId = UUID.randomUUID().toString(); // 缓存到Redis中 - if (CollUtil.isNotEmpty(paramReqVO.getParamMap()) && StrUtil.isNotBlank(paramReqVO.getSessionId())) { - redisTemplate.opsForValue().set(USER_PARAM + paramReqVO.getSessionId(), paramReqVO.getParamMap()); - + if (CollUtil.isNotEmpty(paramList)) { + redisTemplate.opsForValue().set(USER_PARAM + roleSetId, paramList); + } else { + throw new BusinessException("参数填写不能为空"); } + return roleSetId; } @Override - public RoleSetResVO queryUserNeedParam(String sessionId) { + public Map, List>> queryUserNeedParam() { // 暂时是写死的退休的事项列表,后面再调整优化根据事项修改逻辑 - List itemList = Arrays.stream(RetireRoleEnum.values()).map(RetireRoleEnum::getCode).collect(Collectors.toList()); - RoleSetResVO roleSetResVO = new RoleSetResVO(); - roleSetResVO.setSessionId(sessionId); - roleSetResVO.setParam(itemList); - return roleSetResVO; + return Arrays.stream(RetireRoleEnum.values()).collect(Collectors.toMap(e -> Pair.of(e.name(), e.getZhName()), RetireRoleEnum::getAnswerList)); } } diff --git a/kbqa-graph/src/main/java/com/supervision/vo/RoleSetNode.java b/kbqa-graph/src/main/java/com/supervision/vo/RoleSetNode.java new file mode 100644 index 0000000..4d2c7fa --- /dev/null +++ b/kbqa-graph/src/main/java/com/supervision/vo/RoleSetNode.java @@ -0,0 +1,14 @@ +package com.supervision.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class RoleSetNode { + + @ApiModelProperty("项目的英文名") + private String itemEn; + + @ApiModelProperty("值的编码数值") + private Integer valueNum; +} diff --git a/kbqa-graph/src/main/java/com/supervision/vo/RoleSetReqVO.java b/kbqa-graph/src/main/java/com/supervision/vo/RoleSetReqVO.java index 1e6cbe3..be37906 100644 --- a/kbqa-graph/src/main/java/com/supervision/vo/RoleSetReqVO.java +++ b/kbqa-graph/src/main/java/com/supervision/vo/RoleSetReqVO.java @@ -1,5 +1,6 @@ package com.supervision.vo; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @@ -9,12 +10,10 @@ import java.util.Map; public class RoleSetReqVO { - private String sessionId; + private String roleSetId; - /** - * 用户填写的内容,key是该项code,value是用户填写的内容 - */ - private Map paramMap; + @ApiModelProperty("用户填写的数据") + private List paramList; } diff --git a/kbqa-graph/src/main/java/com/supervision/vo/RoundTalkReqVO.java b/kbqa-graph/src/main/java/com/supervision/vo/RoundTalkReqVO.java index 829422d..b0f443f 100644 --- a/kbqa-graph/src/main/java/com/supervision/vo/RoundTalkReqVO.java +++ b/kbqa-graph/src/main/java/com/supervision/vo/RoundTalkReqVO.java @@ -7,6 +7,8 @@ public class RoundTalkReqVO { private String sessionId; + private String roleSetId; + private String userTalk; }