SpringBoot整合ES一个完整的upsert操作

SpringBoot整合ES一个完整的upsert操作

Controller层

  @RequestMapping(value = "addAuthTypeForRobot")
    public Response addAuthType(@RequestBody AuthType authType) {
        return zhwdUserService.addAuthTypeForRobot(authType);
    }

service业务层

/**
     * 用户开放问答权限给机器人
     *
     * @param authType
     * @return
     */
    public Response addAuthTypeForRobot(AuthType authType) {
        if (ObjectUtils.isEmpty(authType)) {
            return new Response(ResCode.CODE_106, ResCode.MSG_106);
        }
        if (StringUtils.isEmpty(authType.getUserId()) || StringUtils.isEmpty(authType.getRobotId())) {
            return new Response(ResCode.CODE_107, ResCode.MSG_107);
        }
        return addAuthType(authType);
    }

    public Response addAuthType(AuthType authType) {
        try {
            Document document = MongoDBService.findUserIdByOpenId(authType.getUserId());
            if (document == null) {
                throw new Exception("get userId from mongoDB error.");
            }
            String userName = document.get("username").toString().replaceAll("[^\u4E00-\u9FA5]", "");
            ZhwdUser zhwdUser = getZhwdUserFromEs(authType, userName);
            if (null == zhwdUser) {
                return new Response(ResCode.CODE_104, ResCode.MSG_104);
            }
            IndexRequest updateRequest = new IndexRequest();
            HashMap updateMap = new HashMap();
            updateMap.put("authType", zhwdUser.getAuthType());
            updateRequest.source(updateMap);
            UpdateQuery updateQuery = new UpdateQueryBuilder()
                    .withIndexName(Constants.ZHWD_USER)
                    .withType(Constants.ZHWD_USER_TYPE)
                    .withId(zhwdUser.getId())
                    .withClass(ZhwdUser.class)
                    .withIndexRequest(updateRequest)
                    .build();
            elasticsearchOperations.update(updateQuery);
            elasticsearchOperations.refresh(ZhwdUser.class);
            return new Response(ResCode.CODE_108, ResCode.MSG_108);
        } catch (Exception e) {
            LOGGER.error("update user type error!", e);
            return new Response(ResCode.CODE_101, ResCode.MSG_101);
        }
    }

    public ZhwdUser getZhwdUserFromEs(AuthType param, String userName) {
        ZhwdUser zhwduser = new ZhwdUser();
        String userId = param.getUserId();
        String robotId = param.getRobotId();
        boolean auth = param.isAuthType();
        String authType;
        //设置要添加的权限
        if (auth) {
            authType = robotId + ":" + 1;
        } else {
            authType = robotId + ":" + 0;
        }
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().
                must(QueryBuilders.termQuery("userId", userId)).
                must(QueryBuilders.termQuery("userName", userName));
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withIndices(Constants.ZHWD_USER)
                .withTypes(Constants.ZHWD_USER_TYPE)
                .withQuery(boolQueryBuilder)
                .build();
        List<ZhwdUser> zhwdUserList = elasticsearchOperations.queryForList(searchQuery, ZhwdUser.class);
        if (CollectionUtil.isNotEmpty(zhwdUserList)) {
            zhwduser = zhwdUserList.get(0);
            //获得原来的权限列表
            List<String> sourcesAuthTypeList = zhwduser.getAuthType();
            //更新后的权限列表
            List<String> targetAuthTypeList = new ArrayList<>();
            if (CollectionUtil.isNotEmpty(sourcesAuthTypeList)) {
                //是否添加新的权限设置标记,默认是添加
                boolean flag = true;
                for (String authElement : sourcesAuthTypeList) {
                    if (StringUtils.equals(authElement.split(":")[0], robotId)) {
                        //如果传过来的问答授权机器人已经存在就不需要再做下一步添加权限设置,直接更新就好
                        flag = false;
                        targetAuthTypeList.add(authType);
                    } else {
                        //权限列表
                        targetAuthTypeList.add(authElement);
                    }
                }
                //如果原来的权限列表不包含要设置的问答权限,则添加问答权限
                if(flag){
                    targetAuthTypeList.add(authType);
                }
            } else {
                targetAuthTypeList = new ArrayList<>();
                targetAuthTypeList.add(authType);
            }
            zhwduser.setAuthType(targetAuthTypeList);
            LOGGER.info(String.format("User Exist!"));
        } else {
            //用户不存在创建用户
            List<String> authTypeList = new ArrayList<>();
            zhwduser.setUserId(userId);
            zhwduser.setUserName(userName);
            zhwduser.setScore(0);
            zhwduser.setType(new ArrayList<>());
            zhwduser.setAnswerArea("ALL");
            zhwduser.setAuthType(authTypeList);
        }
        return zhwduser;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值