diff --git a/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java b/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java index 1746193..04cf129 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java @@ -29,7 +29,7 @@ public class LoginController { } @PostMapping("/loginCustom") - @Operation(summary = "用户登录", description = "用户登录") + @Operation(summary = "客服登录", description = "客服登录") public Result loginCustom(@Valid @RequestBody LoginDTO dto) { LoginVO vo = userService.loginCustom(dto); return ResultUtils.success(vo); diff --git a/im-platform/src/main/java/com/bx/implatform/entity/ImAgent.java b/im-platform/src/main/java/com/bx/implatform/entity/ImAgent.java new file mode 100644 index 0000000..2394869 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/entity/ImAgent.java @@ -0,0 +1,63 @@ +package com.bx.implatform.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("im_agent") +public class ImAgent { + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 管理端ID + */ + private Long sysId; + + /** + * 代理用户名 + */ + private String agentName; + + /** + * 唯一token + */ + private String uniqueToken; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新时间 + */ + private Date updatedTime; + + /** + * 当前使用套餐 + */ + private Long packageId; + + /** + * 套餐到期时间 + */ + private Date packageExpireTime; + + /** + * 客服人数上限 + */ + private Long maxCustomer; +} diff --git a/im-platform/src/main/java/com/bx/implatform/mapper/ImAgentMapper.java b/im-platform/src/main/java/com/bx/implatform/mapper/ImAgentMapper.java new file mode 100644 index 0000000..50bd4e1 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/mapper/ImAgentMapper.java @@ -0,0 +1,9 @@ +package com.bx.implatform.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bx.implatform.entity.ImAgent; + + +public interface ImAgentMapper extends BaseMapper { + +} diff --git a/im-platform/src/main/java/com/bx/implatform/service/ImAgentService.java b/im-platform/src/main/java/com/bx/implatform/service/ImAgentService.java new file mode 100644 index 0000000..3d073a0 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/service/ImAgentService.java @@ -0,0 +1,14 @@ +package com.bx.implatform.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bx.implatform.entity.ImAgent; + +public interface ImAgentService extends IService { + + /** + * 检查指定代理的套餐是否过期 + * @param uniqueToken 代理token,用于标识需要检查的代理 + * @return 如果套餐过期返回true,否则返回false + */ + boolean isPackageExpire(String uniqueToken); +} diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/ImAgentServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/ImAgentServiceImpl.java new file mode 100644 index 0000000..d3ba7d4 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/ImAgentServiceImpl.java @@ -0,0 +1,38 @@ +package com.bx.implatform.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bx.implatform.entity.ImAgent; +import com.bx.implatform.mapper.ImAgentMapper; +import com.bx.implatform.service.ImAgentService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ImAgentServiceImpl extends ServiceImpl implements ImAgentService { + + private final ImAgentMapper baseMapper; + + @Override + public boolean isPackageExpire(String uniqueToken) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ImAgent::getUniqueToken, uniqueToken); + + ImAgent imAgent = baseMapper.selectOne(queryWrapper); + + Date expireTime = imAgent.getPackageExpireTime(); + + //未设置套餐 + if(expireTime == null){ + return true; + } + + //过期 + return expireTime.before(new Date()); + } +} diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java index 4655f0b..0e2b374 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java @@ -53,14 +53,12 @@ public class UserServiceImpl extends ServiceImpl implements Us private final IMClient imClient; private final SensitiveFilterUtil sensitiveFilterUtil; private final PrivateMessageService privateMessageService; - @Autowired - private UserLabelService userLabelService; - @Autowired - private UserGroupService UserGroupService; - private final UserGroupService userGroupService; // 注入 UserGroupService -// @Autowired -// private UserLabelService UserLabelService; - private final UserLabelService UserLabelService; // 注入 UserGroupService + + private final UserGroupService userGroupService; + + private final UserLabelService userLabelService; + + private final ImAgentService imAgentService; // @Override // public LoginVO login(LoginDTO dto) { @@ -98,7 +96,14 @@ public class UserServiceImpl extends ServiceImpl implements Us @Override public LoginVO login(LoginDTO dto) { log.info("【测试】前端传的uniqueToken:{}", dto.getUniqueToken()); - // 生成游客唯一标识UUID + + String uniqueToken = dto.getUniqueToken(); + // 检查uniqueToken是否为空或已过期 + if(ObjectUtil.isEmpty(uniqueToken) || imAgentService.isPackageExpire(uniqueToken)){ + throw new GlobalException("标识异常"); + } + + // 生成游客唯一标识UUID,用于标识唯一游客 String guestUuid = UUID.randomUUID().toString(); // 生成游客用户名,例如 guest_随机6位数字 @@ -190,6 +195,12 @@ public class UserServiceImpl extends ServiceImpl implements Us if (!passwordEncoder.matches(dto.getPassword(), user.getPassword())) { throw new GlobalException(ResultCode.PASSWOR_ERROR); } + + //未设置套餐或套餐过期 + if(imAgentService.isPackageExpire(user.getUniqueToken())) { + throw new GlobalException("套餐已过期"); + } + // 生成token UserSession session = BeanUtils.copyProperties(user, UserSession.class); session.setUserId(user.getId()); @@ -334,7 +345,7 @@ public class UserServiceImpl extends ServiceImpl implements Us } if (StringUtils.hasText(user.getGroupIds())) { - List groupNames = UserGroupService.getGroupNamesByIds(user.getGroupIds()); + List groupNames = userGroupService.getGroupNamesByIds(user.getGroupIds()); vo.setGroupNames(groupNames); } @@ -384,7 +395,7 @@ public class UserServiceImpl extends ServiceImpl implements Us // 获取用户的分组信息并转换为VO String token = user.getUniqueToken(); if (StringUtils.hasText(token)) { - List label = UserLabelService.getLabelList(token); + List label = userLabelService.getLabelList(token); // 转换为UserGroupVO List labelVOList = label.stream() diff --git a/im-web/vue.config.js b/im-web/vue.config.js index 5e3be8f..c2316a5 100644 --- a/im-web/vue.config.js +++ b/im-web/vue.config.js @@ -5,7 +5,7 @@ module.exports = { devServer: { proxy: { '/api': { - target: 'http://127.0.0.1:8889', + target: 'http://127.0.0.1:8881', changeOrigin: true, ws: false, pathRewrite: {