feat:用户注册接口实现

This commit is contained in:
zuoqinbo 2023-10-11 17:21:50 +08:00
parent dbcc776b18
commit c55af63439
35 changed files with 468 additions and 178 deletions

View File

@ -27,15 +27,17 @@ public interface AccountApi {
* @param userAccountReq 生成云信账户参数
* @return 返回云信IM账户
*/
@PostMapping("api/im/user/account/generate")
@PostMapping("api/im/account/user/generate")
ApiResult<UserAccountResp> generateAccount(@RequestBody @Validated UserAccountReq userAccountReq);
/**
* 生成机器人网易云信IM账户,机器人只有一个PC端不需要appType来区分
* 机器人生成网易云信IM账户
* 机器人通过PC端创建IM账户不需要appType来区分
*
* @param robotAccountReq 生成云信账户参数
* @return 返回云信IM账户
*/
@PostMapping("api/im/robot/account/generate")
@PostMapping("api/im/account/robot/generate")
ApiResult<UserAccountResp> generateRobotAccount(@RequestBody @Validated RobotAccountReq robotAccountReq);
}

View File

@ -2,6 +2,7 @@ package cn.axzo.im.center.api.feign;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.im.center.api.vo.req.MessageInfo;
import cn.axzo.im.center.api.vo.resp.MessageResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@ -21,9 +22,9 @@ public interface MessageApi {
* 发送消息
*
* @param messageInfo 消息请求参数
* @return 机器人成功创建信息
* @return 消息响应
*/
@PostMapping("api/im/message/dispatch")
ApiResult<MessageInfo> sendMessage(@RequestBody @Validated MessageInfo messageInfo);
ApiResult<MessageResp> sendMessage(@RequestBody @Validated MessageInfo messageInfo);
}

View File

