|
@@ -1,6 +1,12 @@
|
|
package com.yh.saas.plugin.yiliangyiyun.controller;
|
|
package com.yh.saas.plugin.yiliangyiyun.controller;
|
|
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.cache.CacheUtil;
|
|
|
|
+import cn.hutool.cache.impl.TimedCache;
|
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
+import cn.hutool.extra.qrcode.QrCodeUtil;
|
|
|
|
+import cn.hutool.extra.qrcode.QrConfig;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.plugins.Page;
|
|
import com.baomidou.mybatisplus.plugins.Page;
|
|
@@ -20,7 +26,9 @@ import com.winsea.svc.notice.entity.NoticeTaskInfo;
|
|
import com.yh.saas.common.support.util.IdGenerator;
|
|
import com.yh.saas.common.support.util.IdGenerator;
|
|
import com.yh.saas.common.support.util.StringUtils;
|
|
import com.yh.saas.common.support.util.StringUtils;
|
|
import com.yh.saas.plugin.yiliangyiyun.constant.ImageCensorConsts;
|
|
import com.yh.saas.plugin.yiliangyiyun.constant.ImageCensorConsts;
|
|
|
|
+import com.yh.saas.plugin.yiliangyiyun.entity.AjaxResult;
|
|
import com.yh.saas.plugin.yiliangyiyun.entity.CommonUser;
|
|
import com.yh.saas.plugin.yiliangyiyun.entity.CommonUser;
|
|
|
|
+import com.yh.saas.plugin.yiliangyiyun.entity.SessionPojo;
|
|
import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
|
|
import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
|
|
import com.yh.saas.plugin.yiliangyiyun.entity.view.UserDefinedBean;
|
|
import com.yh.saas.plugin.yiliangyiyun.entity.view.UserDefinedBean;
|
|
import com.yh.saas.plugin.yiliangyiyun.exception.ServiceException;
|
|
import com.yh.saas.plugin.yiliangyiyun.exception.ServiceException;
|
|
@@ -29,7 +37,9 @@ import com.yh.saas.plugin.yiliangyiyun.util.Base64Util;
|
|
import com.yh.saas.plugin.yiliangyiyun.util.FileUtil;
|
|
import com.yh.saas.plugin.yiliangyiyun.util.FileUtil;
|
|
import com.yh.saas.plugin.yiliangyiyun.util.HttpUtil;
|
|
import com.yh.saas.plugin.yiliangyiyun.util.HttpUtil;
|
|
import com.yh.saas.plugin.yiliangyiyun.util.WebSocket;
|
|
import com.yh.saas.plugin.yiliangyiyun.util.WebSocket;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.http.MediaType;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import com.aliyuncs.DefaultAcsClient;
|
|
import com.aliyuncs.DefaultAcsClient;
|
|
import com.aliyuncs.IAcsClient;
|
|
import com.aliyuncs.IAcsClient;
|
|
@@ -38,15 +48,14 @@ import com.aliyuncs.exceptions.ServerException;
|
|
import com.aliyuncs.profile.DefaultProfile;
|
|
import com.aliyuncs.profile.DefaultProfile;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.Gson;
|
|
|
|
|
|
|
|
+
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
import com.aliyuncs.sts.model.v20150401.*;
|
|
import com.aliyuncs.sts.model.v20150401.*;
|
|
|
|
+import org.springframework.web.server.ServerWebExchange;
|
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
-import java.io.BufferedReader;
|
|
|
|
-import java.io.InputStreamReader;
|
|
|
|
-import java.net.HttpURLConnection;
|
|
|
|
-import java.net.URL;
|
|
|
|
import java.net.URLEncoder;
|
|
import java.net.URLEncoder;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -60,6 +69,7 @@ import java.util.Map;
|
|
* @author Gongdc
|
|
* @author Gongdc
|
|
* @since 2021-07-12
|
|
* @since 2021-07-12
|
|
*/
|
|
*/
|
|
|
|
+@Slf4j
|
|
@RestController
|
|
@RestController
|
|
@RequestMapping("/commonUser")
|
|
@RequestMapping("/commonUser")
|
|
public class CommonUserController {
|
|
public class CommonUserController {
|
|
@@ -81,6 +91,152 @@ public class CommonUserController {
|
|
@Autowired
|
|
@Autowired
|
|
private WebSocket webSocket;
|
|
private WebSocket webSocket;
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 缓存放二维码会话,设置1分钟过期
|
|
|
|
+ */
|
|
|
|
+ private TimedCache qrCodeSession= CacheUtil.newTimedCache(1000*60);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 存储token信息
|
|
|
|
+ */
|
|
|
|
+ private TimedCache mobileTokenSession=CacheUtil.newTimedCache(1000*60);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 生成PC端登录二维码
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @GetMapping(value = "/pcQrCode")
|
|
|
|
+ public Mono<AjaxResult<Map<String,String>>> pcQrCode(){
|
|
|
|
+ return Mono.create((sink)->{
|
|
|
|
+ //生成会话编号
|
|
|
|
+ String sessionId= IdUtil.objectId();
|
|
|
|
+ log.debug("sessionId={}",sessionId);
|
|
|
|
+ SessionPojo sessionPojo=new SessionPojo();
|
|
|
|
+ sessionPojo.setSessionId(sessionId);
|
|
|
|
+ //0 二维码 生成状态 ,1 扫码状态 2 登录状态
|
|
|
|
+ sessionPojo.setStatus(0);
|
|
|
|
+
|
|
|
|
+ //生成base64二维码
|
|
|
|
+ QrConfig qrConfig=new QrConfig();
|
|
|
|
+ qrConfig.setWidth(300);
|
|
|
|
+ qrConfig.setHeight(300);
|
|
|
|
+ String base64Code= QrCodeUtil.generateAsBase64(sessionId, qrConfig,"jpeg");
|
|
|
|
+
|
|
|
|
+ //绑定返回体数据
|
|
|
|
+ AjaxResult<Map<String,String>> ajaxResult=AjaxResult.SUCCESS;
|
|
|
|
+ Map<String,String> resultData=new HashMap<>();
|
|
|
|
+ resultData.put("sessionId",sessionId);
|
|
|
|
+ resultData.put("base64Code",base64Code);
|
|
|
|
+ ajaxResult.setData(resultData);
|
|
|
|
+
|
|
|
|
+ //存入缓存
|
|
|
|
+ qrCodeSession.put(sessionId,sessionPojo);
|
|
|
|
+
|
|
|
|
+ sink.success(ajaxResult);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 监听二维码 session 状态
|
|
|
|
+ * @param sessionId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @GetMapping(value = "/getSessionStatus",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
|
|
|
|
+ public Mono<AjaxResult<SessionPojo>> getSessionStatus(String sessionId){
|
|
|
|
+ return Mono.create((sink)->{
|
|
|
|
+ SessionPojo sessionPojo =(SessionPojo)qrCodeSession.get(sessionId);
|
|
|
|
+ AjaxResult ajaxResult=AjaxResult.SUCCESS;
|
|
|
|
+ if(ObjectUtil.isNull(sessionPojo)){
|
|
|
|
+ sessionPojo=new SessionPojo();
|
|
|
|
+ sessionPojo.setSessionId(sessionId);
|
|
|
|
+ //0 二维码 生成状态 ,1 扫码成功 2 登录成功 -1 sessionId过期失效
|
|
|
|
+ sessionPojo.setStatus(-1);
|
|
|
|
+ }
|
|
|
|
+ ajaxResult.setData(sessionPojo);
|
|
|
|
+ sink.success(ajaxResult);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 扫码二维码成功
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping(value = "/mobileScanOk")
|
|
|
|
+ public Mono<AjaxResult> mobileScanOk(ServerWebExchange exchange)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ return exchange.getFormData().flatMap((formData)->{
|
|
|
|
+ //判断二维码session是否有效
|
|
|
|
+ String sessionId = formData.getFirst("sessionId");
|
|
|
|
+ String token=formData.getFirst("token");
|
|
|
|
+
|
|
|
|
+ SessionPojo sessionPojo = (SessionPojo) qrCodeSession.get(sessionId);
|
|
|
|
+ if(ObjectUtil.isNull(sessionPojo)){
|
|
|
|
+ AjaxResult ajaxResult=AjaxResult.Fail;
|
|
|
|
+ ajaxResult.setMsg("二维码已失效");
|
|
|
|
+ return Mono.just(ajaxResult);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //判断token是否有效
|
|
|
|
+ CommonUser userEntity = (CommonUser) mobileTokenSession.get(token);
|
|
|
|
+
|
|
|
|
+ //0 二维码 生成状态 ,1 扫码成功 2 登录成功 -1 sessionId过期失效
|
|
|
|
+ mobileTokenSession.get(token);
|
|
|
|
+ sessionPojo.setStatus(1);
|
|
|
|
+ sessionPojo.setUsername(userEntity.getUserName());
|
|
|
|
+ AjaxResult ajaxResult=AjaxResult.SUCCESS;
|
|
|
|
+ ajaxResult.setMsg("扫描成功,等待手机端确认操作");
|
|
|
|
+ return Mono.just(ajaxResult);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 手机端确认登录
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping(value = "/mobileOkPcLogin")
|
|
|
|
+ public Mono<AjaxResult> mobileOkPcLogin(ServerWebExchange exchange){
|
|
|
|
+
|
|
|
|
+ return exchange.getFormData().flatMap(formData -> {
|
|
|
|
+ String sessionId = formData.getFirst("sessionId");
|
|
|
|
+ String token=formData.getFirst("token");
|
|
|
|
+
|
|
|
|
+ //判断二维码session是否有效
|
|
|
|
+ SessionPojo sessionPojo = (SessionPojo) qrCodeSession.get(sessionId);
|
|
|
|
+ if (ObjectUtil.isNull(sessionPojo)) {
|
|
|
|
+ AjaxResult ajaxResult = AjaxResult.Fail;
|
|
|
|
+ ajaxResult.setMsg("二维码已失效");
|
|
|
|
+ return Mono.just(ajaxResult);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //判断token是否有效
|
|
|
|
+ CommonUser userEntity = (CommonUser) mobileTokenSession.get(token);
|
|
|
|
+ if (ObjectUtil.isNull(userEntity)) {
|
|
|
|
+ AjaxResult ajaxResult = AjaxResult.Fail;
|
|
|
|
+ ajaxResult.setMsg("用户信息验证失效");
|
|
|
|
+ return Mono.just(ajaxResult);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //修改二维码session对象状态
|
|
|
|
+ //0 二维码 生成状态 ,1 扫码成功 2 登录成功 -1 sessionId过期失效
|
|
|
|
+ sessionPojo.setUsername(userEntity.getUserName());
|
|
|
|
+ sessionPojo.setStatus(2);
|
|
|
|
+
|
|
|
|
+ AjaxResult ajaxResult = AjaxResult.SUCCESS;
|
|
|
|
+ ajaxResult.setMsg("PC登录成功");
|
|
|
|
+ return Mono.just(ajaxResult);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
@GetMapping("/getAuth")
|
|
@GetMapping("/getAuth")
|
|
public String getAuth(String apiKey, String secretKey) {
|
|
public String getAuth(String apiKey, String secretKey) {
|