gongdecai 3 vuotta sitten
vanhempi
commit
9f2faad19c

+ 160 - 4
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/CommonUserController.java

@@ -1,6 +1,12 @@
 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.JSONObject;
 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.StringUtils;
 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.SessionPojo;
 import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
 import com.yh.saas.plugin.yiliangyiyun.entity.view.UserDefinedBean;
 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.HttpUtil;
 import com.yh.saas.plugin.yiliangyiyun.util.WebSocket;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.IAcsClient;
@@ -38,15 +48,14 @@ import com.aliyuncs.exceptions.ServerException;
 import com.aliyuncs.profile.DefaultProfile;
 import com.google.gson.Gson;
 
+
 import java.util.*;
 
 import com.aliyuncs.sts.model.v20150401.*;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
 
 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.util.Date;
 import java.util.List;
@@ -60,6 +69,7 @@ import java.util.Map;
  * @author Gongdc
  * @since 2021-07-12
  */
+@Slf4j
 @RestController
 @RequestMapping("/commonUser")
 public class CommonUserController {
@@ -81,6 +91,152 @@ public class CommonUserController {
     @Autowired
     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")
     public String getAuth(String apiKey, String secretKey) {

+ 4 - 4
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/HyPublicConsultationController.java

@@ -53,18 +53,18 @@ public class HyPublicConsultationController {
      * @return
      */
     @PostMapping("/api/editPublicConsultation")
-    public String editPublicConsultation (@RequestBody HyPublicConsultation publicConsultation){
+    public String editPublicConsultation (HyPublicConsultation publicConsultation){
         return publicConsultationService.editPublicConsultation(publicConsultation);
     }
 
     /**
      * 删除
-     * @param publicConsultation
+     * @param id
      * @return
      */
     @PostMapping("/api/delete")
-    public void delete (@RequestBody HyPublicConsultation publicConsultation){
-         publicConsultationService.delete(publicConsultation.getId());
+    public void delete (@RequestParam String id){
+         publicConsultationService.delete(id);
     }
 
 

+ 41 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/AjaxResult.java

@@ -0,0 +1,41 @@
+package com.yh.saas.plugin.yiliangyiyun.entity;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Data
+@Getter
+@Setter
+public class AjaxResult<T> {
+
+    //成功
+    public static final AjaxResult SUCCESS=new AjaxResult(0,"操作成功");
+    //失败
+    public static final AjaxResult Fail=new AjaxResult(1,"操作失败");
+
+
+    //返回对象
+    private T data;
+
+    //状态码
+    private int code;
+
+    //提示信息
+    private String msg;
+
+
+    public AjaxResult(){}
+
+    public AjaxResult(int code,String msg){
+        this.code=code;
+        this.msg=msg;
+    }
+
+
+    public AjaxResult(int code,String msg,T data){
+        this.code=code;
+        this.msg=msg;
+        this.data=data;
+    }
+}

+ 22 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/SessionPojo.java

@@ -0,0 +1,22 @@
+package com.yh.saas.plugin.yiliangyiyun.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 用户存放session对象
+ */
+@Data
+public class SessionPojo {
+
+    //session编号
+    private String sessionId;
+
+    //0 二维码 生成状态 ,1 扫码成功 2 登录成功 3 sessionId过期失效
+    private int status=0;
+
+    //扫码成功将用户名返回
+    private String username;
+
+}

+ 2 - 2
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/HyPublicConsultationServiceImpl.java

@@ -53,8 +53,8 @@ public class HyPublicConsultationServiceImpl extends ServiceImpl<HyPublicConsult
         else if("公示".equals(publicConsultation.getContentType())){
             publicConsultation.setNumber(this.number(publicConsultations,"GS"));
         }
-        else if("咨询".equals(publicConsultation.getContentType())){
-            publicConsultation.setNumber(this.number(publicConsultations,"zx"));
+        else if("资讯".equals(publicConsultation.getContentType())){
+            publicConsultation.setNumber(this.number(publicConsultations,"ZX"));
         }
         //判断质检编号是否唯一
         List<HyPublicConsultation> publicConsultations1 = this.selectList(new EntityWrapper<HyPublicConsultation>()