From c55af6343952d322f18c18713576f5581b545ada Mon Sep 17 00:00:00 2001 From: zuoqinbo Date: Wed, 11 Oct 2023 17:21:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/im/center/api/feign/AccountApi.java | 8 +- .../axzo/im/center/api/feign/MessageApi.java | 5 +- .../im/center/api/feign/RobotInfoApi.java | 7 +- .../im/center/api/vo/req/MessageInfo.java | 2 +- .../im/center/api/vo/req/RobotAccountReq.java | 5 + .../im/center/api/vo/req/RobotTagReq.java | 2 +- .../center/api/vo/req/UpdateRobotTagReq.java | 7 +- .../im/center/api/vo/req/UserAccountReq.java | 5 + .../center/api/vo/resp/UserAccountResp.java | 6 +- .../compile/default-compile/createdFiles.lst | 21 ++-- .../compile/default-compile/inputFiles.lst | 7 +- .../maokai/common/enums/AccountTypeEnum.java | 27 +++++ .../axzo/maokai/common/enums/AppTypeEnum.java | 4 +- .../common/enums/ApprovalStatusEnum.class | Bin 2821 -> 0 bytes .../maokai/common/enums/KeyWordTypeEnum.class | Bin 3292 -> 0 bytes .../common/enums/MainBodyTypeEnum.class | Bin 2183 -> 0 bytes .../common/enums/QualificationsTypeEnum.class | Bin 3788 -> 0 bytes .../common/enums/RegisterTypeEnum.class | Bin 2478 -> 0 bytes .../compile/default-compile/createdFiles.lst | 7 +- .../compile/default-compile/inputFiles.lst | 6 +- .../axzo/im/controller/AccountController.java | 47 ++++++++ .../im/dao/mapper/AccountRegisterMapper.java | 18 +++ .../im/dao/repository/AccountRegisterDao.java | 26 ++++ .../cn/axzo/im/entity/AccountRegister.java | 68 +++++++++++ .../java/cn/axzo/im/entity/RobotInfo.java | 2 +- .../main/java/cn/axzo/im/entity/RobotTag.java | 2 +- .../main/java/cn/axzo/im/nim/AppKeyUtil.java | 11 +- .../axzo/im/nim/{Message.aj => NimMessage.aj} | 2 +- .../main/java/cn/axzo/im/nim/NimService.java | 74 +++++++----- .../im/nim/dto/AccountRegisterResponse.java | 17 +++ .../java/cn/axzo/im/nim/dto/UserAccount.java | 30 +++++ .../cn/axzo/im/service/AccountService.java | 113 ++++++++++++++++++ .../axzo/maokai/test/OURegisterQueryTest.java | 89 -------------- pom.xml | 12 +- sql/init.sql | 16 +++ 35 files changed, 468 insertions(+), 178 deletions(-) create mode 100644 im-center-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.java delete mode 100644 im-center-common/target/classes/cn/axzo/maokai/common/enums/ApprovalStatusEnum.class delete mode 100644 im-center-common/target/classes/cn/axzo/maokai/common/enums/KeyWordTypeEnum.class delete mode 100644 im-center-common/target/classes/cn/axzo/maokai/common/enums/MainBodyTypeEnum.class delete mode 100644 im-center-common/target/classes/cn/axzo/maokai/common/enums/QualificationsTypeEnum.class delete mode 100644 im-center-common/target/classes/cn/axzo/maokai/common/enums/RegisterTypeEnum.class create mode 100644 im-center-server/src/main/java/cn/axzo/im/controller/AccountController.java create mode 100644 im-center-server/src/main/java/cn/axzo/im/dao/mapper/AccountRegisterMapper.java create mode 100644 im-center-server/src/main/java/cn/axzo/im/dao/repository/AccountRegisterDao.java create mode 100644 im-center-server/src/main/java/cn/axzo/im/entity/AccountRegister.java rename im-center-server/src/main/java/cn/axzo/im/nim/{Message.aj => NimMessage.aj} (98%) create mode 100644 im-center-server/src/main/java/cn/axzo/im/nim/dto/AccountRegisterResponse.java create mode 100644 im-center-server/src/main/java/cn/axzo/im/nim/dto/UserAccount.java create mode 100644 im-center-server/src/main/java/cn/axzo/im/service/AccountService.java delete mode 100644 im-center-server/src/test/java/cn/axzo/maokai/test/OURegisterQueryTest.java 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 c13a360140a563ae545cef59d5f37f0da11f2539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2821 zcmb_d-BS}+6#p&RBuiX0L=o`|R8$Da`hi-3su9p)16m_kw5?sjf(ywmCL3$}WM?|l zhrT&|X=gh97(0EcRs3S=)cV$${u6zv7XO1j)&9;VO8DplZIf{CJ?EZt?)m-BxtCx6 z`tcEfb`&b1;&cRW;7k}s7^w&va8{IqG7QOZPIPZ-7>-alAHfB@C9Ah(ct^t)(OlH< zuE?f1jA+=VA+2FlBuhi1hA|D}B3;t3U4yM*LZrzsG73W7iGl9kq=Mbav}2f8KX8q# z=}wxqk#@6L*D)-okj)#3si~ZM#muBU(<|hAsq0jrB?f!?&h`zQP@wzEi)VU|52kt* zM2h0+L@K2qNWX%mV0CiBykZ&|(-}AV9M2lJatu;;rr>yX)*7<&_DIG`IF8FRY}d&v zFp^Bd7%|;d04dH z@-Dffr_CHiGE6wyxaIk5DyV5{F3Vu9!m4-4re&CxJwDxQ<{7>uJW7M^`J9KkY{&Kv zE9hSWT;CF>m8nW`7i*e_*r1Kl*NsJ3RYk$gjoOaMJ5iak#~t>0j*vUb4}O7Zam>XU zIVI$|MZ`Ooic-$jOA=Juv$AYHUbOUNzd7X>APlNjdF}#sw61if#803}&O26?hTMv- z<(B_2`#zF#3%Rs)+?MvLU3~G|<=Gutz(;P>c!2cpIrar;TIH(`%iA%p1u36j>a;RXV*TT{rO`F_h7ncrDMD7ubg|e zgi{68bBah@`OdOZm5N{94{{Ry)|UH~%=-M! zvMv|Q3~yCUxkc%`=JVp&S03+0=N{d|m%oAkezc=?LLb1HO!+hE@MprNMNH}g1x;K> zP=RL7abM4p`7^5qMAu6zP_E>crK87QN?SS0Co&D?J}Mp~aElV3KaL@PPwd;VpOMAB zowImEVrqN_!N*X=zG9yJ0c!N36%P72yh2S-!NF@1`VcxeN-%@71PjLRBD65hI?Tlh zqSME!NS`g?9A4*6gNAD}Y6>mEY!I`tmH z@w(tWXt%jnWMnOZTyLXwBUZ3Yt68gBR!fk@Sz*Q~A(NHVG2rW@a>ZS#T@b=wO%RDF zaEyOD5aoT0@;XM*&8-Ubut>c)&Xw?bhqENu5&s3DSmf3WRwP^cTOS<`98hc2P2XTk zYmK_MBUl$C@A3Q4KSO0*@II<;eWWViJ^zg^^bYt%-3pCsNwx)Hp16W-RL{z__)XNt z0`K$TG|;}D&3J-^63`t!9MImNrBwPgYU`kepHmkMqc4mAe+nC5)1M`b?2#R`s>I3v zjAi9NVmUx82Z`kn^XOpCoy5|`3(-OCk^dcwhS!lSb={XdRX*=MggP8s6$s2A8mo>~ zKS1mbR{P2|YBVC+n%G)jTkC7r1*2<3TNhjJYd84XjiKmf(Qb-u_O$66qSQ|P7@%zhPW=rp9(R=h 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 dbc91c9e5b08933dfc4e734098ddf0fe91668bee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3292 zcmb7GTT>KQ5dH@C&Zx_ZC~A=4Vz>z7HHm^3KnUn^iK`gY#2j`99GIQK*;y2G)7*_Q znrKyC@}7sJDhWm;Sf+eV z8p1dWCs^lv2=yUo{5l!J))1!nRSzK^LWWVDO(i4DDWNGT zGm|k5MKyAnta419J!M+y6SLE54++{Olph`HlHeci8yY0*aQ~5WgC_^NdXAH9M(8WG%r#&osQFicz6nrUPuC<$_^j0rQNrOlj@ znH{4q*=aqORm75>!U2r13qsrOSd5FTty-5dx-uzJQ(21Iqkfe31$AFq&88&8Jdq`B zOEV@2Di|N>Oq}dVN@zP%A{PNCV@hC0V^gWNzHT#3WUWbPhB}zbjH%WMLA+2r4(QOh zgwDnn<83N2#8|>i34KIZ8l$@|e1^!7r|5ucpEuLP!lEq^Nr{9fRJ&`I%PpbH>%LIP zQvHVr(5Zrib&XA)dh*PGj6^cuR3Up|OW*?N$?hVZS++PIRBXYHx zMkGYy+}iOx1*`HKYH`gFI_00#CJbTcEXu#p>!uKHam<)5GGl2GUt%x5Lqc~^`%+F@ z(`gA39o0}rN_TTFZ{!>fdBWgh(NR)Y9Hg#~B+Zr z1qm%B1TJG2EE#Q3g2>9Sk)vkoGEF;cTVgujb=frm%tUdKmP=90%D9a8f_PuX2l!CN zN4OHiRT&@S6B!NICZicGG7jQX8T+t5h|gqvj*IN*3kiWIKi+jr;6B%=;5vuN)7 z#}7$V&%5x`YuBItu=wQWeHmL>AU|9D>G6Yy&wjb;$l@$py*##v11W(b`QF)mWJY0XNgpt)Sw1@Rp@NtotTZkign-!N3m z={l8s{_Ty_#mk?wK4GMFH5<#Q*3OTerC|3Btk{QF)ME2$csS{>PP zJ@X+IDw~&aEqxB3l|CGf0-f}0K$I?+D7qZz?r4P1sLSyITFXctZkflL=6OVac9fRu zo2RonujJCnW$LAfB*zogqahkaFL?^#4fMJE+@ZkvPk#X4Xsoi_w}4n|?R`|;#X3h+ z?enu}y(8M-h-&;)=vZu{BiiJMHV1+%ddU&h1|Jew`5e|IM}2eHkR0{TVN-H6Fo)XY zT}Vt`zB#KMdc#;t&AyH3+ea;zp!j?)3;j4sx@9IS~WH>kl0+H-rJB$`KX H3UB=jD%?ju 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 39e23b4581e8f2ab3bca054e96cb7488bc7a53d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2183 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 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);