From 314ccc3fbb5b4cb1be4a77bc107a0ca1a2b2f0a3 Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期六, 15 三月 2025 10:37:31 +0800
Subject: [PATCH] 浪潮单点登录,注册,心跳

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java             |  173 ++++++++++++++++++++++++++++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java        |   81 ++++++++++++++++
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java |    2 
 ruoyi-admin/src/main/resources/application-druid.yml                               |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java              |   31 ++++++
 ruoyi-admin/src/main/resources/application.yml                                     |    4 
 6 files changed, 290 insertions(+), 5 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java
new file mode 100644
index 0000000..6e341b2
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideController.java
@@ -0,0 +1,81 @@
+package com.ruoyi.web.controller.tide;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.system.service.ISysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RequestMapping("/tide")
+@RestController
+@Api(tags = "瀵规帴娴疆绯荤粺")
+@Anonymous
+@Slf4j
+public class TideController {
+
+    @Autowired
+    private SysLoginService loginService;
+
+    @Autowired
+    private ISysUserService userService;
+
+    @ApiOperation(value = "鐧诲綍")
+    @PostMapping("/tideLogin")
+    public AjaxResult login(@RequestBody String code) {
+        String token = TideUtils.getToken(code);
+        JSONObject userInfo = TideUtils.getUserInfo(token);
+        JSONObject tenant = JSONObject.parseObject(userInfo.get("tenant").toString());
+        AjaxResult ajax = AjaxResult.success();
+        // 鐢熸垚浠ょ墝
+        String generateToken = loginService.login(tenant.get("tenantAccount").toString(), tenant.get("tenantPassword").toString(), null,
+                IdWorker.get32UUID());
+        ajax.put(Constants.TOKEN, generateToken);
+        return ajax;
+    }
+
+    @PostMapping("/applicationOrdering")
+    public JSONObject order (@RequestBody TidePojo tidePojo) {
+        SysUser user = new SysUser();
+        String randomString = TideUtils.getRandomString(12);
+        String password = SecurityUtils.encryptPassword(randomString);
+        user.setPassword(password);
+        user.setUserName(tidePojo.getPltAccountLogin());
+        user.setNickName(tidePojo.getEnterpriseName());
+        user.setStatus("0");
+        user.setDelFlag("0");
+        user.setPostIds(new Long[]{1L});
+        user.setRoleId(1L);
+        userService.insertUser(user);
+        Map<String, Object> map = new HashMap<>();
+        map.put("account", tidePojo.getPltAccountLogin());
+        map.put("token", randomString);
+        map.put("tenantId", user.getUserId());
+        return TideUtils.getResult(20000, "鎴愬姛", map);
+    }
+
+    @PostMapping("/cancellation")
+    public JSONObject cancellation (@RequestBody TidePojo tidePojo) {
+        log.info("鎵ц浜嗘敞閿�淇℃伅锛�" + tidePojo);
+        return TideUtils.getResult(20000, "鎴愬姛", null);
+    }
+
+    public static void main(String[] args) {
+        String password = SecurityUtils.encryptPassword("tzvy7lB.");
+        System.out.println(password);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java
new file mode 100644
index 0000000..968bfe9
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TidePojo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.web.controller.tide;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class TidePojo {
+    @ApiModelProperty("浼佷笟鍚嶇О")
+    private String enterpriseName;
+
+    @ApiModelProperty("骞冲彴鐢ㄦ埛")
+    private String pltUserCn;
+
+    @ApiModelProperty("骞冲彴璐﹀彿")
+    private String pltAccountLogin;
+
+    @ApiModelProperty("璁㈣喘鏃堕暱")
+    private Integer purchaseDuration;
+
+    @ApiModelProperty("璁㈠崟鏃堕暱鍗曚綅")
+    private String purchaseUnit;
+
+    @ApiModelProperty("appKey")
+    private String appKey;
+
+    @ApiModelProperty("appSecret")
+    private String appSecret;
+
+    @ApiModelProperty("code")
+    private String code;
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java
new file mode 100644
index 0000000..aea37c7
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tide/TideUtils.java
@@ -0,0 +1,173 @@
+package com.ruoyi.web.controller.tide;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.crypto.digest.HMac;
+import cn.hutool.crypto.digest.HmacAlgorithm;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+
+@Data
+@Component
+@Slf4j
+public class TideUtils {
+    private final static String appId = "19472937-3039-4bf1-8334-13dc20e076e5";
+
+    private final static String appSecret = "b57bbad60724f810e7bb7e1e7b8791b63eba50e50faef6fa819ade822fac9e4a";
+
+    // 鍐呯綉鍦板潃
+    private final static String ip = "http://58.56.84.138:8083";
+
+    // MD5鍔犲瘑骞惰浆鎹负16杩涘埗
+    public static String md5Encryption(String input) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] digest = md.digest(input.getBytes());
+            StringBuilder sb = new StringBuilder();
+            for (byte b : digest) {
+                sb.append(String.format("%02x", b & 0xff));
+            }
+            return sb.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    // get璇锋眰
+    public static HashMap<String, String> getGetHeader(String parameter) {
+        // 鏃堕棿鎴�
+        String xTime = String.valueOf(DateUtil.current());
+        // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+        String xRandom = RandomUtil.randomString(16);
+        String xSignSplicingTogether;
+        // 鏈夊弬鏁�
+        if (ObjectUtils.isNotEmpty(parameter)) {
+            // 鍔犲瘑寰楀嚭x-body
+            String xBody = md5Encryption(parameter);
+            // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+            xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+        // 鏃犲弬鏁�
+        } else {
+            xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+        }
+        // 閰嶇疆鍔犲瘑鏂瑰紡涓庡瘑閽�
+        HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, appSecret.getBytes());
+        // 寰楀嚭x-sign
+        String xSign = hMac.digestHex(xSignSplicingTogether);
+        HashMap<String, String> result = new HashMap<>();
+        result.put("x-time", xTime);
+        result.put("x-random", xRandom);
+        result.put("x-sign", xSign);
+        result.put("appKey", appId);
+        return result;
+    }
+
+    // post璇锋眰
+    public static HashMap<String, String> getPostHeader(String parameter) {
+        // 鏃堕棿鎴�
+        String xTime = String.valueOf(DateUtil.current());
+        // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+        String xRandom = RandomUtil.randomString(16);
+        String xSignSplicingTogether;
+        // 鏈夊弬鏁�
+        if (ObjectUtils.isNotEmpty(parameter)) {
+            // 鍔犲瘑寰楀嚭x-body
+            String xBody = md5Encryption(parameter);
+            // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+            xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+            // 鏃犲弬鏁�
+        } else {
+            xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+        }
+        // x-sign 鍔犲瘑
+        HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, appSecret.getBytes());
+        String xSign = hMac.digestHex(xSignSplicingTogether);
+        HashMap<String, String> result = new HashMap<>();
+        result.put("x-time", xTime);
+        result.put("x-random", xRandom);
+        result.put("x-sign", xSign);
+        result.put("appKey", appId);
+        return result;
+    }
+
+    /**
+     * 浜斿垎閽熶竴娆$殑蹇冭烦
+     */
+//    @Scheduled(cron = "0 0/5 * * * ?")
+    public static void heartbeat(){
+        HashMap<String, String> header = getGetHeader(null);
+        String url = ip + "/cpn/api/extra/v1/application/heartbeat";
+        String body = HttpRequest.get(url).headerMap(header, false).execute().body();
+        System.out.println(body + "=======MES蹇冭烦鎵ц鎴愬姛锛�");
+    }
+
+    // 鑾峰彇token
+    public static String getToken(String code) {
+        String url = ip + "/cpn/extral/applicationCode/appAuthCheck";
+        JSONObject json = new JSONObject();
+        json.put("code", code);
+        json.put("appID", appId);
+        json.put("appSecret", appSecret);
+        HashMap<String, String> header = getPostHeader(json.toString());
+        String body = HttpRequest.post(url)
+                .headerMap(header, false)
+                .body(json.toString())
+                .execute().body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        return jsonObject.get("data").toString();
+    }
+
+    // 鑾峰彇鐢ㄦ埛淇℃伅
+    public static JSONObject getUserInfo(String token) {
+        String url = ip + "/cpn/api/extral/applicationCode/getUserInfoByToken";
+        JSONObject json = new JSONObject();
+        json.put("appID", appId);
+        HashMap<String, String> header = getPostHeader(json.toString());
+        header.put("Authorization", token);
+        String body = HttpRequest.post(url)
+                .headerMap(header, false)
+                .body(json.toString())
+                .execute().body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        return JSONObject.parseObject(jsonObject.get("data").toString());
+    }
+
+    public static JSONObject getResult(Integer code, String msg, Object data) {
+        JSONObject json = new JSONObject();
+        json.put("code", code);
+        json.put("msg", msg);
+        json.put("data", data);
+        String xRandom = RandomUtil.randomString(16);
+        json.put("traceId", xRandom);
+        return json;
+    }
+
+    public static String getRandomString(int length) {
+        SecureRandom random = new SecureRandom();
+        String uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+        String lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
+        String numbers = "0123456789";
+        String specialCharacters = "!@$%^&*()_+-=.";
+        String characterSet = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
+        StringBuilder passwordBuilder = new StringBuilder();
+
+        for (int i = 0; i < length; i++) {
+            int randomIndex = random.nextInt(characterSet.length());
+            char randomChar = characterSet.charAt(randomIndex);
+            passwordBuilder.append(randomChar);
+        }
+
+        return passwordBuilder.toString();
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index dfad74e..14ca9c5 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -71,7 +71,7 @@
     # 鏁版嵁搴撶储寮�
     database: 0
     #    # 瀵嗙爜
-    #    password: root2022!
+    password: 123456
     # 杩炴帴瓒呮椂鏃堕棿
     timeout: 10s
     lettuce:
@@ -96,7 +96,7 @@
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: # org.apache.ibatis.logging.stdout.StdOutImpl
 
 # Swagger閰嶇疆
 swagger:
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index b6f9251..203958b 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -7,7 +7,7 @@
   # 鐗堟潈骞翠唤
   copyrightYear: 2025
   # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
-  profile: /javaWork/lims-ruoyi/file/uploadPath
+  profile: D:\webapp
   # 鑾峰彇ip鍦板潃寮�鍏�
   addressEnabled: false
   # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
@@ -33,7 +33,7 @@
 
 # 鏃ュ織閰嶇疆
 logging:
-  file-location: /javaWork/lims-ruoyi
+  file-location: D:\webapp
   level:
     com.ruoyi: info
     org.springframework: warn
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 05fbbf4..12b3138 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -100,7 +100,7 @@
     public String login(String username, String password, String code, String uuid)
     {
         // 楠岃瘉鐮佹牎楠�
-        validateCaptcha(username, code, uuid);
+//        validateCaptcha(username, code, uuid);
         // 鐧诲綍鍓嶇疆鏍¢獙
         loginPreCheck(username, password);
         // 鐢ㄦ埛楠岃瘉

--
Gitblit v1.9.3