feat:用户注册接口实现
This commit is contained in:
parent
dbcc776b18
commit
c55af63439
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -17,7 +17,7 @@ import java.util.Map;
|
||||
public class MessageInfo {
|
||||
|
||||
/**
|
||||
* 发送消息到端
|
||||
* 发送消息到App端
|
||||
* 工人端、企业端、ALL
|
||||
* WORKER、ENTERPRISE、ALL
|
||||
*/
|
||||
|
||||
@ -21,6 +21,11 @@ public class RobotAccountReq {
|
||||
@NotNull(message = "robotId不能为空")
|
||||
private String robotId;
|
||||
|
||||
/**
|
||||
* 机器人名称
|
||||
*/
|
||||
private String nickName;
|
||||
|
||||
/**
|
||||
* 机器人头像链接
|
||||
*/
|
||||
|
||||
@ -33,7 +33,7 @@ public class RobotTagReq {
|
||||
|
||||
/**
|
||||
* 机器人Tag排序权重
|
||||
* 新增默认1
|
||||
* 新增时默认1
|
||||
*/
|
||||
private Integer weight = 1;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -30,6 +30,11 @@ public class UserAccountReq {
|
||||
@NotNull(message = "userId不能为空")
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String nickName;
|
||||
|
||||
/**
|
||||
* 用户头像链接
|
||||
*/
|
||||
|
||||
@ -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云信账户
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -14,7 +14,9 @@ import lombok.Getter;
|
||||
public enum AppTypeEnum {
|
||||
|
||||
WORKER("worker", "工人端"),
|
||||
ENTERPRISE("enterprise", "企业端");
|
||||
ENTERPRISE("enterprise", "企业端"),
|
||||
|
||||
SYSTEM("system", "服务器");
|
||||
|
||||
private String code;
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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> {
|
||||
|
||||
}
|
||||
|
||||
@ -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> {
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull;
|
||||
* @date 2023/10/10 18:38
|
||||
*/
|
||||
@Data
|
||||
public class Message {
|
||||
public class NimMessage {
|
||||
|
||||
/**
|
||||
* AppKey 唯一标识
|
||||
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
}
|
||||
@ -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可能会更换,普通用户通过userId、appType、appKey维度来保证唯一性
|
||||
//机器人通过robotId、appKey维度来保证唯一性
|
||||
UserAccountResp userAccountResp = createAccountRegister(userAccountReq.getUserId(),
|
||||
userIdWrapper, appType, AccountTypeEnum.USER.getCode(),
|
||||
userAccountReq.getHeadImageUrl(), userAccountReq.getNickName());
|
||||
return userAccountResp;
|
||||
}
|
||||
|
||||
|
||||
public UserAccountResp generateRobotAccount(@Valid RobotAccountReq robotAccountReq) {
|
||||
//机器人通过robotId、appKey维度来保证唯一性
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -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
12
pom.xml
@ -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>
|
||||
|
||||
16
sql/init.sql
16
sql/init.sql
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user