diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/feign/AccountApi.java b/im-center-api/src/main/java/cn/axzo/im/center/api/feign/AccountApi.java index 628e2d3..c994b0d 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/feign/AccountApi.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/feign/AccountApi.java @@ -27,15 +27,17 @@ public interface AccountApi { * @param userAccountReq 生成云信账户参数 * @return 返回云信IM账户 */ - @PostMapping("api/im/user/account/generate") + @PostMapping("api/im/account/user/generate") ApiResult 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 generateRobotAccount(@RequestBody @Validated RobotAccountReq robotAccountReq); } diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/feign/MessageApi.java b/im-center-api/src/main/java/cn/axzo/im/center/api/feign/MessageApi.java index 8b026ff..870283c 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/feign/MessageApi.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/feign/MessageApi.java @@ -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 sendMessage(@RequestBody @Validated MessageInfo messageInfo); + ApiResult sendMessage(@RequestBody @Validated MessageInfo messageInfo); } diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/feign/RobotInfoApi.java b/im-center-api/src/main/java/cn/axzo/im/center/api/feign/RobotInfoApi.java index 7fec0a9..b447eab 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/feign/RobotInfoApi.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/feign/RobotInfoApi.java @@ -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") diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/MessageInfo.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/MessageInfo.java index 13eef3f..6619785 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/MessageInfo.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/MessageInfo.java @@ -17,7 +17,7 @@ import java.util.Map; public class MessageInfo { /** - * 发送消息到端 + * 发送消息到App端 * 工人端、企业端、ALL * WORKER、ENTERPRISE、ALL */ diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotAccountReq.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotAccountReq.java index 90ff70c..befc3e5 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotAccountReq.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotAccountReq.java @@ -21,6 +21,11 @@ public class RobotAccountReq { @NotNull(message = "robotId不能为空") private String robotId; + /** + * 机器人名称 + */ + private String nickName; + /** * 机器人头像链接 */ diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagReq.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagReq.java index e025048..1939956 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagReq.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagReq.java @@ -33,7 +33,7 @@ public class RobotTagReq { /** * 机器人Tag排序权重 - * 新增默认1 + * 新增时默认1 */ private Integer weight = 1; diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UpdateRobotTagReq.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UpdateRobotTagReq.java index e01e450..221d31f 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UpdateRobotTagReq.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UpdateRobotTagReq.java @@ -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; /** diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UserAccountReq.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UserAccountReq.java index 66eec15..aa0812c 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UserAccountReq.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/UserAccountReq.java @@ -30,6 +30,11 @@ public class UserAccountReq { @NotNull(message = "userId不能为空") private String userId; + /** + * 用户昵称 + */ + private String nickName; + /** * 用户头像链接 */ diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/resp/UserAccountResp.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/resp/UserAccountResp.java index 5027e9e..d41a08b 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/resp/UserAccountResp.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/resp/UserAccountResp.java @@ -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云信账户 diff --git a/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 8e3beb3..734dc20 100644 --- a/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -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 diff --git a/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 7454427..51e3df8 100644 --- a/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/im-center-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -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 diff --git a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.java b/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.java new file mode 100644 index 0000000..4d4bf10 --- /dev/null +++ b/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.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; + } + +} diff --git a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AppTypeEnum.java b/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AppTypeEnum.java index 39cd85a..4aab1df 100644 --- a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AppTypeEnum.java +++ b/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AppTypeEnum.java @@ -14,7 +14,9 @@ import lombok.Getter; public enum AppTypeEnum { WORKER("worker", "工人端"), - ENTERPRISE("enterprise", "企业端"); + ENTERPRISE("enterprise", "企业端"), + + SYSTEM("system", "服务器"); private String code; diff --git a/im-center-common/target/classes/cn/axzo/maokai/common/enums/ApprovalStatusEnum.class b/im-center-common/target/classes/cn/axzo/maokai/common/enums/ApprovalStatusEnum.class deleted file mode 100644 index c13a360..0000000 Binary files a/im-center-common/target/classes/cn/axzo/maokai/common/enums/ApprovalStatusEnum.class and /dev/null differ diff --git a/im-center-common/target/classes/cn/axzo/maokai/common/enums/KeyWordTypeEnum.class b/im-center-common/target/classes/cn/axzo/maokai/common/enums/KeyWordTypeEnum.class deleted file mode 100644 index dbc91c9..0000000 Binary files a/im-center-common/target/classes/cn/axzo/maokai/common/enums/KeyWordTypeEnum.class and /dev/null differ diff --git a/im-center-common/target/classes/cn/axzo/maokai/common/enums/MainBodyTypeEnum.class b/im-center-common/target/classes/cn/axzo/maokai/common/enums/MainBodyTypeEnum.class deleted file mode 100644 index 39e23b4..0000000 Binary files a/im-center-common/target/classes/cn/axzo/maokai/common/enums/MainBodyTypeEnum.class and /dev/null differ diff --git a/im-center-common/target/classes/cn/axzo/maokai/common/enums/QualificationsTypeEnum.class b/im-center-common/target/classes/cn/axzo/maokai/common/enums/QualificationsTypeEnum.class deleted file mode 100644 index 9c42c69..0000000 Binary files a/im-center-common/target/classes/cn/axzo/maokai/common/enums/QualificationsTypeEnum.class and /dev/null differ diff --git a/im-center-common/target/classes/cn/axzo/maokai/common/enums/RegisterTypeEnum.class b/im-center-common/target/classes/cn/axzo/maokai/common/enums/RegisterTypeEnum.class deleted file mode 100644 index 5de2921..0000000 Binary files a/im-center-common/target/classes/cn/axzo/maokai/common/enums/RegisterTypeEnum.class and /dev/null differ diff --git a/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index aeb131d..740c52f 100644 --- a/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -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 diff --git a/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 930943c..98f1422 100644 --- a/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/im-center-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -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 diff --git a/im-center-server/src/main/java/cn/axzo/im/controller/AccountController.java b/im-center-server/src/main/java/cn/axzo/im/controller/AccountController.java new file mode 100644 index 0000000..463ff05 --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/controller/AccountController.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 generateAccount(UserAccountReq userAccountReq) { + UserAccountResp userAccountResp = accountService.generateAccount(userAccountReq); + return ApiResult.ok(userAccountResp); + } + + @Override + public ApiResult generateRobotAccount(RobotAccountReq robotAccountReq) { + UserAccountResp userAccountResp = accountService.generateRobotAccount(robotAccountReq); + return ApiResult.ok(userAccountResp); + } +} diff --git a/im-center-server/src/main/java/cn/axzo/im/dao/mapper/AccountRegisterMapper.java b/im-center-server/src/main/java/cn/axzo/im/dao/mapper/AccountRegisterMapper.java new file mode 100644 index 0000000..26da0ee --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/dao/mapper/AccountRegisterMapper.java @@ -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; + +/** + *

