he2802 2 жил өмнө
parent
commit
37afc312ae

+ 14 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -15,6 +15,7 @@ import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.UserWxFollow;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
+import com.zhongzheng.modules.user.service.IUserLoginKeyService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserVisitLogService;
 import com.zhongzheng.modules.user.service.IUserWxFollowService;
@@ -56,6 +57,8 @@ public class UserController extends BaseController {
 
     private final ISysTenantService sysTenantService;
 
+    private final IUserLoginKeyService iUserLoginKeyService;
+
     private static Logger log = LoggerFactory.getLogger(UserController.class);
     /**
      * 修改客户端用户
@@ -191,4 +194,15 @@ public class UserController extends BaseController {
         UserVo userVo = iUserService.queryById(loginUser.getUser().getUserId());
         return AjaxResult.success("成功",userVo.getGzhOpenId());
     }
+
+    @ApiOperation("把其他用户踢下线")
+    @Log(title = "把其他用户踢下线", businessType = BusinessType.UPDATE)
+    @PostMapping("/offline")
+    public AjaxResult<Void> offline(){
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        UserLoginKeyEditBo editBo = new UserLoginKeyEditBo();
+        editBo.setUserId(loginUser.getUser().getUserId());
+        editBo.setUserKey(loginUser.getToken());
+        return toAjax(iUserLoginKeyService.offline(editBo) ? 1 : 0);
+    }
 }

+ 7 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxTokenService.java

@@ -94,8 +94,12 @@ public class WxTokenService
             Claims claims = parseToken(token);
             // 解析对应的权限以及用户信息
             String uuid = (String) claims.get(Constants.WX_LOGIN_USER_KEY);
+            if(Validator.isEmpty(iUserLoginKeyService.queryByUserKey(uuid))){
+                throw new CustomException("已被踢下线",409);
+            }
             String userKey = getTokenKey(uuid);
             ClientLoginUser user = redisCache.getCacheObject(userKey);
+
             return user;
         }
         return null;
@@ -179,8 +183,9 @@ public class WxTokenService
         String userKey = getTokenKey(loginUser.getToken());
         UserLoginKeyAddBo addBo = new UserLoginKeyAddBo();
         addBo.setUserId(loginUser.getUser().getUserId());
-        addBo.setUserKey(userKey);
-        addBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+        addBo.setUserKey(loginUser.getToken());
+        addBo.setIp(loginUser.getIpaddr());
+        addBo.setBrowser(loginUser.getBrowser());
         iUserLoginKeyService.insertByAddBo(addBo);
         redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
     }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopNuoMplatformLogServiceImpl.java

@@ -227,7 +227,7 @@ public class TopNuoMplatformLogServiceImpl extends ServiceImpl<TopNuoMplatformLo
                             objectLambdaUpdateWrapper.set(TopNuoMplatformLog::getStatus, Integer.parseInt(status));
                             objectLambdaUpdateWrapper.set(TopNuoMplatformLog::getFailCause, failCause);
                         }
-                        TopNuoMplatformLog mplatformLog = getOne(new LambdaQueryWrapper<TopNuoMplatformLog>().eq(TopNuoMplatformLog::getOrderNo, orderNo));
+                        TopNuoMplatformLog mplatformLog = getOne(new LambdaQueryWrapper<TopNuoMplatformLog>().eq(TopNuoMplatformLog::getInvoiceSerialNum, serialNo));
                         if(mplatformLog.getFromPlat()==1){
                             this.update(null, objectLambdaUpdateWrapper);
                             iTopOldOrderService.orderInvoice(orderNo);

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserLoginKeyService.java

@@ -23,6 +23,8 @@ public interface IUserLoginKeyService extends IService<UserLoginKey> {
 	 */
 	UserLoginKeyVo queryById(Long id);
 
+	UserLoginKey queryByUserKey(String userKey);
+
 	/**
 	 * 查询列表
 	 */
@@ -49,4 +51,6 @@ public interface IUserLoginKeyService extends IService<UserLoginKey> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+	Boolean offline(UserLoginKeyEditBo bo);
 }

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserLoginKeyServiceImpl.java

@@ -1,11 +1,17 @@
 package com.zhongzheng.modules.user.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.sdk.domain.TopNuoMplatformLog;
 import com.zhongzheng.modules.user.bo.UserLoginKeyAddBo;
 import com.zhongzheng.modules.user.bo.UserLoginKeyEditBo;
 import com.zhongzheng.modules.user.bo.UserLoginKeyQueryBo;
+import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserLoginKey;
 import com.zhongzheng.modules.user.mapper.UserLoginKeyMapper;
 import com.zhongzheng.modules.user.service.IUserLoginKeyService;
@@ -36,6 +42,13 @@ public class UserLoginKeyServiceImpl extends ServiceImpl<UserLoginKeyMapper, Use
         return BeanUtil.toBean(db, UserLoginKeyVo.class);
     }
 
+    @Override
+    public UserLoginKey queryByUserKey(String userKey) {
+        UserLoginKey loginKey = getOne(new LambdaQueryWrapper<UserLoginKey>()
+                .eq(UserLoginKey::getUserKey, userKey).eq(UserLoginKey::getStatus, 1).last("limit 1"));
+        return loginKey;
+    }
+
     @Override
     public List<UserLoginKeyVo> queryList(UserLoginKeyQueryBo bo) {
         LambdaQueryWrapper<UserLoginKey> lqw = Wrappers.lambdaQuery();
@@ -100,4 +113,16 @@ public class UserLoginKeyServiceImpl extends ServiceImpl<UserLoginKeyMapper, Use
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public Boolean offline(UserLoginKeyEditBo bo) {
+        if(Validator.isEmpty(bo.getUserId())||Validator.isEmpty(bo.getUserKey())){
+            throw new CustomException("参数错误");
+        }
+        LambdaUpdateWrapper<UserLoginKey> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+        objectLambdaUpdateWrapper.eq(UserLoginKey::getUserId, bo.getUserId());
+        objectLambdaUpdateWrapper.ne(UserLoginKey::getUserKey, bo.getUserKey());
+        objectLambdaUpdateWrapper.set(UserLoginKey::getStatus, 0);
+        return  this.update(null, objectLambdaUpdateWrapper);
+    }
 }