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 c994b0d..6792320 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 @@ -1,6 +1,7 @@ package cn.axzo.im.center.api.feign; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.im.center.api.vo.req.AccountQuery; import cn.axzo.im.center.api.vo.req.RobotAccountReq; import cn.axzo.im.center.api.vo.req.UserAccountReq; import cn.axzo.im.center.api.vo.resp.UserAccountResp; @@ -9,32 +10,45 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; + /** * 机器人管理API * - * @version V1.0 * @author zuoqinbo + * @version V1.0 * @date 2023/10/9 16:01 */ -@FeignClient(name = "im", url = "${axzo.service.im:http://im:8080}") +@FeignClient(name = "im-center", url = "${axzo.service.im-center:http://im:8080}") public interface AccountApi { /** * 普通用户生成网易云信IM账户 * 因多终端场景,同一个普通用户会申请多个云信账户,用于不同的app终端 * 例如工人端一个IM账户,企业端一个IM账户,根据不同的appType来区分 - * @param userAccountReq 生成云信账户参数 + * + * @param userAccountReq 生成云信账户参数 * @return 返回云信IM账户 */ @PostMapping("api/im/account/user/generate") ApiResult generateAccount(@RequestBody @Validated UserAccountReq userAccountReq); + /** + * 查询注册账户信息 + * + * @param accountQuery 账户查询条件 + * @return 返回云信IM账户 + */ + @PostMapping("api/im/account/register/query") + ApiResult> queryRegisterAccountInfo(@RequestBody @Validated AccountQuery accountQuery); + + /** * 机器人生成网易云信IM账户 * 机器人通过PC端创建IM账户,不需要appType来区分 * - * @param robotAccountReq 生成云信账户参数 + * @param robotAccountReq 生成云信账户参数 * @return 返回云信IM账户 */ @PostMapping("api/im/account/robot/generate") diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/AccountQuery.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/AccountQuery.java new file mode 100644 index 0000000..0fca611 --- /dev/null +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/AccountQuery.java @@ -0,0 +1,39 @@ +package cn.axzo.im.center.api.vo.req; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Map; + +/** + * 查询账户信息 + * + * @author zuoqinbo + * @version V1.0 + * @date 2023/10/9 16:01 + */ +@Data +public class AccountQuery { + + /** + * 消息应用端 + * 工人端、企业端、服务器 + * WORKER、ENTERPRISE、SYSTEM + */ + @NotNull(message = "消息应用端不能为空") + private String appType; + + + /** + * 注册用户ID唯一 + * 普通用户userId、机器人robotId + */ + @NotNull(message = "注册ID不能为空") + private String accountId; + + /** + * 注册用户ID唯一 + */ + private String imAccount; + +} diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotInfoReq.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotInfoReq.java index 0afad39..50df0b6 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotInfoReq.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotInfoReq.java @@ -1,5 +1,6 @@ package cn.axzo.im.center.api.vo.req; +import cn.axzo.im.center.common.enums.RobotStatusEnum; import lombok.Data; import javax.validation.constraints.NotNull; @@ -36,7 +37,7 @@ public class RobotInfoReq { /** * 机器人状态 - * @see cn.axzo.maokai.common.enums.RobotStatusEnum + * @see RobotStatusEnum */ private String status = "creating"; diff --git a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagQuery.java b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagQuery.java index c46dc04..fc91663 100644 --- a/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagQuery.java +++ b/im-center-api/src/main/java/cn/axzo/im/center/api/vo/req/RobotTagQuery.java @@ -22,14 +22,16 @@ public class RobotTagQuery extends PageRequest { /** * 机器人Tag名称 + * 支持模糊查询 */ private String tagName; /** - * 机器人状态 + * 机器人Tag状态 + * 0:下架 、1:上架 */ - private String status; + private Integer status; } 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 aa0812c..9396bb9 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 @@ -16,18 +16,18 @@ import java.util.Map; public class UserAccountReq { /** - * 发送消息到端 - * 工人端、企业端、ALL - * WORKER、ENTERPRISE、ALL + * 消息应用端 + * 工人端、企业端、服务器 + * WORKER、ENTERPRISE、SYSTEM */ - @NotNull(message = "消息接收端类型") + @NotNull(message = "消息应用端不能为空") private String appType; /** - * 用户userId 唯一 + * 注册用户ID唯一 */ - @NotNull(message = "userId不能为空") + @NotNull(message = "注册用户ID不能为空") private String userId; /** 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 d41a08b..aa4785c 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 @@ -29,4 +29,10 @@ public class UserAccountResp { private String token; + /** + * 注册不成功,返回网易云信描述信息 + */ + private String desc; + + } diff --git a/im-center-api/src/main/resources/META-INF/spring.factories b/im-center-api/src/main/resources/META-INF/spring.factories index f190f92..4fb7b7d 100644 --- a/im-center-api/src/main/resources/META-INF/spring.factories +++ b/im-center-api/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -cn.axzo.im.center.api.config.MaoKaiApiAutoConfiguration \ No newline at end of file +#org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +#cn.axzo.im.center.api.config.MaoKaiApiAutoConfiguration \ No newline at end of file diff --git a/im-center-api/target/classes/META-INF/spring.factories b/im-center-api/target/classes/META-INF/spring.factories index f190f92..4fb7b7d 100644 --- a/im-center-api/target/classes/META-INF/spring.factories +++ b/im-center-api/target/classes/META-INF/spring.factories @@ -1,2 +1,2 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -cn.axzo.im.center.api.config.MaoKaiApiAutoConfiguration \ No newline at end of file +#org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +#cn.axzo.im.center.api.config.MaoKaiApiAutoConfiguration \ No newline at end of file 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 734dc20..d93427d 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,22 +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\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\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\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-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.java b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/AccountTypeEnum.java similarity index 90% rename from im-center-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.java rename to im-center-common/src/main/java/cn/axzo/im/center/common/enums/AccountTypeEnum.java index 4d4bf10..fae5134 100644 --- a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AccountTypeEnum.java +++ b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/AccountTypeEnum.java @@ -1,4 +1,4 @@ -package cn.axzo.maokai.common.enums; +package cn.axzo.im.center.common.enums; import lombok.Getter; diff --git a/im-center-common/src/main/java/cn/axzo/im/center/common/enums/AppTypeEnum.java b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/AppTypeEnum.java new file mode 100644 index 0000000..3e59759 --- /dev/null +++ b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/AppTypeEnum.java @@ -0,0 +1,43 @@ +package cn.axzo.im.center.common.enums; + +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + + +/** + * App消息应用终端类型 + * + * @author zuoqinbo + * @version V1.0 + * @date 2023/10/9 16:01 + */ +@Getter +public enum AppTypeEnum { + + WORKER("worker", "工人端"), + ENTERPRISE("enterprise", "企业端"), + SYSTEM("system", "服务器"); + + private String code; + + private String message; + + AppTypeEnum(String code, String message) { + this.code = code; + } + + + public static AppTypeEnum isValidAppType(String appType) { + if (StringUtils.isBlank(appType)) { + return null; + } + AppTypeEnum[] appTypeEnums = AppTypeEnum.values(); + for (AppTypeEnum appTypeEnum : appTypeEnums) { + if (appTypeEnum.getCode().equals(appType.toLowerCase())) { + return appTypeEnum; + } + } + return null; + } + +} diff --git a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/RobotStatusEnum.java b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/RobotStatusEnum.java similarity index 92% rename from im-center-common/src/main/java/cn/axzo/maokai/common/enums/RobotStatusEnum.java rename to im-center-common/src/main/java/cn/axzo/im/center/common/enums/RobotStatusEnum.java index 4841ae4..c21f934 100644 --- a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/RobotStatusEnum.java +++ b/im-center-common/src/main/java/cn/axzo/im/center/common/enums/RobotStatusEnum.java @@ -1,4 +1,4 @@ -package cn.axzo.maokai.common.enums; +package cn.axzo.im.center.common.enums; import lombok.Getter; diff --git a/im-center-common/src/main/java/cn/axzo/maokai/common/package-info.java b/im-center-common/src/main/java/cn/axzo/im/center/common/package-info.java similarity index 82% rename from im-center-common/src/main/java/cn/axzo/maokai/common/package-info.java rename to im-center-common/src/main/java/cn/axzo/im/center/common/package-info.java index c329d18..076fe3c 100644 --- a/im-center-common/src/main/java/cn/axzo/maokai/common/package-info.java +++ b/im-center-common/src/main/java/cn/axzo/im/center/common/package-info.java @@ -3,4 +3,4 @@ * @author tanjie@axzo.cn * @date 2023/6/25 18:30 */ -package cn.axzo.maokai.common; \ No newline at end of file +package cn.axzo.im.center.common; \ No newline at end of file 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 deleted file mode 100644 index 4aab1df..0000000 --- a/im-center-common/src/main/java/cn/axzo/maokai/common/enums/AppTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.maokai.common.enums; - -import lombok.Getter; - - -/** - * App终端类型 - * - * @version V1.0 - * @author zuoqinbo - * @date 2023/10/9 16:01 - */ -@Getter -public enum AppTypeEnum { - - WORKER("worker", "工人端"), - ENTERPRISE("enterprise", "企业端"), - - SYSTEM("system", "服务器"); - - private String code; - - private String message; - - AppTypeEnum(String code, String message) { - this.code = code; - } - -} 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 740c52f..e69de29 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,3 +0,0 @@ -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-server/pom.xml b/im-center-server/pom.xml index 2ef6c27..c4e91a1 100644 --- a/im-center-server/pom.xml +++ b/im-center-server/pom.xml @@ -113,7 +113,7 @@ - maokai + im-center src/main/java diff --git a/im-center-server/src/main/java/cn/axzo/im/Application.java b/im-center-server/src/main/java/cn/axzo/im/Application.java index e3ee3f7..d10247b 100644 --- a/im-center-server/src/main/java/cn/axzo/im/Application.java +++ b/im-center-server/src/main/java/cn/axzo/im/Application.java @@ -1,15 +1,25 @@ package cn.axzo.im; +import cn.axzo.framework.data.mybatisplus.config.MybatisPlusAutoConfiguration; +import cn.axzo.trade.theadpool.annotation.EnableTradeTaskExecutor; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Import; import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.EnableAsync; @Slf4j -@MapperScan(value = {"cn.axzo.im.repository.mapper"}) -@SpringBootApplication(scanBasePackages = "cn.axzo") +@SpringBootApplication(scanBasePackages = "cn.axzo", exclude = MybatisPlusAutoConfiguration.class) +@EnableFeignClients(basePackages = { + "cn.axzo.im.center.api", +}) +@MapperScan(value = {"cn.axzo.im.dao.mapper"}) +@EnableDiscoveryClient public class Application { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(Application.class, args); 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 index 463ff05..aea06d3 100644 --- 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 @@ -39,6 +39,12 @@ public class AccountController implements AccountApi { return ApiResult.ok(userAccountResp); } + @Override + public ApiResult> queryRegisterAccountInfo(AccountQuery accountQuery) { + List userAccountList = accountService.queryAccountInfo(accountQuery); + return ApiResult.ok(userAccountList); + } + @Override public ApiResult generateRobotAccount(RobotAccountReq robotAccountReq) { UserAccountResp userAccountResp = accountService.generateRobotAccount(robotAccountReq); 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 index 313c804..f628cef 100644 --- 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 @@ -9,18 +9,19 @@ 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.Repository; import org.springframework.stereotype.Service; import java.util.List; /** - * im + * 账户服务Dao * * @author zuoqinbo * @version V1.0 * @date 2023/10/10 10:06 */ -@Service +@Repository("accountRegisterDao") public class AccountRegisterDao extends ServiceImpl { } diff --git a/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotInfoDao.java b/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotInfoDao.java index 23b47bc..5a9d9a9 100644 --- a/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotInfoDao.java +++ b/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotInfoDao.java @@ -7,18 +7,19 @@ 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.Repository; import org.springframework.stereotype.Service; import java.util.List; /** - * im + * 机器人服务Dao * * @author zuoqinbo * @version V1.0 * @date 2023/10/10 10:06 */ -@Service +@Repository("robotInfoDao") public class RobotInfoDao extends ServiceImpl { /** * 查询机器人标签列表,支持分页查询 diff --git a/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotTagDao.java b/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotTagDao.java index 4df268e..5999265 100644 --- a/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotTagDao.java +++ b/im-center-server/src/main/java/cn/axzo/im/dao/repository/RobotTagDao.java @@ -30,8 +30,7 @@ public class RobotTagDao extends ServiceImpl { .like(StringUtils.isNoneBlank(robotTagQuery.getTagName()), RobotTag::getTagName, robotTagQuery.getTagName()) - .eq(StringUtils.isNoneBlank(robotTagQuery.getStatus()), - RobotTag::getStatus, robotTagQuery.getStatus()) + .eq(RobotTag::getStatus, robotTagQuery.getStatus()) .orderByDesc(RobotTag::getWeight) .page(robotTagQuery.toPage()); return pageOfRobotTag; 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 index 2c30b95..0162a72 100644 --- 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 @@ -1,24 +1,27 @@ package cn.axzo.im.entity; import cn.axzo.framework.data.mybatisplus.model.BaseEntity; +import cn.axzo.im.center.common.enums.AppTypeEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; -import java.util.List; +import java.io.Serializable; /** - * im + * IM账户表 * - * @version V1.0 * @author zuoqinbo + * @version V1.0 * @date 2023/10/9 16:01 */ -@Getter -@Setter @TableName("im_account_register") -public class AccountRegister extends BaseEntity { +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class AccountRegister extends BaseEntity implements Serializable { private static final long serialVersionUID = 1L; @@ -29,7 +32,7 @@ public class AccountRegister extends BaseEntity { private String accountId; /** - * 普通用户账户,需要根据不同appType来进行包装 + * 普通用户,通过appType包装 * 包装以后进行账户注册 */ @TableField("account_wrapper") @@ -43,7 +46,8 @@ public class AccountRegister extends BaseEntity { /** * 终端类型 - * @see cn.axzo.maokai.common.enums.AppTypeEnum + * + * @see AppTypeEnum */ @TableField("app_type") private String appType; @@ -55,7 +59,7 @@ public class AccountRegister extends BaseEntity { @TableField("app_key") private String appKey; /** - * 账户类型 机器人、普通用户 + * 账户类型:机器人、普通用户 */ @TableField("account_type") private String accountType; 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 c0e88ca..d3e6a78 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 @@ -3,9 +3,13 @@ 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.Data; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; +import lombok.experimental.Accessors; +import java.io.Serializable; import java.util.List; /** @@ -15,10 +19,11 @@ import java.util.List; * @author zuoqinbo * @date 2023/10/9 16:01 */ -@Getter -@Setter @TableName("im_robot_info") -public class RobotInfo extends BaseEntity { +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class RobotInfo extends BaseEntity implements Serializable { private static final long serialVersionUID = 1L; diff --git a/im-center-server/src/main/java/cn/axzo/im/exception/ExceptionAdviceHandler.java b/im-center-server/src/main/java/cn/axzo/im/exception/ExceptionAdviceHandler.java new file mode 100644 index 0000000..54cf69e --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/exception/ExceptionAdviceHandler.java @@ -0,0 +1,51 @@ +package cn.axzo.im.exception; + +import cn.axzo.basics.common.exception.ServiceException; +import cn.azxo.framework.common.model.CommonResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.BindException; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.List; + +/** + * Controller异常 + * @author zuoqinbo + * @version V1.0 + * @date 2023/10/11 9:44 + */ + +@Order(value = 0) +@RestControllerAdvice +@Slf4j +public class ExceptionAdviceHandler { + + @ExceptionHandler(ServiceException.class) + public CommonResponse basicsServiceExceptionHandler(ServiceException e) { + log.warn("业务异常", e); + return CommonResponse.fail(e.getMessage()); + } + + @ExceptionHandler(cn.axzo.core.service.ServiceException.class) + public CommonResponse coreServiceExceptionHandler(cn.axzo.core.service.ServiceException e) { + log.warn("业务异常", e); + return CommonResponse.fail(e.getMessage()); + } + + @ExceptionHandler(BindException.class) + public CommonResponse bindExceptionHandler(BindException e) { + log.warn("业务异常", e); + List allErrors = e.getBindingResult().getAllErrors(); + if (CollectionUtils.isEmpty(allErrors)) { + return CommonResponse.fail("操作失败 请联系系统管理员"); + } + ObjectError objectError = allErrors.get(0); + String objectErrorDefaultMessage = objectError.getDefaultMessage(); + return CommonResponse.fail(objectErrorDefaultMessage); + } + +} 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 78965b3..97ef34c 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,12 +1,9 @@ package cn.axzo.im.nim; -import cn.axzo.im.nim.dto.UserAccount; -import cn.axzo.maokai.common.enums.AppTypeEnum; - import javax.annotation.Resource; /** - * IM证书管理 + * 网易云信IM证书管理 * 引入配置中心 * * @author zuoqinbo @@ -17,8 +14,12 @@ import javax.annotation.Resource; public class AppKeyUtil { private static final String APP_KEY = "70c18b713812ae6e8038142f24c99f48"; - + private static final String APP_SECRET = "784adefc4be7"; public static String getAppKey() { return APP_KEY; } + + public static String getAppSecret() { + return APP_SECRET; + } } 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 ae1e9b5..3c0fc46 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,11 +1,16 @@ package cn.axzo.im.nim; -import cn.axzo.im.nim.dto.AccountRegisterResponse; +import cn.axzo.im.nim.dto.RegisterResponse; +import cn.axzo.im.nim.dto.QueryAccountResp; +import cn.axzo.im.nim.dto.RegisterRequest; import cn.axzo.im.nim.dto.UserAccount; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.validation.Valid; @@ -24,12 +29,16 @@ import java.util.UUID; @Slf4j public class NimService { - private static final String NIM_ACCOUNT_CREATE_URL = " https://api.netease.im/nimserver/user/create.action"; + private static final String NIM_ACCOUNT_CREATE_URL = "https://api.netease.im/nimserver/user/create.action"; + + private static final String NIM_ACCOUNT_QUERY_URL = "https://api.netease.im/nimserver/user/getUinfos.action"; private static final String NIM_MESSAGE_DISPATCH_URL = "https://api.netease.im/nimserver/msg/sendMsg.action"; private static final int SUCCESS_CODE = 200; + private static final String NIM_ACCOUNT_ALREADY_REGISTER = "already register"; + // public static String sendMessage(@Valid NimMessage messageInfo) { // if(messageInfo == null){ // @@ -58,27 +67,46 @@ public class NimService { * @param register * @return */ - public static UserAccount registerAccount(@Valid Register register) { + public static RegisterResponse registerAccount(@Valid RegisterRequest register) { HashMap paramMap = new HashMap<>(); paramMap.put("accid", register.getAccid()); paramMap.put("icon", register.getIcon()); paramMap.put("name", register.getName()); - Map authHeaderMap = buildAuthHeader(register.getAppKey()); + Map authHeaderMap = buildAuthHeader(register.getAppKey(), AppKeyUtil.getAppSecret()); HttpResponse response = HttpRequest.post(NIM_ACCOUNT_CREATE_URL).addHeaders(authHeaderMap) .form(paramMap).timeout(5000).execute(); String result = response.body(); 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()); + RegisterResponse registerResponse = JSONUtil.toBean(result, RegisterResponse.class); + if (registerResponse.getCode() != SUCCESS_CODE) { + log.warn("im-center请求网易云信Server:{},返回异常:{}", NIM_ACCOUNT_CREATE_URL, result); + if (StringUtils.isNotBlank(registerResponse.getDesc()) && + registerResponse.getDesc().equals(NIM_ACCOUNT_ALREADY_REGISTER)) { + HashMap queryParamMap = new HashMap<>(); + JSONArray jsonArray = new JSONArray(); + jsonArray.add(register.getAccid()); + jsonArray.toArray(); + queryParamMap.put("accids", jsonArray.toString()); + HttpResponse queryAccountResponse = HttpRequest.post(NIM_ACCOUNT_QUERY_URL).addHeaders(authHeaderMap) + .form(queryParamMap).timeout(5000).execute(); + if (queryAccountResponse.getStatus() == SUCCESS_CODE) { + QueryAccountResp queryInfoResp = JSONUtil.toBean(queryAccountResponse.body(), QueryAccountResp.class); + if (CollectionUtils.isNotEmpty(queryInfoResp.getUinfos())) { + QueryAccountResp.AccountInfo accountInfo = queryInfoResp.getUinfos().get(0); + UserAccount userAccount = new UserAccount(); + userAccount.setAccid(accountInfo.getAccid()); + registerResponse.setInfo(userAccount); + } + + } + } } + + return registerResponse; } else { - log.error("请求网易云信Server:{},异常:{}", NIM_ACCOUNT_CREATE_URL, result); - ; + log.error("im-center请求网易云信Server:{},异常:{}", NIM_ACCOUNT_CREATE_URL, result); } - return new UserAccount(); + return RegisterResponse.builder().desc("请求网易云信Server异常,请联系管理员").build(); } /** @@ -87,10 +115,10 @@ public class NimService { * * @return */ - private static Map buildAuthHeader(String appKey) { + private static Map buildAuthHeader(String appKey, String secret) { String nonce = UUID.randomUUID().toString(); String curTime = String.valueOf(System.currentTimeMillis() / 1000); - String checkSum = CheckSumUtil.getCheckSum(appKey, nonce, curTime); + String checkSum = CheckSumUtil.getCheckSum(secret, nonce, curTime); HashMap commonAuthMap = new HashMap<>(); commonAuthMap.put("AppKey", appKey); commonAuthMap.put("Nonce", nonce); diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/dto/QueryAccountResp.java b/im-center-server/src/main/java/cn/axzo/im/nim/dto/QueryAccountResp.java new file mode 100644 index 0000000..03e7b84 --- /dev/null +++ b/im-center-server/src/main/java/cn/axzo/im/nim/dto/QueryAccountResp.java @@ -0,0 +1,52 @@ +package cn.axzo.im.nim.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * 查询网易云信IM注册用户信息 + * + * @author zuoqinbo + * @version V1.0 + * @date 2023/10/11 17:14 + */ +@Data +@Builder +public class QueryAccountResp { + private int code; + private List uinfos; + + @Getter + @Setter + public class AccountInfo { + + + /** + * 性别 + */ + private boolean valid; + + /** + * 性别 + */ + private int gender; + + + /** + * IM账户信息 + */ + private String accid; + + /** + * mute + */ + private boolean mute; + } + +} + + diff --git a/im-center-server/src/main/java/cn/axzo/im/nim/Register.java b/im-center-server/src/main/java/cn/axzo/im/nim/dto/RegisterRequest.java similarity index 92% rename from im-center-server/src/main/java/cn/axzo/im/nim/Register.java rename to im-center-server/src/main/java/cn/axzo/im/nim/dto/RegisterRequest.java index c082bf0..e0e2e09 100644 --- a/im-center-server/src/main/java/cn/axzo/im/nim/Register.java +++ b/im-center-server/src/main/java/cn/axzo/im/nim/dto/RegisterRequest.java @@ -1,4 +1,4 @@ -package cn.axzo.im.nim; +package cn.axzo.im.nim.dto; import lombok.Data; @@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull; * @date 2023/10/10 18:41 */ @Data -public class Register { +public class RegisterRequest { /** * AppKey 唯一标识 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/RegisterResponse.java similarity index 77% rename from im-center-server/src/main/java/cn/axzo/im/nim/dto/AccountRegisterResponse.java rename to im-center-server/src/main/java/cn/axzo/im/nim/dto/RegisterResponse.java index 71c4ab5..d9e7bb3 100644 --- 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/RegisterResponse.java @@ -1,5 +1,6 @@ package cn.axzo.im.nim.dto; +import lombok.Builder; import lombok.Data; /** @@ -10,7 +11,8 @@ import lombok.Data; * @date 2023/10/11 17:14 */ @Data -public class AccountRegisterResponse { +@Builder +public class RegisterResponse { 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 index ae2ca0d..862a8cb 100644 --- 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 @@ -27,4 +27,10 @@ public class UserAccount { private String token; + /** + * 注册不成功,返回网易云信描述信息 + */ + private String desc; + + } 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 index ed3ee69..1657113 100644 --- 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 @@ -1,32 +1,33 @@ package cn.axzo.im.service; import cn.axzo.basics.common.BeanMapper; -import cn.axzo.framework.domain.page.PageResp; +import cn.axzo.basics.common.exception.ServiceException; 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.RobotTagResp; 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.RegisterResponse; +import cn.axzo.im.nim.dto.RegisterRequest; 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 cn.axzo.im.center.common.enums.AccountTypeEnum; +import cn.axzo.im.center.common.enums.AppTypeEnum; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.Date; import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * IM账户服务 @@ -44,19 +45,19 @@ public class AccountService { private AccountRegisterDao accountRegisterDao; /** - * 普通用户创建IM账户 - * 1.检查账户是否已经创建 - * 1.1 如果已经创建直接返回 - * 2.appType 校验,重新拼接注册账户 - * 3.调用公共的网易云信IM接口创建 + * 创建IM账户 * * @param userAccountReq */ + @Transactional(rollbackFor = Exception.class) public UserAccountResp generateAccount(@Valid UserAccountReq userAccountReq) { String appType = userAccountReq.getAppType(); - String userIdWrapper = userAccountReq.getUserId() + "_" + appType; + AppTypeEnum appTypeEnum = AppTypeEnum.isValidAppType(appType); + if (appTypeEnum == null) { + throw new ServiceException("当前appType,服务器不支持该类型!!"); + } + String userIdWrapper = userAccountReq.getUserId() + "_" + appTypeEnum.getCode(); //后续AppKey可能会更换,普通用户通过userId、appType、appKey维度来保证唯一性 - //机器人通过robotId、appKey维度来保证唯一性 UserAccountResp userAccountResp = createAccountRegister(userAccountReq.getUserId(), userIdWrapper, appType, AccountTypeEnum.USER.getCode(), userAccountReq.getHeadImageUrl(), userAccountReq.getNickName()); @@ -65,49 +66,94 @@ public class AccountService { public UserAccountResp generateRobotAccount(@Valid RobotAccountReq robotAccountReq) { - //机器人通过robotId、appKey维度来保证唯一性 + //后续AppKey可能会更换,机器人通过robotId、appKey维度来保证唯一性 String robotId = robotAccountReq.getRobotId(); UserAccountResp userAccountResp = createAccountRegister(robotId, robotId, AppTypeEnum.SYSTEM.getCode(), - AccountTypeEnum.USER.getCode(), robotAccountReq.getHeadImageUrl(), robotAccountReq.getNickName()); + AccountTypeEnum.ROBOT.getCode(), robotAccountReq.getHeadImageUrl(), robotAccountReq.getNickName()); return userAccountResp; } public UserAccountResp createAccountRegister(String userId, String userIdWrapper, String appType, String accountType, String headImageUrl, String nickName) { + //1.检查账户是否已经创建 AccountRegister accountRegister = accountRegisterDao.lambdaQuery().eq(AccountRegister::getIsDelete, 0) .eq(AccountRegister::getAccountWrapper, userIdWrapper) - .eq(AccountRegister::getAppKey, AppKeyUtil.getAppKey()).getEntity(); + .eq(AccountRegister::getAppKey, AppKeyUtil.getAppKey()).one(); 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); + //2.重新注册账户,如果已注册,就查询该账户信息 + UserAccountResp accountResp = createNimAccount(userIdWrapper, headImageUrl, nickName, AppKeyUtil.getAppKey()); + if (accountResp != null && StringUtils.isNotBlank(accountResp.getImAccount())) { + accountRegister.setImAccount(accountResp.getImAccount()); + accountRegister.setToken(accountResp.getToken()); + accountRegister.setAppKey(AppKeyUtil.getAppKey()); + accountRegister.setAccountId(userId); + accountRegister.setAccountWrapper(userIdWrapper); + accountRegister.setAccountType(accountType); + accountRegister.setAppType(appType); + accountRegister.setCreateAt(new Date()); + accountRegister.setUpdateAt(new Date()); + accountRegisterDao.saveOrUpdate(accountRegister); + } else { + //2.1注册出现异常 + UserAccountResp userAccountResp = UserAccountResp.builder() + .desc(accountResp.getDesc()) + .build(); + return userAccountResp; + } + return accountResp; } + //1.1 如果已经创建直接返回 UserAccountResp userAccountResp = UserAccountResp.builder() .imAccount(accountRegister.getImAccount()) .userId(userIdWrapper) + .token(accountRegister.getToken()) .build(); return userAccountResp; + } - private UserAccountResp createNimAccount(String userId, String headImageUrl, String name, String appKey) { - Register register = new Register(); + RegisterRequest register = new RegisterRequest(); 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; + //3.调用公共的网易云信IM接口创建账户 网易云信只是一种IM实现 + RegisterResponse registerResponse = NimService.registerAccount(register); + if (registerResponse.getInfo() != null) { + UserAccount userAccount = BeanMapper.map(registerResponse.getInfo(), UserAccount.class); + UserAccountResp userAccsountResp = UserAccountResp.builder() + .imAccount(userAccount.getAccid()) + .userId(userId) + .token(userAccount.getToken()) + .build(); + return userAccsountResp; + } + return UserAccountResp.builder().desc(registerResponse.getDesc()).build(); + } + + public List queryAccountInfo(@Valid AccountQuery accountQuery) { + //如果存在多个appKey,一个账户会有多条数据,分别对应不同的appKey + List accountRegisterList = accountRegisterDao.lambdaQuery().eq(AccountRegister::getIsDelete, 0) + .eq(StringUtils.isNoneBlank(accountQuery.getImAccount()), AccountRegister::getImAccount, + accountQuery.getImAccount()) + .eq(StringUtils.isNoneBlank(accountQuery.getAccountId()), AccountRegister::getAccountId, + accountQuery.getAccountId()) + .eq(StringUtils.isNoneBlank(accountQuery.getAppType()), AccountRegister::getAppType, + accountQuery.getAppType()) + .list(); + if (CollectionUtils.isNotEmpty(accountRegisterList)) { + List accountRespList = accountRegisterList.stream().map(accountRegister -> { + UserAccountResp userAccountResp = UserAccountResp.builder() + .userId(accountRegister.getAccountWrapper()) + .imAccount(accountRegister.getImAccount()).build(); + return userAccountResp; + }).collect(Collectors.toList()); + return accountRespList; + } + return null; } } diff --git a/im-center-server/src/main/java/cn/axzo/im/service/RobotInfoService.java b/im-center-server/src/main/java/cn/axzo/im/service/RobotInfoService.java index cea0e11..5484d61 100644 --- a/im-center-server/src/main/java/cn/axzo/im/service/RobotInfoService.java +++ b/im-center-server/src/main/java/cn/axzo/im/service/RobotInfoService.java @@ -15,6 +15,7 @@ import cn.azxo.framework.common.model.CommonResponse; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -36,7 +37,7 @@ public class RobotInfoService { @Resource private RobotInfoDao robotInfoDao; - + @Transactional(rollbackFor = Exception.class) public RobotInfoResp saveRobotInfo(@Valid RobotInfoReq robotInfoRequest) { RobotInfo robotInfo = BeanConvertUtils.copyBean(robotInfoRequest, RobotInfo.class); robotInfo = robotInfoDao.saveOrUpdateRobotInfo(robotInfo); @@ -46,7 +47,7 @@ public class RobotInfoService { } return null; } - + @Transactional(rollbackFor = Exception.class) public RobotInfoResp updateRobotInfo(@Valid UpdateRobotInfoReq updateRobotInfoReq) { RobotInfo robotInfo = BeanConvertUtils.copyBean(updateRobotInfoReq, RobotInfo.class); robotInfo = robotInfoDao.saveOrUpdateRobotInfo(robotInfo); diff --git a/im-center-server/src/main/java/cn/axzo/im/service/RobotTagService.java b/im-center-server/src/main/java/cn/axzo/im/service/RobotTagService.java index 67649f9..b12d87d 100644 --- a/im-center-server/src/main/java/cn/axzo/im/service/RobotTagService.java +++ b/im-center-server/src/main/java/cn/axzo/im/service/RobotTagService.java @@ -13,6 +13,7 @@ import cn.axzo.im.utils.BeanConvertUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -38,7 +39,7 @@ public class RobotTagService { @Resource private RobotInfoDao robotInfoDao; - + @Transactional(rollbackFor = Exception.class) public RobotTagResp saveRobotTag(@Valid RobotTagReq robotTagRequest) { RobotTag robotTag = BeanConvertUtils.copyBean(robotTagRequest, RobotTag.class); robotTag = robotTagDao.saveOrUpdateRobotTag(robotTag); @@ -49,6 +50,7 @@ public class RobotTagService { return null; } + @Transactional(rollbackFor = Exception.class) public RobotTagResp updateRobotTag(@Valid UpdateRobotTagReq updateRobotTagReq) { RobotTag robotTag = BeanConvertUtils.copyBean(updateRobotTagReq, RobotTag.class); robotTag = robotTagDao.saveOrUpdateRobotTag(robotTag); diff --git a/im-center-server/src/main/resources/application.yml b/im-center-server/src/main/resources/application.yml index 1a828a8..405b8d5 100644 --- a/im-center-server/src/main/resources/application.yml +++ b/im-center-server/src/main/resources/application.yml @@ -12,7 +12,7 @@ spring: read-unknown-enum-values-as-null: true mybatis-plus: #枚举扫描,多个package用逗号或者分号分隔 - typeEnumsPackage: cn.axzo.maokai.server.common.enums,cn.axzo.basics.common.constant.enums,cn.axzo.pudge.server.common.enums;cn.axzo.pudge.api.enums;cn.axzo.basics.profiles.common.enums;cn.axzo.basics.auth.enums;cn.axzo.basics.common.constant.enums + typeEnumsPackage: cn.axzo.im.center.common.enums,cn.axzo.basics.common.constant.enums,cn.axzo.pudge.server.common.enums;cn.axzo.pudge.api.enums;cn.axzo.basics.profiles.common.enums;cn.axzo.basics.auth.enums;cn.axzo.basics.common.constant.enums configuration: auto-mapping-behavior: full map-underscore-to-camel-case: true diff --git a/im-center-server/src/main/resources/mapper/OrganizationalJobMapper.xml b/im-center-server/src/main/resources/mapper/OrganizationalJobMapper.xml deleted file mode 100644 index 9f8d8c2..0000000 --- a/im-center-server/src/main/resources/mapper/OrganizationalJobMapper.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/im-center-server/src/main/resources/mapper/OrganizationalNodeMapper.xml b/im-center-server/src/main/resources/mapper/OrganizationalNodeMapper.xml deleted file mode 100644 index 2b48b66..0000000 --- a/im-center-server/src/main/resources/mapper/OrganizationalNodeMapper.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/im-center-server/src/main/resources/mapper/OrganizationalNodeUserMapper.xml b/im-center-server/src/main/resources/mapper/OrganizationalNodeUserMapper.xml deleted file mode 100644 index 84560b7..0000000 --- a/im-center-server/src/main/resources/mapper/OrganizationalNodeUserMapper.xml +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/im-center-server/src/main/resources/mapper/OrganizationalUnitRegisterMapper.xml b/im-center-server/src/main/resources/mapper/OrganizationalUnitRegisterMapper.xml deleted file mode 100644 index dabae35..0000000 --- a/im-center-server/src/main/resources/mapper/OrganizationalUnitRegisterMapper.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/sql/init.sql b/sql/init.sql index 72083a5..3b99b91 100644 --- a/sql/init.sql +++ b/sql/init.sql @@ -1,45 +1,59 @@ -CREATE TABLE IF NOT EXISTS im_robot_tag( - id bigint auto_increment comment '主键' , - tag_name varchar(100) not null comment '机器人Tag名称' unique, - weight int default 1 not null comment '机器人Tag排序权重,最小值是1', - status tinyint default 1 not null comment '机器人Tag状态 1、开启、0关闭', - color varchar(10) default '' not null comment '机器人Tag颜色', - 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 '机器人Tag表'; +CREATE TABLE IF NOT EXISTS im_robot_tag +( + id bigint auto_increment comment '主键', + tag_name varchar(100) not null comment '机器人Tag名称' unique, + weight int default 1 not null comment '机器人Tag排序权重,最小值是1', + status tinyint default 1 not null comment '机器人Tag状态 1、开启、0关闭', + color varchar(10) default '' not null comment '机器人Tag颜色', + 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 '机器人Tag表'; create index idx_im_robot_tag on im_robot_tag (tag_name, status); -CREATE TABLE IF NOT EXISTS im_robot_info( - id bigint auto_increment comment '主键' , - robot_id varchar(100) not null comment '机器人ID' unique, - nick_name varchar(100) not null comment '机器人名称' unique, - status varchar(50) default '' not null comment '机器人状态', - head_image_url varchar(512) default '' not null comment '机器人头像url', - 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 TABLE IF NOT EXISTS im_robot_info +( + id bigint auto_increment comment '主键', + robot_id varchar(100) not null comment '机器人ID' unique, + nick_name varchar(100) not null comment '机器人名称' unique, + status varchar(50) default '' not null comment '机器人状态', + head_image_url varchar(512) default '' not null comment '机器人头像url', + 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_robot_info - on im_robot_info (nick_name,im_account,status); + on im_robot_info (nick_name, im_account, status); +create index idx_im_robot_id + on im_robot_info (robot_id); +CREATE TABLE IF NOT EXISTS im_account_register +( + id bigint auto_increment comment '主键', + account_id varchar(100) not null comment '用户账户:机器人robotId、普通用户userId', + account_wrapper varchar(100) not null comment '普通用户,通过appType包装', + app_key varchar(100) not null comment '网易云信app_key', + im_account varchar(100) default '' not null comment '机器人IM账号', + account_type varchar(20) default '' not null comment '账户类型:机器人、普通用户', + app_type varchar(20) default '' not null comment 'App终端类型:WORKER、ENTERPRISE、SYSTEM', + token varchar(100) default '' not null comment '网易云信token', -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 '机器人信息表'; + 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 'IM注册账户表'; -create index idx_im_account_info - on im_account_info (user_id,im_account); +create index idx_im_account_id + on im_account_register (account_id); +create index idx_im_account_register_id + on im_account_register (im_account); \ No newline at end of file