feat:机器人CRUD接口实现

This commit is contained in:
zuoqinbo 2023-10-12 15:26:54 +08:00
parent 9fcbd3bda5
commit 452de6043c
23 changed files with 228 additions and 112 deletions

View File

@ -24,8 +24,8 @@ import java.util.List;
public interface AccountApi {
/**
* 普通用户生成网易云信IM账户
* 因多终端场景同一个普通用户会申请多个云信账户用于不同的app终端
* 普通用户生成IM账户
* 因多终端场景同一个普通用户会申请多个网易云信账户用于不同的app终端
* 例如工人端一个IM账户企业端一个IM账户,根据不同的appType来区分
*
* @param userAccountReq 生成云信账户参数
@ -38,18 +38,18 @@ public interface AccountApi {
* 查询注册账户信息
*
* @param accountQuery 账户查询条件
* @return 返回云信IM账户
* @return 返回IM账户
*/
@PostMapping("api/im/account/register/query")
ApiResult<List<UserAccountResp>> queryRegisterAccountInfo(@RequestBody @Validated AccountQuery accountQuery);
/**
* 机器人生成网易云信IM账户
* 机器人生成IM账户
* 机器人通过PC端创建IM账户不需要appType来区分
*
* @param robotAccountReq 生成云信账户参数
* @return 返回云信IM账户
* @param robotAccountReq 生成IM账户参数
* @return 返回IM账户
*/
@PostMapping("api/im/account/robot/generate")
ApiResult<UserAccountResp> generateRobotAccount(@RequestBody @Validated RobotAccountReq robotAccountReq);

View File

@ -25,7 +25,7 @@ import java.util.List;
* @date 2023/10/9 16:01
*/
@FeignClient(name = "im-center", url = "${axzo.service.im-center:http://im:8080}")
@FeignClient(name = "im-center", url = "${axzo.service.im-center:http://im-center:8080}")
public interface RobotInfoApi {
/**
@ -60,7 +60,7 @@ public interface RobotInfoApi {
* @param robotPageQuery 机器人查询条件
* @return 机器人列表信息
*/
@GetMapping("api/im/robot/page")
@PostMapping("api/im/robot/page")
ApiPageResult<RobotInfoResp> queryRobotList(@RequestBody RobotPageQuery robotPageQuery);

View File

@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* 机器人标签API
*
@ -59,7 +61,15 @@ public interface RobotTagApi {
* @param robotTagQuery 机器人标签查询条件
* @return 返回机器人标签列表
*/
@GetMapping("api/im/robot/tag/page")
@PostMapping("api/im/robot/tag/page")
ApiPageResult<RobotTagResp> queryRobotTagList(@RequestBody RobotTagQuery robotTagQuery);
/**
* 查询当前所有可用的机器人标签列表
*
* @return 返回机器人标签列表
*/
@GetMapping("api/im/robot/tag/valid")
ApiResult<List<RobotTagResp>> queryRobotTagValidList();
}

View File

@ -25,8 +25,8 @@ public class RobotInfoReq {
/**
* 机器人Tag列表
*/
@NotNull(message = "机器人标签不能为空")
private List<String> tagNameList;
@NotNull(message = "机器人标签ID不能为空")
private List<Long> tagNameList;
/**

View File

@ -18,9 +18,14 @@ public class RobotPageQuery extends PageRequest {
*/
private String nickName;
/**
* 机器人状态
* ("creating", "待生成IM账号"),
* ("un_enable", "待启用"),
* ("enabled", "运行中"),
* ("disabled", "已停用");
*
* @see cn.axzo.im.center.common.enums.RobotStatusEnum
*/
private String status;

View File

@ -27,8 +27,8 @@ public class RobotTagReq {
* 机器人Tag名称
* 对外展示 不允许重复
*/
@NotNull(message = "机器人Tag名称不能为空")
@Length(max = 20, message = "机器人Tag名称最长为20个字符")
@NotNull(message = "机器人标签名称不能为空")
@Length(max = 20, message = "机器人标签名称最长为20个字符")
private String tagName;
/**
@ -48,6 +48,6 @@ public class RobotTagReq {
/**
* 机器人Tag颜色
*/
@NotNull(message = "机器人Tag颜色不能为空")
@NotNull(message = "机器人标签颜色不能为空")
private String color;
}

View File

@ -15,11 +15,13 @@ import java.util.List;
@Data
public class UpdateRobotInfoReq {
/**
* 机器人ID
*/
@NotNull(message = "机器人ID不能为空")
private Integer robotId;
private Long id;
/**
* 机器人昵称
@ -31,7 +33,7 @@ public class UpdateRobotInfoReq {
* 机器人Tag列表
*/
@NotNull(message = "机器人标签不能为空")
private List<String> tagNameList;
private List<Long> tagNameList;
/**

View File

@ -26,7 +26,7 @@ public class UpdateRobotTagReq {
/**
* 机器人tagId
*/
@NotNull(message = "机器人tagId不能为空")
@NotNull(message = "机器人标签不能为空")
private Long id;
/**

View File

@ -7,8 +7,8 @@ import java.util.List;
/**
* 机器人页面显示信息
*
* @version V1.0
* @author zuoqinbo
* @version V1.0
* @date 2023/10/9 16:01
*/
@Data
@ -16,7 +16,7 @@ public class RobotInfoResp {
/**
* 机器人ID
*/
private Integer robotId;
private String robotId;
/**
* 机器人昵称
@ -46,14 +46,14 @@ public class RobotInfoResp {
private String status;
/**
* 消息模板失效数量
* 机器人已上架消息模板数量
*/
private Integer msgTemplateInvalidCount = 5;
private Integer msgTemplateValid;
/**
* 消息模板数量
* 机器人关联消息模板数量
*/
private Integer msgTemplateCount = 10;
private Integer msgTemplateTotal;
}

View File

@ -41,7 +41,7 @@ public class RobotTagResp {
/**
* 机器人使用数量
* 机器人使用数量
*/
private Integer useCount;
}

View File

@ -19,18 +19,18 @@ public class UserAccountResp {
private String userId;
/**
* 机器人IM云信账户
* 机器人IM账户
*/
private String imAccount;
/**
* Token
* 静态Token
*/
private String token;
/**
* 注册不成功返回网易云信描述信息
* 注册不成功返回系统描述信息
*/
private String desc;

View File

@ -16,4 +16,5 @@ D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\RobotTagQu
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
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\UpdateRobotInfoReq.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\req\AccountQuery.java
D:\im-center\im-center-api\src\main\java\cn\axzo\im\center\api\vo\resp\RobotMsgTemplateResp.java

View File

@ -1,13 +1,14 @@
package cn.axzo.im.center.common.enums;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
/**
* 机器人状态
*
* @version V1.0
* @author zuoqinbo
* @version V1.0
* @date 2023/10/9 16:01
*/
@Getter
@ -26,4 +27,17 @@ public enum RobotStatusEnum {
this.code = code;
}
public static RobotStatusEnum isValidRobotStatus(String robotStatus) {
if (StringUtils.isBlank(robotStatus)) {
return null;
}
RobotStatusEnum[] robotStatusEnums = RobotStatusEnum.values();
for (RobotStatusEnum robotStatusEnum : robotStatusEnums) {
if (robotStatusEnum.getCode().equals(robotStatus.toLowerCase())) {
return robotStatusEnum;
}
}
return null;
}
}

View File

@ -50,4 +50,10 @@ public class RobotTagController implements RobotTagApi {
PageResp<RobotTagResp> robotTagRespPage = robotTagService.queryRobotTagList(robotTagQuery);
return ApiPageResult.ok(robotTagRespPage);
}
@Override
public ApiResult<List<RobotTagResp>> queryRobotTagValidList() {
List<RobotTagResp> robotTagsResp = robotTagService.queryRobotTagValidList();
return ApiResult.ok(robotTagsResp);
}
}

View File

@ -1,18 +1,9 @@
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.Repository;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 账户服务Dao

View File

@ -1,14 +1,13 @@
package cn.axzo.im.dao.repository;
import cn.axzo.im.center.api.vo.req.RobotPageQuery;
import cn.axzo.im.center.common.enums.RobotStatusEnum;
import cn.axzo.im.dao.mapper.RobotInfoMapper;
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.Repository;
import org.springframework.stereotype.Service;
import java.util.List;
@ -45,12 +44,11 @@ public class RobotInfoDao extends ServiceImpl<RobotInfoMapper, RobotInfo> {
/**
* 查询机器人目前所有运行中的机器人
*
*
* @return
*/
public List<RobotInfo> queryRunningRobotList() {
List<RobotInfo> pageOfRobotInfo = lambdaQuery().eq(RobotInfo::getIsDelete, 0)
.eq(RobotInfo::getStatus, RobotStatus.ENABLED.getCode())
.eq(RobotInfo::getStatus, RobotStatusEnum.ENABLED.getCode())
.orderByDesc(RobotInfo::getUpdateAt).list();
return pageOfRobotInfo;
}

View File

@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* im
*
@ -36,6 +38,18 @@ public class RobotTagDao extends ServiceImpl<RobotTagMapper, RobotTag> {
return pageOfRobotTag;
}
/**
* 查询机器人标签列表
*
* @param ids 机器人tagId列表
* @return
*/
public List<RobotTag> queryRobotTagList(List<Long> ids) {
List<RobotTag> robotTagList = lambdaQuery().eq(RobotTag::getIsDelete, 0)
.in(RobotTag::getId, ids).list();
return robotTagList;
}
/**
* 保存机器人标签
*
@ -47,4 +61,5 @@ public class RobotTagDao extends ServiceImpl<RobotTagMapper, RobotTag> {
return robotTag;
}
}

View File

@ -3,6 +3,7 @@ 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 com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@ -19,10 +20,11 @@ import java.util.List;
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@TableName("im_robot_info")
@TableName(value = "im_robot_info",autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class RobotInfo extends BaseEntity<RobotInfo> implements Serializable {
private static final long serialVersionUID = 1L;
@ -44,8 +46,8 @@ public class RobotInfo extends BaseEntity<RobotInfo> implements Serializable {
/**
* 机器人Tag列表
*/
@TableField("tag_name_list")
private List<String> tagNameList;
@TableField(value = "tag_name_list",typeHandler = JacksonTypeHandler.class)
private List<Long> tagNameList;
/**
@ -62,9 +64,9 @@ public class RobotInfo extends BaseEntity<RobotInfo> implements Serializable {
/**
* 机器人状态
* @see cn.axzo.im.enums.RobotStatus
* @see cn.axzo.im.center.common.enums.RobotStatusEnum
*/
@TableField("status")
private Integer status;
private String status;
}

View File

@ -1,30 +0,0 @@
package cn.axzo.im.enums;
import lombok.Getter;
import lombok.Setter;
/**
* 机器人状态
*
* @version V1.0
* @author zuoqinbo
* @date 2023/10/9 16:01
*/
@Getter
public enum RobotStatus {
CREATING("creating", "待生成IM账号"),
UN_ENABLE("un_enable", "待启用"),
ENABLED("enabled", "运行中"),
DISABLED("disabled", "已停用");
private String code;
private String message;
RobotStatus(String code, String message) {
this.code = code;
}
}

View File

@ -18,6 +18,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RestController;
@ -44,6 +45,9 @@ public class AccountService {
@Resource
private AccountRegisterDao accountRegisterDao;
@Resource
private RobotInfoService robotInfoService;
/**
* 创建IM账户
*
@ -65,11 +69,15 @@ public class AccountService {
}
@Transactional(rollbackFor = Exception.class)
public UserAccountResp generateRobotAccount(@Valid RobotAccountReq robotAccountReq) {
//后续AppKey可能会更换机器人通过robotIdappKey维度来保证唯一性
String robotId = robotAccountReq.getRobotId();
UserAccountResp userAccountResp = createAccountRegister(robotId, robotId, AppTypeEnum.SYSTEM.getCode(),
String robotIdWrapper = robotId + "_" + AppTypeEnum.SYSTEM.getCode();
UserAccountResp userAccountResp = createAccountRegister(robotId, robotIdWrapper, AppTypeEnum.SYSTEM.getCode(),
AccountTypeEnum.ROBOT.getCode(), robotAccountReq.getHeadImageUrl(), robotAccountReq.getNickName());
//生成后更新机器人信息表
robotInfoService.updateRobotStatus(robotId, userAccountResp.getImAccount());
return userAccountResp;
}

View File

@ -1,26 +1,32 @@
package cn.axzo.im.service;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.im.center.api.vo.req.RobotInfoReq;
import cn.axzo.im.center.api.vo.req.RobotPageQuery;
import cn.axzo.im.center.api.vo.req.UpdateRobotInfoReq;
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.common.enums.RobotStatusEnum;
import cn.axzo.im.dao.repository.RobotInfoDao;
import cn.axzo.im.dao.repository.RobotInfoDao;
import cn.axzo.im.dao.repository.RobotTagDao;
import cn.axzo.im.entity.RobotInfo;
import cn.axzo.im.entity.RobotTag;
import cn.axzo.im.utils.BeanConvertUtils;
import cn.azxo.framework.common.model.CommonResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.UUID;
/**
* im
@ -37,36 +43,83 @@ public class RobotInfoService {
@Resource
private RobotInfoDao robotInfoDao;
@Resource
private RobotTagDao robotTagDao;
@Transactional(rollbackFor = Exception.class)
public RobotInfoResp saveRobotInfo(@Valid RobotInfoReq robotInfoRequest) {
verifyRobotName(robotInfoRequest.getNickName(), null);
RobotInfo robotInfo = BeanConvertUtils.copyBean(robotInfoRequest, RobotInfo.class);
String robotId = UUID.randomUUID().toString();
robotInfo.setRobotId(robotId);
robotInfo.setCreateAt(new Date());
robotInfo.setUpdateAt(new Date());
robotInfo = robotInfoDao.saveOrUpdateRobotInfo(robotInfo);
if (robotInfo != null) {
RobotInfoResp robotInfoResp = BeanMapper.map(robotInfo, RobotInfoResp.class);
return robotInfoResp;
}
return null;
}
@Transactional(rollbackFor = Exception.class)
public RobotInfoResp updateRobotInfo(@Valid UpdateRobotInfoReq updateRobotInfoReq) {
RobotInfo robotInfo = BeanConvertUtils.copyBean(updateRobotInfoReq, RobotInfo.class);
robotInfo = robotInfoDao.saveOrUpdateRobotInfo(robotInfo);
if (robotInfo != null) {
RobotInfoResp robotInfoResp = BeanMapper.map(robotInfo, RobotInfoResp.class);
return robotInfoResp;
return findRobotInfoById(robotInfo.getId());
}
return null;
}
public RobotInfoResp queryRobotInfo(Long robotInfoId) {
RobotInfo robotInfo = robotInfoDao.getById(robotInfoId);
@Transactional(rollbackFor = Exception.class)
public RobotInfoResp updateRobotInfo(@Valid UpdateRobotInfoReq updateRobotInfoReq) {
String status = updateRobotInfoReq.getStatus();
Long primaryId = updateRobotInfoReq.getId();
RobotInfo robotTag = robotInfoDao.lambdaQuery().eq(RobotInfo::getIsDelete, 0)
.eq(RobotInfo::getId, primaryId).one();
if (robotTag == null) {
throw new ServiceException("机器人主键ID=[" + primaryId + "]的查询不到有效数据!无法进行更新");
}
verifyRobotName(updateRobotInfoReq.getNickName(), primaryId);
verifyRobotStatus(updateRobotInfoReq.getStatus(), primaryId);
RobotInfo robotInfo = BeanConvertUtils.copyBean(updateRobotInfoReq, RobotInfo.class);
robotInfo.setUpdateAt(new Date());
robotInfo = robotInfoDao.saveOrUpdateRobotInfo(robotInfo);
if (robotInfo != null) {
RobotInfoResp robotInfoResp = BeanMapper.map(robotInfo, RobotInfoResp.class);
return robotInfoResp;
return findRobotInfoById(robotInfo.getId());
}
return null;
}
private void verifyRobotStatus(String status, Long primaryId) {
RobotStatusEnum appTypeEnum = RobotStatusEnum.isValidRobotStatus(status);
if (appTypeEnum == null) {
throw new ServiceException("服务器不支持该状态status[" + status + "]!");
}
//只有是待生成账户状态时imAccount才能是空,要做其他状态操作必须有IM账户
RobotInfo robotTag = robotInfoDao.lambdaQuery().eq(RobotInfo::getIsDelete, 0)
.eq(RobotInfo::getId, primaryId).one();
if (!appTypeEnum.getCode().equals(RobotStatusEnum.CREATING.getCode()) &&
StringUtils.isBlank(robotTag.getImAccount())) {
throw new ServiceException("机器人未生成IM账户,无法进行状态更新");
}
}
private void verifyRobotName(String nickName, Long currentId) {
RobotInfo nickNameVerify = robotInfoDao.lambdaQuery().eq(RobotInfo::getIsDelete, 0)
.eq(RobotInfo::getNickName, nickName).one();
if (nickNameVerify != null && !nickNameVerify.getId().equals(currentId)) {
throw new ServiceException("机器人名称=[" + nickName + "]重复!无法进行保存");
}
}
private RobotInfoResp findRobotInfoById(Long id) {
RobotInfo robotInfo = robotInfoDao.getById(id);
List<Long> tagIdList = robotInfo.getTagNameList();
RobotInfoResp robotInfoResp = BeanMapper.map(robotInfo, RobotInfoResp.class);
List<RobotTag> robotTags = robotTagDao.queryRobotTagList(tagIdList);
List<RobotTagResp> robotTagsResp = BeanMapper.copyList(robotTags, RobotTagResp.class);
robotInfoResp.setRobotTagList(robotTagsResp);
return robotInfoResp;
}
public RobotInfoResp queryRobotInfo(Long robotInfoId) {
return findRobotInfoById(robotInfoId);
}
public PageResp<RobotInfoResp> queryRobotInfoList(RobotPageQuery robotInfoQuery) {
IPage<RobotInfo> robotInfoIPage = robotInfoDao.queryRobotInfoOfPage(robotInfoQuery);
List<RobotInfoResp> list = BeanMapper.copyList(robotInfoIPage.getRecords(), RobotInfoResp.class);
@ -80,4 +133,12 @@ public class RobotInfoService {
List<RobotMsgTemplateResp> msgTemplateResps = BeanMapper.copyList(runningRobots, RobotMsgTemplateResp.class);
return msgTemplateResps;
}
public void updateRobotStatus(String robotId, String imAccount) {
RobotInfo robotInfo = robotInfoDao.lambdaQuery().eq(RobotInfo::getIsDelete, 0)
.eq(RobotInfo::getRobotId, robotId).one();
robotInfo.setImAccount(imAccount);
robotInfo.setStatus(RobotStatusEnum.UN_ENABLE.getCode());
robotInfoDao.saveOrUpdateRobotInfo(robotInfo);
}
}

View File

@ -1,25 +1,28 @@
package cn.axzo.im.service;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.im.center.api.vo.req.RobotTagQuery;
import cn.axzo.im.center.api.vo.req.RobotTagReq;
import cn.axzo.im.center.api.vo.req.UpdateRobotTagReq;
import cn.axzo.im.center.api.vo.resp.RobotTagResp;
import cn.axzo.im.center.common.enums.RobotStatusEnum;
import cn.axzo.im.dao.repository.RobotInfoDao;
import cn.axzo.im.entity.RobotTag;
import cn.axzo.im.dao.repository.RobotTagDao;
import cn.axzo.im.entity.RobotInfo;
import cn.axzo.im.entity.RobotTag;
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 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.Consumer;
/**
* 机器人标签服务
@ -41,7 +44,15 @@ public class RobotTagService {
@Transactional(rollbackFor = Exception.class)
public RobotTagResp saveRobotTag(@Valid RobotTagReq robotTagRequest) {
String tagName = robotTagRequest.getTagName();
RobotTag tagNameVerify = robotTagDao.lambdaQuery().eq(RobotTag::getIsDelete, 0)
.eq(RobotTag::getTagName, tagName).one();
if (tagNameVerify != null) {
throw new ServiceException("标签名称=[" + tagName + "]重复!无法进行保存");
}
RobotTag robotTag = BeanConvertUtils.copyBean(robotTagRequest, RobotTag.class);
robotTag.setCreateAt(new Date());
robotTag.setUpdateAt(new Date());
robotTag = robotTagDao.saveOrUpdateRobotTag(robotTag);
if (robotTag != null) {
RobotTagResp robotTagResp = BeanMapper.map(robotTag, RobotTagResp.class);
@ -52,9 +63,23 @@ public class RobotTagService {
@Transactional(rollbackFor = Exception.class)
public RobotTagResp updateRobotTag(@Valid UpdateRobotTagReq updateRobotTagReq) {
RobotTag robotTag = BeanConvertUtils.copyBean(updateRobotTagReq, RobotTag.class);
Long tagId = updateRobotTagReq.getId();
String tagName = updateRobotTagReq.getTagName();
RobotTag robotTag = robotTagDao.lambdaQuery().eq(RobotTag::getIsDelete, 0)
.eq(RobotTag::getId, tagId).one();
if (robotTag == null) {
throw new ServiceException("标签ID=[" + tagId + "]的查询不到有效数据!无法进行更新");
}
RobotTag tagNameVerify = robotTagDao.lambdaQuery().eq(RobotTag::getIsDelete, 0)
.eq(RobotTag::getTagName, tagName).one();
if (tagNameVerify != null && !tagNameVerify.getId().equals(tagId)) {
throw new ServiceException("标签名称=[" + tagName + "]重复!无法进行更新");
}
robotTag = BeanConvertUtils.copyBean(updateRobotTagReq, RobotTag.class);
robotTag.setUpdateAt(new Date());
robotTag = robotTagDao.saveOrUpdateRobotTag(robotTag);
if (robotTag != null) {
robotTag = robotTagDao.getById(updateRobotTagReq.getId());
RobotTagResp robotTagResp = BeanMapper.map(robotTag, RobotTagResp.class);
return robotTagResp;
}
@ -62,7 +87,8 @@ public class RobotTagService {
}
public RobotTagResp queryRobotTagInfo(Long robotTagId) {
RobotTag robotTag = robotTagDao.getById(robotTagId);
RobotTag robotTag = robotTagDao.lambdaQuery().eq(RobotTag::getIsDelete, 0)
.eq(RobotTag::getId, robotTagId).one();
if (robotTag != null) {
RobotTagResp robotTagResp = BeanMapper.map(robotTag, RobotTagResp.class);
return robotTagResp;
@ -77,4 +103,11 @@ public class RobotTagService {
robotTagIPage.getTotal(), list);
return pageOfRobotTagResp;
}
public List<RobotTagResp> queryRobotTagValidList() {
List<RobotTag> robotTagList = robotTagDao.lambdaQuery().eq(RobotTag::getIsDelete, 0)
.in(RobotTag::getStatus, 1).list();
List<RobotTagResp> robotTagsResp = BeanMapper.copyList(robotTagList, RobotTagResp.class);
return robotTagsResp;
}
}

View File

@ -1,9 +1,9 @@
CREATE TABLE IF NOT EXISTS im_robot_tag
(
id bigint auto_increment comment '主键',
tag_name varchar(100) not null comment '机器人Tag名称' unique,
tag_name varchar(100) not null comment '机器人Tag名称',
weight int default 1 not null comment '机器人Tag排序权重,最小值是1',
status tinyint default 1 not null comment '机器人Tag状态 1、开启、0关闭',
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 '创建时间',
@ -18,8 +18,9 @@ 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 '机器人状态',
nick_name varchar(100) not null comment '机器人名称',
status varchar(50) default '' not null comment '机器人状态:待生成IM账号、待启用、运行中、已停用',
tag_name_list 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',
@ -39,13 +40,12 @@ 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包装',
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账号',
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',
token varchar(100) default '' not null comment '网易云信静态token',
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 '更新时间',
@ -55,5 +55,5 @@ CREATE TABLE IF NOT EXISTS im_account_register
create index idx_im_account_id
on im_account_register (account_id);
create index idx_im_account_register_id
create index idx_im_register_id
on im_account_register (im_account);