Jelajahi Sumber

2022-10-31 11:22 RMS报告管理系统提交 补充外部接口类与登录接口 未测试

沈永艺 2 tahun lalu
induk
melakukan
d970285b30

+ 34 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/LoginVO.java

@@ -0,0 +1,34 @@
+package cn.cslg.report.common.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author 沈永艺
+ * @date 2022-10-31
+ * @description 登录 前台对应实体
+ */
+
+@Data
+@Accessors(chain = true)
+public class LoginVO {
+    /**
+     * 验证码
+     */
+    private String code;
+
+    /**
+     * UUID
+     */
+    private String uuid;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 密码
+     */
+    private String password;
+}

+ 41 - 0
RMS/src/main/java/cn/cslg/report/common/utils/ApiUtils.java

@@ -0,0 +1,41 @@
+package cn.cslg.report.common.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.Objects;
+
+@Component
+public class ApiUtils {
+    @Value("${authorUrl}")
+    private String url;
+    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
+
+    public String invokeApi(JSONObject params, String api, String type, String field) throws IOException {
+        RequestBody postParams = RequestBody.create(JSON, String.valueOf(params));
+        OkHttpClient okHttpClient = new OkHttpClient();
+        String resBody = null;
+        if (type.equals("post")) {
+            Request request = new Request.Builder()
+                    .url(url + api)
+                    .post(postParams)
+                    .build();
+            resBody = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+        } else if (type.equals("get")) {
+            Request request = new Request.Builder()
+                    .url(url + api)
+                    .get()
+                    .build();
+            resBody = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+        }
+
+        JSONObject jsonObject = JSONObject.parseObject(resBody, JSONObject.class);
+        return jsonObject.get(field).toString();
+    }
+}

+ 20 - 0
RMS/src/main/java/cn/cslg/report/common/utils/DataUtils.java

@@ -5,6 +5,7 @@ import cn.dev33.satoken.secure.SaSecureUtil;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -86,4 +87,23 @@ public class DataUtils {
     public String calculateCompletion(Integer finishNum, Integer allNum) {
         return finishNum / allNum + "%";
     }
+
+    /**
+     * @return 拆分出的特征
+     * @author 沈永艺
+     * @description 处理权利要求
+     */
+    public List<String> processRightToFeatures(List<String> rightList, String patentNo) {
+        List<String> features = new ArrayList<>();
+        if (patentNo != null) {
+            String country = patentNo.substring(0, 2);
+            if (country.equals("CN") || country.equals("JP")) {
+
+            } else {
+
+            }
+        }
+
+        return features;
+    }
 }

+ 47 - 0
RMS/src/main/java/cn/cslg/report/controller/LoginController.java

@@ -0,0 +1,47 @@
+package cn.cslg.report.controller;
+
+import cn.cslg.report.common.core.base.Constants;
+import cn.cslg.report.common.model.vo.LoginVO;
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.service.LoginService;
+import cn.dev33.satoken.stp.StpUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+
+/**
+ * @author 沈永艺
+ * @date 2022-10-31
+ * @description 登录 Controller 层
+ */
+
+@Tag(name = "登录管理")
+@RestController
+@RequestMapping(Constants.REPORT_API)
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class LoginController {
+    private final LoginService loginService;
+
+    @PostMapping("/login")
+    @Operation(summary = "登录")
+    public String login(@RequestBody LoginVO loginVO) throws IOException {
+        return loginService.login(loginVO);
+    }
+
+    @PostMapping("/logout")
+    @Operation(summary = "登出")
+    public String logout() {
+        StpUtil.logout();
+        return Response.success(true);
+    }
+
+    @GetMapping("/verifyCode")
+    @Operation(summary = "生成验证码")
+    public String verifyCode() {
+        return loginService.verifyCode();
+    }
+}

+ 60 - 0
RMS/src/main/java/cn/cslg/report/service/LoginService.java

@@ -0,0 +1,60 @@
+package cn.cslg.report.service;
+
+import cn.cslg.report.common.model.vo.LoginVO;
+import cn.cslg.report.common.model.vo.PersonnelVO;
+import cn.cslg.report.common.utils.LogExceptionUtil;
+import cn.cslg.report.common.utils.Response;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class LoginService {
+    private final OutInterfaceService requestService;
+
+    /**
+     * @return 1.生成验证码的base64转码 2.生成的UUID 与Redis里面的验证码KEY值一致
+     * @title 获取验证码
+     * @author 沈永艺
+     */
+    public String verifyCode() {
+        try {
+            String resBody = requestService.getVerifyCodeFromPCS();
+            JSONObject data = (JSONObject) JSONObject.parseObject(resBody).get("data");
+            Map<String, String> result = new HashMap<>();
+            result.put("captcha", data.get("captcha").toString());
+            result.put("uuid", data.get("uuid").toString());
+            return Response.success(result);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            log.error(LogExceptionUtil.getMessage(ex));
+            return Response.error("获取验证码失败");
+        }
+    }
+
+    /**
+     * @return 成功返回Token 失败返回错误信息
+     * @title 登录接口
+     * @author 沈永艺
+     */
+    public String login(LoginVO loginVO) throws IOException {
+        String resBody = requestService.LoginFromPCS(loginVO);
+        JSONObject jsonObject = JSONObject.parseObject(resBody);
+        //判断请求返回是否为200,不是的话则返回报错信息
+        if (!jsonObject.get("code").equals(200)) {
+            log.error("权限系统登录接口报错,错误信息:" + jsonObject.get("message").toString());
+            return Response.error(jsonObject.get("message").toString());
+        } else {
+            PersonnelVO personnelVO = com.alibaba.fastjson2.JSONObject.parseObject(jsonObject.get("data").toString(), PersonnelVO.class);
+            return Response.success(personnelVO.getToken());
+        }
+    }
+}

+ 63 - 0
RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java

@@ -0,0 +1,63 @@
+package cn.cslg.report.service;
+
+import cn.cslg.report.common.model.vo.LoginVO;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author 沈永艺
+ * @description 调用外部接口的Service类
+ * @date 2022-10-31
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class OutInterfaceService {
+    @Value("${authorUrl}")
+    private String url;
+    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
+
+    /**
+     * @title 获取验证码
+     * @description 接口来源:PCS
+     */
+    public String getVerifyCodeFromPCS() throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(url + "/permission/api/admin/verifyCode")
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * @title 登录接口
+     * @description 接口来源:PCS
+     */
+    public String LoginFromPCS(LoginVO loginVO) throws IOException {
+        Map<String, Object> map = new HashMap<>();
+        map.put("code", loginVO.getCode());
+        map.put("uuid", loginVO.getUuid());
+        map.put("username", loginVO.getUsername());
+        map.put("password", loginVO.getPassword());
+        JSONObject json = new JSONObject(map);
+        RequestBody a = RequestBody.create(JSON, String.valueOf(json));
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(url + "/permission/api/admin/login")
+                .post(a)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+}