feat(ai): 简化AI对话项创建逻辑并新增连续对话类型
- 移除复杂的对话项更新逻辑,统一通过add方法创建新项
- 新增AiTalkOutputEnum枚举值CONTEXT_TALK用于AI陪练连续对话
- 更新ApiMemberTalkAnswerSavaDto注释以包含新的对话类型
- 修复对话项创建时类型参数未正确传递的问题
- 优化代码结构,减少冗余的条件判断和数据转换操作
3 files modified
32 ■■■■ changed files
src/main/java/cc/mrbird/febs/ai/enumerates/AiTalkOutputEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/memberTalkStream/ApiMemberTalkAnswerSavaDto.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/enumerates/AiTalkOutputEnum.java
@@ -9,6 +9,8 @@
@Getter
public enum AiTalkOutputEnum {
    CONTEXT_TALK(5,"AI陪练连续对话","CONTEXT_TALK"),
    KEY_KNOWLEDGE(4,"权威参考依据","KEY_KNOWLEDGE"),
    REFERENCE_ANSWER(3,"情境化示例答案","REFERENCE_ANSWER"),
src/main/java/cc/mrbird/febs/ai/req/memberTalkStream/ApiMemberTalkAnswerSavaDto.java
@@ -22,14 +22,8 @@
    @ApiModelProperty(value = "会话ID", example = "10")
    private String memberTalkId;
    @ApiModelProperty(value = "会话ItemID", example = "10")
    private String memberTalkItemId;
    @NotBlank(message = "回复内容不能为空")
    @ApiModelProperty(value = "回复内容", example = "10")
    private String content;
    @NotNull(message = "类型ID不能为空")
    @ApiModelProperty(value = "类型 1:亮点 2:建议 3:参考答案 4:知识点总结", example = "10")
    private Integer type;
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkStreamServiceImpl.java
@@ -446,28 +446,8 @@
        this.updateMemberTalkUpdateTime(aiMemberTalk.getState(),aiMemberTalk.getDoneCnt(),aiMemberTalk.getId(), new Date());
        String companyId = aiMemberTalk.getCompanyId();
        Integer type = dto.getType();
        String memberTalkItemId;
        String contentByCode = AiTalkOutputEnum.HIGH_LIGHT.getCodeByType(type);
        if(StrUtil.isEmpty(dto.getMemberTalkItemId())){
            HashMap<String, String> stringStringHashMap = new HashMap<>();
            stringStringHashMap.put(contentByCode,content);
            AiMemberTalkItem add = aiMemberTalkItemService.add(memberUuid, memberTalkId,companyId, 3, JSONUtil.toJsonStr(stringStringHashMap), new Date());
            memberTalkItemId = add.getId();
        }else{
            memberTalkItemId = dto.getMemberTalkItemId();
            AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.getById(memberTalkItemId);
            String context = aiMemberTalkItem.getContext();
            HashMap<String, String> stringStringHashMap = JSONUtil.toBean(context, HashMap.class);
            stringStringHashMap.put(contentByCode,content);
            aiMemberTalkItemService.update(null,
                    Wrappers.lambdaUpdate(AiMemberTalkItem.class)
                            .set(AiMemberTalkItem::getContext,JSONUtil.toJsonStr(stringStringHashMap))
                            .set(AiMemberTalkItem::getUpdatedTime,new Date())
                            .set(AiMemberTalkItem::getRevision,aiMemberTalkItem.getRevision()+1)
                            .eq(AiMemberTalkItem::getId,memberTalkItemId)
            );
        }
        AiMemberTalkItem add = aiMemberTalkItemService.add(memberUuid, memberTalkId,companyId, 1, content, new Date());
        String memberTalkItemId = add.getId();
        HashMap<String, String> stringStringHashMap = new HashMap<>();
        stringStringHashMap.put("memberTalkItemId",memberTalkItemId);