+ * 三方人员同步表 Mapper 接口 + *

+ * + * @author ZhanSiHu + * @since 2023-09-25 + */ +public interface AccountRegisterMapper extends BaseMapper { + +} + diff --git a/im-center-server/src/main/java/cn/axzo/im/dao/repository/AccountRegisterDao.java b/im-center-server/src/main/java/cn/axzo/im/dao/repository/AccountRegisterDao.java new file mode 100644 index 0000000..313c804 --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/dao/repository/AccountRegisterDao.java @@ -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 { + +} diff --git a/im-center-server/src/main/java/cn/axzo/im/entity/AccountRegister.java b/im-center-server/src/main/java/cn/axzo/im/entity/AccountRegister.java new file mode 100644 index 0000000..2c30b95 --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/entity/AccountRegister.java @@ -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 { + + 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; +} diff --git a/im-center-server/src/main/java/cn/axzo/im/entity/RobotInfo.java b/im-center-server/src/main/java/cn/axzo/im/entity/RobotInfo.java index 1f306d3..c0e88ca 100644 --- a/im-center-server/src/main/java/cn/axzo/im/entity/RobotInfo.java +++ b/im-center-server/src/main/java/cn/axzo/im/entity/RobotInfo.java @@ -17,7 +17,7 @@ import java.util.List; */ @Getter @Setter -@TableName("robot_info") +@TableName("im_robot_info") public class RobotInfo extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/im-center-server/src/main/java/cn/axzo/im/entity/RobotTag.java b/im-center-server/src/main/java/cn/axzo/im/entity/RobotTag.java index def4788..54fe187 100644 --- a/im-center-server/src/main/java/cn/axzo/im/entity/RobotTag.java +++ b/im-center-server/src/main/java/cn/axzo/im/entity/RobotTag.java @@ -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) diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/AppKeyUtil.java b/im-center-server/src/main/java/cn/axzo/im/nim/AppKeyUtil.java index 9850f65..78965b3 100644 --- a/im-center-server/src/main/java/cn/axzo/im/nim/AppKeyUtil.java +++ b/im-center-server/src/main/java/cn/axzo/im/nim/AppKeyUtil.java @@ -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; } } diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/Message.aj b/im-center-server/src/main/java/cn/axzo/im/nim/NimMessage.aj similarity index 98% rename from im-center-server/src/main/java/cn/axzo/im/nim/Message.aj rename to im-center-server/src/main/java/cn/axzo/im/nim/NimMessage.aj index 187e49f..4eaa9b4 100644 --- a/im-center-server/src/main/java/cn/axzo/im/nim/Message.aj +++ b/im-center-server/src/main/java/cn/axzo/im/nim/NimMessage.aj @@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull; * @date 2023/10/10 18:38 */ @Data -public class Message { +public class NimMessage { /** * AppKey 唯一标识 diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/NimService.java b/im-center-server/src/main/java/cn/axzo/im/nim/NimService.java index 0db3811..ae1e9b5 100644 --- a/im-center-server/src/main/java/cn/axzo/im/nim/NimService.java +++ b/im-center-server/src/main/java/cn/axzo/im/nim/NimService.java @@ -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 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 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 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 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 paramMap = new HashMap<>(); paramMap.put("accid", register.getAccid()); paramMap.put("icon", register.getIcon()); paramMap.put("name", register.getName()); - String appKey = "9e1160e993e2249dc054bfb2c9dcb422"; - Map authHeaderMap = buildAuthHeader(appKey); + Map 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(); } /** diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/dto/AccountRegisterResponse.java b/im-center-server/src/main/java/cn/axzo/im/nim/dto/AccountRegisterResponse.java new file mode 100644 index 0000000..71c4ab5 --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/nim/dto/AccountRegisterResponse.java @@ -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; +} diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/dto/UserAccount.java b/im-center-server/src/main/java/cn/axzo/im/nim/dto/UserAccount.java new file mode 100644 index 0000000..ae2ca0d --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/nim/dto/UserAccount.java @@ -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; + + +} diff --git a/im-center-server/src/main/java/cn/axzo/im/service/AccountService.java b/im-center-server/src/main/java/cn/axzo/im/service/AccountService.java new file mode 100644 index 0000000..ed3ee69 --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/service/AccountService.java @@ -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; + } +} diff --git a/im-center-server/src/test/java/cn/axzo/maokai/test/OURegisterQueryTest.java b/im-center-server/src/test/java/cn/axzo/maokai/test/OURegisterQueryTest.java deleted file mode 100644 index 6fb269e..0000000 --- a/im-center-server/src/test/java/cn/axzo/maokai/test/OURegisterQueryTest.java +++ /dev/null @@ -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 result = ouRegisterQueryService.pageQueryRegisterHistory(request); - System.out.println(JSON.toJSONString(result)); - - } - - @Test - public void testGetDetail() { - Long registerId = 1123L; - ApiResult result = organizationalUnitRegisterController.detail(registerId); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testGetQualityApply() { - Long id = 110L; - ApiResult result = organizationalUnitRegisterController.getQualificationsApplyById(id); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testListQualificationByOUId() { - Long ouId = 5785L; - ApiResult> result = organizationalUnitRegisterController.listQualificationsApplyByOUId(ouId); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testGetPersonInChargeByOuId() { - Long ouId = 5402L; - ApiResult result = organizationalUnitRegisterController.getPersonInChargeByOuId(ouId); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testGetOURegisterDetailByOUId() { - Long ouId = 5785L; - ApiResult result = organizationalUnitRegisterController.getOURegisterDetailByOUId(ouId); - System.out.println(JSON.toJSONString(result)); - } -} diff --git a/pom.xml b/pom.xml index 820ead3..48b85e3 100644 --- a/pom.xml +++ b/pom.xml @@ -46,18 +46,18 @@ import - cn.axzo.maokai - maokai-api + cn.axzo.im.center + im-center-api ${project.version} - cn.axzo.maokai - maokai-common + cn.axzo.im.center + im-center-common ${project.version} - cn.axzo.maokai - maokai-server + cn.axzo.im.center + im-center-server ${project.version} diff --git a/sql/init.sql b/sql/init.sql index ffbeba0..72083a5 100644 --- a/sql/init.sql +++ b/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);