@ -55,7 +55,8 @@ public interface RobotInfoApi {
/**
* OMS-PC端-查询机器人列表
* PC端-查询机器人列表
* 支持分页
* @param robotPageQuery 机器人查询条件
* @return 机器人列表信息
*/
@ -65,7 +66,9 @@ public interface RobotInfoApi {
/**
* Mobile移动端-查询所有运行中的机器人列表
* Mobile移动端-查询当前所有运行中的机器人列表
* 暂定
* 包含模板信息标签信息
* @return 所有机器人的列表信息包含标签以及消息模板信息
*/
@GetMapping("api/im/robot/msgTemplate/list")

View File

@ -17,7 +17,7 @@ import java.util.Map;
public class MessageInfo {
/**
* 发送消息到
* 发送消息到App
* 工人端企业端ALL
* WORKERENTERPRISEALL
*/

View File

@ -21,6 +21,11 @@ public class RobotAccountReq {
@NotNull(message = "robotId不能为空")
private String robotId;
/**
* 机器人名称
*/
private String nickName;
/**
* 机器人头像链接
*/

View File

@ -33,7 +33,7 @@ public class RobotTagReq {
/**
* 机器人Tag排序权重
* 新增默认1
* 新增默认1
*/
private Integer weight = 1;

View File

@ -7,7 +7,8 @@ import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
/**
* 机器人标签创建请求
* 机器人标签更新
* 可选择具体字段进行更新
*
* @version V1.0
* @author zuoqinbo
@ -23,9 +24,9 @@ import javax.validation.constraints.NotNull;
public class UpdateRobotTagReq {
/**
* 机器人TagID
* 机器人tagId
*/
@NotNull(message = "机器人TagID不能为空")
@NotNull(message = "机器人tagId不能为空")
private Long id;
/**

View File

@ -30,6 +30,11 @@ public class UserAccountReq {
@NotNull(message = "userId不能为空")
private String userId;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户头像链接
*/

View File

@ -1,20 +1,22 @@
package cn.axzo.im.center.api.vo.resp;
import lombok.Builder;
import lombok.Data;
/**
* 机器人页面显示信息
* IM账户信息
*
* @version V1.0
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@Data
@Builder
public class UserAccountResp {
/**
* 用户userId
*/
private Integer userId;
private String userId;
/**
* 机器人IM云信账户

View File

@ -1,23 +1,22 @@
cn\axzo\im\center\api\feign\RobotTagApi.class
cn\axzo\im\center\api\vo\req\RobotTagQuery.class
cn\axzo\im\center\api\vo\req\RobotInfoReq.class
cn\axzo\im\center\api\vo\req\UpdateRobotInfoReq.class
cn\axzo\im\center\api\vo\req\UserAccountReq.class
cn\axzo\im\center\api\vo\req\UpdateRobotTagReq$UpdateRobotTagReqBuilder.class
cn\axzo\im\center\api\vo\resp\RobotInfoResp.class
cn\axzo\im\center\api\vo\req\RobotTagReq$RobotTagReqBuilder.class
cn\axzo\im\center\api\vo\req\RobotTagQuery$RobotTagQueryBuilder.class
cn\axzo\im\center\api\AppTypeEnum.class
cn\axzo\im\center\api\vo\req\MessageInfo.class
cn\axzo\im\center\api\vo\resp\UserAccountResp.class
cn\axzo\im\center\api\vo\resp\MessageTemplateResp.class
cn\axzo\im\center\api\vo\resp\MessageResp.class
cn\axzo\im\center\api\vo\req\RobotTagQuery.class
cn\axzo\im\center\api\vo\req\RobotAccountReq.class
cn\axzo\im\center\api\vo\resp\RobotMsgTemplateResp.class
cn\axzo\im\center\api\feign\AccountApi.class
cn\axzo\im\center\api\vo\req\UpdateRobotTagReq.class
cn\axzo\im\center\api\vo\req\UpdateRobotTagReq$UpdateRobotTagReqBuilder.class
cn\axzo\im\center\api\vo\resp\RobotTagResp.class
cn\axzo\im\center\api\vo\req\RobotQuery.class
cn\axzo\im\center\api\vo\resp\RobotInfoResp.class
cn\axzo\im\center\api\vo\req\RobotTagReq$RobotTagReqBuilder.class
cn\axzo\im\center\api\vo\req\RobotTagReq.class
cn\axzo\im\center\api\vo\req\RobotTagQuery$RobotTagQueryBuilder.class
cn\axzo\im\center\api\feign\RobotInfoApi.class
cn\axzo\im\center\api\vo\req\MessageInfo.class
cn\axzo\im\center\api\vo\req\RobotPageQuery.class
cn\axzo\im\center\api\vo\resp\UserAccountResp.class
cn\axzo\im\center\api\feign\MessageApi.class
cn\axzo\im\center\api\vo\resp\MessageTemplateResp.class
cn\axzo\im\center\api\vo\resp\MessageResp.class

View File

@ -1,22 +1,17 @@
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\nim\CheckSumUtil.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotQuery.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\feign\AccountApi.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\feign\RobotTagApi.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\feign\MessageApi.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\AppTypeEnum.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\resp\UserAccountResp.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotAccountReq.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\nim\NimService.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\UserAccountReq.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\resp\MessageTemplateResp.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotTagReq.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\resp\RobotTagResp.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotInfoReq.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\UpdateRobotTagReq.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\nim\AppKeyUtil.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\MessageInfo.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\feign\RobotInfoApi.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\nim\Register.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotPageQuery.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotTagQuery.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\resp\MessageResp.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\resp\RobotInfoResp.java

View File

@ -0,0 +1,27 @@
package cn.axzo.maokai.common.enums;
import lombok.Getter;
/**
* IM账户类型
*
* @version V1.0
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@Getter
public enum AccountTypeEnum {
ROBOT("robot", "机器人"),
USER("user", "普通用户");
private String code;
private String message;
AccountTypeEnum(String code, String message) {
this.code = code;
}
}

View File

@ -14,7 +14,9 @@ import lombok.Getter;
public enum AppTypeEnum {
WORKER("worker", "工人端"),
ENTERPRISE("enterprise", "企业端");
ENTERPRISE("enterprise", "企业端"),
SYSTEM("system", "服务器");
private String code;

View File

@ -1,6 +1,3 @@
cn\axzo\maokai\common\enums\KeyWordTypeEnum.class
cn\axzo\maokai\common\enums\ApprovalStatusEnum.class
cn\axzo\maokai\common\enums\MainBodyTypeEnum.class
cn\axzo\maokai\common\enums\RegisterTypeEnum.class
cn\axzo\maokai\common\enums\QualificationsTypeEnum.class
cn\axzo\maokai\common\enums\AccountTypeEnum.class
cn\axzo\maokai\common\enums\AppTypeEnum.class
cn\axzo\maokai\common\enums\RobotStatusEnum.class

View File

@ -1,7 +1,3 @@
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\RegisterTypeEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\ApprovalStatusEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\QualificationsTypeEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\AppTypeEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\RobotStatusEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\KeyWordTypeEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\enums\MainBodyTypeEnum.java
D:\im-center\im-center-common\src\main\java\cn\axzo\maokai\common\package-info.java

View File

@ -0,0 +1,47 @@
package cn.axzo.im.controller;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.im.center.api.feign.AccountApi;
import cn.axzo.im.center.api.feign.RobotInfoApi;
import cn.axzo.im.center.api.vo.req.*;
import cn.axzo.im.center.api.vo.resp.RobotInfoResp;
import cn.axzo.im.center.api.vo.resp.RobotMsgTemplateResp;
import cn.axzo.im.center.api.vo.resp.UserAccountResp;
import cn.axzo.im.service.AccountService;
import cn.axzo.im.service.RobotInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* IM账户相关设计
*
* @author zuoqinbo
* @version V1.0
* @date 2023/10/11 11:42
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class AccountController implements AccountApi {
@Resource
private AccountService accountService;
@Override
public ApiResult<UserAccountResp> generateAccount(UserAccountReq userAccountReq) {
UserAccountResp userAccountResp = accountService.generateAccount(userAccountReq);
return ApiResult.ok(userAccountResp);
}
@Override
public ApiResult<UserAccountResp> generateRobotAccount(RobotAccountReq robotAccountReq) {
UserAccountResp userAccountResp = accountService.generateRobotAccount(robotAccountReq);
return ApiResult.ok(userAccountResp);
}
}

View File

@ -0,0 +1,18 @@
package cn.axzo.im.dao.mapper;
import cn.axzo.im.entity.AccountRegister;
import cn.axzo.im.entity.RobotInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 三方人员同步表 Mapper 接口
* </p>
*
* @author ZhanSiHu
* @since 2023-09-25
*/
public interface AccountRegisterMapper extends BaseMapper<AccountRegister> {
}

View File

@ -0,0 +1,26 @@
package cn.axzo.im.dao.repository;
import cn.axzo.im.center.api.vo.req.RobotPageQuery;
import cn.axzo.im.dao.mapper.AccountRegisterMapper;
import cn.axzo.im.dao.mapper.RobotInfoMapper;
import cn.axzo.im.entity.AccountRegister;
import cn.axzo.im.entity.RobotInfo;
import cn.axzo.im.enums.RobotStatus;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* im
*
* @author zuoqinbo
* @version V1.0
* @date 2023/10/10 10:06
*/
@Service
public class AccountRegisterDao extends ServiceImpl<AccountRegisterMapper, AccountRegister> {
}

View File

@ -0,0 +1,68 @@
package cn.axzo.im.entity;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* im
*
* @version V1.0
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@Getter
@Setter
@TableName("im_account_register")
public class AccountRegister extends BaseEntity<AccountRegister> {
private static final long serialVersionUID = 1L;
/**
* 账户 机器人robotId普通用户userId
*/
@TableField("account_id")
private String accountId;
/**
* 普通用户账户需要根据不同appType来进行包装
* 包装以后进行账户注册
*/
@TableField("account_wrapper")
private String accountWrapper;
/**
* IM账户
*/
@TableField("im_account")
private String imAccount;
/**
* 终端类型
* @see cn.axzo.maokai.common.enums.AppTypeEnum
*/
@TableField("app_type")
private String appType;
/**
* 网易云信appKey
*/
@TableField("app_key")
private String appKey;
/**
* 账户类型 机器人普通用户
*/
@TableField("account_type")
private String accountType;
/**
* IM注册 token
*/
@TableField("token")
private String token;
}

View File

@ -17,7 +17,7 @@ import java.util.List;
*/
@Getter
@Setter
@TableName("robot_info")
@TableName("im_robot_info")
public class RobotInfo extends BaseEntity<RobotInfo> {
private static final long serialVersionUID = 1L;

View File

@ -18,7 +18,7 @@ import java.io.Serializable;
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@TableName("robot_tag")
@TableName("im_robot_tag")
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)

View File

@ -1,11 +1,13 @@
package cn.axzo.im.nim;
import cn.axzo.im.nim.dto.UserAccount;
import cn.axzo.maokai.common.enums.AppTypeEnum;
import javax.annotation.Resource;
/**
* im-center
* IM证书管理
* 引入配置中心
*
* @author zuoqinbo
* @version V1.0
@ -14,10 +16,9 @@ import javax.annotation.Resource;
@Resource
public class AppKeyUtil {
private static final String APP_KEY = "70c18b713812ae6e8038142f24c99f48";
public static String generateAccount(String sourceAccount, AppTypeEnum appType ){
Register register = new Register();
String account = NimService.registerAccount(register);
return account;
public static String getAppKey() {
return APP_KEY;
}
}

View File

@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull;
* @date 2023/10/10 18:38
*/
@Data
public class Message {
public class NimMessage {
/**
* AppKey 唯一标识

View File

@ -1,10 +1,14 @@
package cn.axzo.im.nim;
import cn.axzo.im.nim.dto.AccountRegisterResponse;
import cn.axzo.im.nim.dto.UserAccount;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@ -26,51 +30,55 @@ public class NimService {
private static final int SUCCESS_CODE = 200;
public static String sendMessage(Message message) {
if(message == null){
}
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("from", message.getFrom());
paramMap.put("from", message.getFrom());
paramMap.put("body", message.getBody());
paramMap.put("ope", message.getOpe());
paramMap.put("to", message.getTo());
paramMap.put("type", message.getType());
String appKey = "9e1160e993e2249dc054bfb2c9dcb422";
Map<String, String> authHeaderMap = buildAuthHeader(appKey);
HttpResponse response = HttpRequest.post(NIM_MESSAGE_DISPATCH_URL).addHeaders(authHeaderMap)
.form(paramMap).timeout(5000).execute();
if (response.getStatus() == SUCCESS_CODE) {
} else {
}
String result = response.body();
return result;
}
// public static String sendMessage(@Valid NimMessage messageInfo) {
// if(messageInfo == null){
//
// }
// HashMap<String, Object> paramMap = new HashMap<>();
// paramMap.put("from", messageInfo.getFrom());
// paramMap.put("from", messageInfo.getFrom());
// paramMap.put("body", messageInfo.getBody());
// paramMap.put("ope", messageInfo.getOpe());
// paramMap.put("to", messageInfo.getTo());
// paramMap.put("type", messageInfo.getType());
// String appKey = "9e1160e993e2249dc054bfb2c9dcb422";
// Map<String, String> authHeaderMap = buildAuthHeader(appKey);
// HttpResponse response = HttpRequest.post(NIM_MESSAGE_DISPATCH_URL).addHeaders(authHeaderMap)
// .form(paramMap).timeout(5000).execute();
// if (response.getStatus() == SUCCESS_CODE) {
//
// } else {
//
// }
// String result = response.body();
// return result;
// }
/**
*
* @param register
* @return
*/
public static String registerAccount(Register register) {
public static UserAccount registerAccount(@Valid Register register) {
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("accid", register.getAccid());
paramMap.put("icon", register.getIcon());
paramMap.put("name", register.getName());
String appKey = "9e1160e993e2249dc054bfb2c9dcb422";
Map<String, String> authHeaderMap = buildAuthHeader(appKey);
Map<String, String> authHeaderMap = buildAuthHeader(register.getAppKey());
HttpResponse response = HttpRequest.post(NIM_ACCOUNT_CREATE_URL).addHeaders(authHeaderMap)
.form(paramMap).timeout(5000).execute();
if (response.getStatus() == SUCCESS_CODE) {
} else {
}
String result = response.body();
return result;
if (response.getStatus() == SUCCESS_CODE) {
AccountRegisterResponse userAccount = JSONUtil.toBean(result, AccountRegisterResponse.class);
if (userAccount.getCode() == SUCCESS_CODE) {
return userAccount.getInfo();
} else {
log.error("请求网易云信Server:{},异常desc:{}", NIM_ACCOUNT_CREATE_URL, userAccount.getDesc());
}
} else {
log.error("请求网易云信Server:{},异常:{}", NIM_ACCOUNT_CREATE_URL, result);
;
}
return new UserAccount();
}
/**

View File

@ -0,0 +1,17 @@
package cn.axzo.im.nim.dto;
import lombok.Data;
/**
* im-center
*
* @author zuoqinbo
* @version V1.0
* @date 2023/10/11 17:14
*/
@Data
public class AccountRegisterResponse {
private int code;
private UserAccount info;
private String desc;
}

View File

@ -0,0 +1,30 @@
package cn.axzo.im.nim.dto;
import lombok.Data;
/**
* IM账户信息
*
* @version V1.0
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@Data
public class UserAccount {
/**
* 用户name
*/
private Integer name;
/**
* 机器人IM云信账户
*/
private String accid;
/**
* Token
*/
private String token;
}

View File

@ -0,0 +1,113 @@
package cn.axzo.im.service;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.im.center.api.vo.req.*;
import cn.axzo.im.center.api.vo.resp.RobotInfoResp;
import cn.axzo.im.center.api.vo.resp.RobotMsgTemplateResp;
import cn.axzo.im.center.api.vo.resp.UserAccountResp;
import cn.axzo.im.dao.repository.AccountRegisterDao;
import cn.axzo.im.dao.repository.RobotInfoDao;
import cn.axzo.im.entity.AccountRegister;
import cn.axzo.im.entity.RobotInfo;
import cn.axzo.im.enums.RobotStatus;
import cn.axzo.im.nim.AppKeyUtil;
import cn.axzo.im.nim.NimService;
import cn.axzo.im.nim.Register;
import cn.axzo.im.nim.dto.UserAccount;
import cn.axzo.im.utils.BeanConvertUtils;
import cn.axzo.maokai.common.enums.AccountTypeEnum;
import cn.axzo.maokai.common.enums.AppTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
/**
* IM账户服务
*
* @author zuoqinbo
* @version V1.0
* @date 2023/10/10 10:06
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class AccountService {
@Resource
private AccountRegisterDao accountRegisterDao;
/**
* 普通用户创建IM账户
* 1.检查账户是否已经创建
* 1.1 如果已经创建直接返回
* 2.appType 校验重新拼接注册账户
* 3.调用公共的网易云信IM接口创建
*
* @param userAccountReq
*/
public UserAccountResp generateAccount(@Valid UserAccountReq userAccountReq) {
String appType = userAccountReq.getAppType();
String userIdWrapper = userAccountReq.getUserId() + "_" + appType;
//后续AppKey可能会更换普通用户通过userIdappTypeappKey维度来保证唯一性
//机器人通过robotIdappKey维度来保证唯一性
UserAccountResp userAccountResp = createAccountRegister(userAccountReq.getUserId(),
userIdWrapper, appType, AccountTypeEnum.USER.getCode(),
userAccountReq.getHeadImageUrl(), userAccountReq.getNickName());
return userAccountResp;
}
public UserAccountResp generateRobotAccount(@Valid RobotAccountReq robotAccountReq) {
//机器人通过robotIdappKey维度来保证唯一性
String robotId = robotAccountReq.getRobotId();
UserAccountResp userAccountResp = createAccountRegister(robotId, robotId, AppTypeEnum.SYSTEM.getCode(),
AccountTypeEnum.USER.getCode(), robotAccountReq.getHeadImageUrl(), robotAccountReq.getNickName());
return userAccountResp;
}
public UserAccountResp createAccountRegister(String userId, String userIdWrapper, String appType,
String accountType, String headImageUrl, String nickName) {
AccountRegister accountRegister = accountRegisterDao.lambdaQuery().eq(AccountRegister::getIsDelete, 0)
.eq(AccountRegister::getAccountWrapper, userIdWrapper)
.eq(AccountRegister::getAppKey, AppKeyUtil.getAppKey()).getEntity();
if (accountRegister == null) {
accountRegister = new AccountRegister();
}
if (StringUtils.isBlank(accountRegister.getImAccount())) {
UserAccountResp accountResp = createNimAccount(userIdWrapper, headImageUrl,
nickName, AppKeyUtil.getAppKey());
accountRegister.setImAccount(accountResp.getImAccount());
accountRegister.setToken(accountResp.getToken());
accountRegister.setAppKey(AppKeyUtil.getAppKey());
accountRegister.setAccountId(userId);
accountRegister.setAccountWrapper(userIdWrapper);
accountRegister.setAccountType(accountType);
accountRegister.setAppType(appType);
accountRegisterDao.saveOrUpdate(accountRegister);
}
UserAccountResp userAccountResp = UserAccountResp.builder()
.imAccount(accountRegister.getImAccount())
.userId(userIdWrapper)
.build();
return userAccountResp;
}
private UserAccountResp createNimAccount(String userId, String headImageUrl, String name, String appKey) {
Register register = new Register();
register.setAccid(userId);
register.setIcon(headImageUrl);
register.setName(name);
register.setAppKey(appKey);
UserAccount userAccount = NimService.registerAccount(register);
UserAccountResp userAccountResp = BeanMapper.map(userAccount, UserAccountResp.class);
return userAccountResp;
}
}

View File

@ -1,89 +0,0 @@
package cn.axzo.maokai.test;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.im.center.api.vo.request.OURegisterHistoryPageQueryReq;
import cn.axzo.im.center.api.vo.response.CorpsPersonInChargeRealNameResp;
import cn.axzo.im.center.api.vo.response.OrganizationalUnitApproveListResp;
import cn.axzo.im.center.api.vo.response.OrganizationalUnitRegisterDetailResp;
import cn.axzo.im.center.api.vo.response.QualificationsApplyResp;
import cn.axzo.maokai.controller.OrganizationalUnitRegisterController;
import cn.axzo.maokai.service.OURegisterQueryService;
import com.alibaba.fastjson.JSON;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* @version V1.0
* @author: ZhanSiHu
* @date: 2023/8/11 16:38
*/
@SpringBootTest
public class OURegisterQueryTest {
@Autowired
private OURegisterQueryService ouRegisterQueryService;
@Autowired
private OrganizationalUnitRegisterController organizationalUnitRegisterController;
@Test
public void testPageQuery() {
// String phone = "18188388435";
String phone = "15801642234";
//System.out.println(DataSecurityHelper.decrypt("axzo:crypt:uTt+2KXqpAcraYSm995Awg=="));
OURegisterHistoryPageQueryReq request = new OURegisterHistoryPageQueryReq();
request.setPhone(phone);
request.setPage(1L);
request.setPageSize(10L);
//request.setNameLike("一智");
//request.setNameEquals("一智");
//request.setApprovalStatus(Arrays.asList(20));
//request.setRegisterType(2);
//request.setMainBodyType(1);
PageResp<OrganizationalUnitApproveListResp> result = ouRegisterQueryService.pageQueryRegisterHistory(request);
System.out.println(JSON.toJSONString(result));
}
@Test
public void testGetDetail() {
Long registerId = 1123L;
ApiResult<OrganizationalUnitRegisterDetailResp> result = organizationalUnitRegisterController.detail(registerId);
System.out.println(JSON.toJSONString(result));
}
@Test
public void testGetQualityApply() {
Long id = 110L;
ApiResult<QualificationsApplyResp> result = organizationalUnitRegisterController.getQualificationsApplyById(id);
System.out.println(JSON.toJSONString(result));
}
@Test
public void testListQualificationByOUId() {
Long ouId = 5785L;
ApiResult<List<QualificationsApplyResp>> result = organizationalUnitRegisterController.listQualificationsApplyByOUId(ouId);
System.out.println(JSON.toJSONString(result));
}
@Test
public void testGetPersonInChargeByOuId() {
Long ouId = 5402L;
ApiResult<CorpsPersonInChargeRealNameResp> result = organizationalUnitRegisterController.getPersonInChargeByOuId(ouId);
System.out.println(JSON.toJSONString(result));
}
@Test
public void testGetOURegisterDetailByOUId() {
Long ouId = 5785L;
ApiResult<OrganizationalUnitRegisterDetailResp> result = organizationalUnitRegisterController.getOURegisterDetailByOUId(ouId);
System.out.println(JSON.toJSONString(result));
}
}

12
pom.xml
View File

@ -46,18 +46,18 @@
<scope>import</scope>
</dependency>
<dependency>
<groupId>cn.axzo.maokai</groupId>
<artifactId>maokai-api</artifactId>
<groupId>cn.axzo.im.center</groupId>
<artifactId>im-center-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>cn.axzo.maokai</groupId>
<artifactId>maokai-common</artifactId>
<groupId>cn.axzo.im.center</groupId>
<artifactId>im-center-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>cn.axzo.maokai</groupId>
<artifactId>maokai-server</artifactId>
<groupId>cn.axzo.im.center</groupId>
<artifactId>im-center-server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>

View File

@ -27,3 +27,19 @@ CREATE TABLE IF NOT EXISTS im_robot_info(
create index idx_im_robot_info
on im_robot_info (nick_name,im_account,status);
CREATE TABLE IF NOT EXISTS im_account_info(
id bigint auto_increment comment '主键' ,
user_id varchar(100) not null comment '用户ID、机器人ID' unique,
app_type varchar(512) default '' not null comment 'App终端类型',
im_account varchar(100) default '' not null comment '机器人IM账号',
is_delete tinyint default 0 not null comment '未删除0,删除id',
create_at datetime default CURRENT_TIMESTAMP not null comment '创建时间',
update_at datetime default CURRENT_TIMESTAMP not null comment '更新时间',
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8 comment '机器人信息表';
create index idx_im_account_info
on im_account_info (user_id,im_account);