新添加激活码激活平台功能

设计数据变更:

  • 添加pc_activation激活表

  • 添加sys_menu菜单信息

INSERT INTO sys_config` (`config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('MAC地址参数', 'mac_address_type_name', 'enp3s0f0', 'Y', 'admin', '2023-03-09 16:01:47', '', NULL, NULL);


CREATE TABLE `pc_activation` (
  `system_code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备码',
  `activation_code` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '激活码',
  `activation_status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '激活码标识',
  PRIMARY KEY (`system_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `target`, `menu_type`, `visible`, `is_refresh`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('版本信息', 0, 10, '/pc/pc_activation/show', 'menuItem', 'C', '0', '1', 'pc:pc_activation:edit', '#', 'admin', '2022-12-12 15:25:15', 'admin', '2022-12-12 15:31:24', '');




INSERT INTO `sys_config` ( `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark` )
VALUES
	( 'MAC地址参数', 'mac_address_type_name', 'wlan4', 'Y', 'admin', '2023-03-09 16:01:47', '', NULL, NULL );

公钥RSAPublicKey:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNMGBEQTyKC+2zh2CUxEDI8M3jSpSFIwDjW1JLCzJCQDTclGqX/A3DWsS+PMrFfRxd0w9rIoLx1DjF2KpJmAzUKpFHtptm8tWPAaPgcl58x7zJvnYUHIMcejXhUZfqE8qHVVQeNaUGxq2Nn9S2s+dFVJ9zSc327mS9Ym0xt2wTYQIDAQAB

私钥RSAPrivateKey:

MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0wYERBPIoL7bOHYJTEQMjwzeNKlIUjAONbUksLMkJANNyUapf8DcNaxL48ysV9HF3TD2sigvHUOMXYqkmYDNQqkUe2m2by1Y8Bo+ByXnzHvMm+dhQcgxx6NeFRl+oTyodVVB41pQbGrY2f1Laz50VUn3NJzfbuZL1ibTG3bBNhAgMBAAECgYAnewFq4KqHXVg1TP0WYtScVUkoTLdbDqsjE/U3n0XiXXxOXPhNmiAD0Lk+aXASo8oLe4rh8FgFs/Hgj5nkYy9EY2B+e4nzdGkaXpLCYJQL8gYFnh+TlcJnhcKBHkQuBGORVghDWOky0bMyKxdPlO20B8AySThHaQ6k/CWjJFkMKQJBAOdlQbp//cCRImTI1GIW3ghQuqGrOtrQHnLO4My/FsW5elaqKhU3sfAAa+Tk7jWm0cdsu5OYFjvsjzmrea0Y5wsCQQDjAcJCQn275itpTtOjqLDGH0lf2AKFv+DARBDdvZNDULirzUpiMT6xHlWyIu3NXD6oRofvKiF40ADKOJPSsgLDAkEAhLM9Dod4LocNAl9p7RbQHlStsylPh0zzKUQbB1BO7vV/g1Py7lgSY2Daf1oKgho5E/T3XZ1KovL28Eu2a95sIQJAdgITD0jrfgOAa8UrpjdqdgQLq8RqQ0dlOe3oaq1DYcoTxlP5KCR7d63SVMFtp8UdWXMY9U6MifZvgrB4wB4D6wJBAILQrxAtbzMG9qD9jLBjBy6dVpMTGS2NqSUlIHz5CFdGT5d9gLMjLJ5cCovKgdzrX+pyAFmUIy7n3BFkGHtWcTs=


      try {
    //      InetAddress inetAddress = InetAddress.getLocalHost();
    //      String macAddress = SystemUtil.getMacAddress(inetAddress);
    //String systemCode = Md5Utils.hash(macAddress).toUpperCase();
          String systemCode = "EA60BF27E27CE853EEBF4E8BACF69CCA";
          String RSAPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNMGBEQTyKC+2zh2CUxEDI8M3jSpSFIwDjW1JLCzJCQDTclGqX/A3DWsS+PMrFfRxd0w9rIoLx1DjF2KpJmAzUKpFHtptm8tWPAaPgcl58x7zJvnYUHIMcejXhUZfqE8qHVVQeNaUGxq2Nn9S2s+dFVJ9zSc327mS9Ym0xt2wTYQIDAQAB";
          String RSAPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0wYERBPIoL7bOHYJTEQMjwzeNKlIUjAONbUksLMkJANNyUapf8DcNaxL48ysV9HF3TD2sigvHUOMXYqkmYDNQqkUe2m2by1Y8Bo+ByXnzHvMm+dhQcgxx6NeFRl+oTyodVVB41pQbGrY2f1Laz50VUn3NJzfbuZL1ibTG3bBNhAgMBAAECgYAnewFq4KqHXVg1TP0WYtScVUkoTLdbDqsjE/U3n0XiXXxOXPhNmiAD0Lk+aXASo8oLe4rh8FgFs/Hgj5nkYy9EY2B+e4nzdGkaXpLCYJQL8gYFnh+TlcJnhcKBHkQuBGORVghDWOky0bMyKxdPlO20B8AySThHaQ6k/CWjJFkMKQJBAOdlQbp//cCRImTI1GIW3ghQuqGrOtrQHnLO4My/FsW5elaqKhU3sfAAa+Tk7jWm0cdsu5OYFjvsjzmrea0Y5wsCQQDjAcJCQn275itpTtOjqLDGH0lf2AKFv+DARBDdvZNDULirzUpiMT6xHlWyIu3NXD6oRofvKiF40ADKOJPSsgLDAkEAhLM9Dod4LocNAl9p7RbQHlStsylPh0zzKUQbB1BO7vV/g1Py7lgSY2Daf1oKgho5E/T3XZ1KovL28Eu2a95sIQJAdgITD0jrfgOAa8UrpjdqdgQLq8RqQ0dlOe3oaq1DYcoTxlP5KCR7d63SVMFtp8UdWXMY9U6MifZvgrB4wB4D6wJBAILQrxAtbzMG9qD9jLBjBy6dVpMTGS2NqSUlIHz5CFdGT5d9gLMjLJ5cCovKgdzrX+pyAFmUIy7n3BFkGHtWcTs=";

          JsonObject jsonContainer =new JsonObject();
    //为当前的json对象添加键值对
          jsonContainer.addProperty("systemCode", systemCode);
          jsonContainer.addProperty("startDate",  "2022-12-01 00:00:00");
          jsonContainer.addProperty("finishedDate", "2022-12-31 00:00:00");

    //加密
          String encrypt = RsaUtil.encrypt(String.valueOf(jsonContainer), RSAPublicKey);
    //解密
          String decrypt = RsaUtil.decrypt(encrypt, RSAPrivateKey);
          log.info(123);
      }catch (Exception e){

      }





// 第一次使用时获取,获取后保存公私钥,不要重复获取
//生成秘钥
Map<String, String> stringStringMap = RsaUtils.generateKeyPair();
String RSAPublicKey = stringStringMap.get(PUBLIC_KEY);
String RSAPrivateKey = stringStringMap.get(PRIVATE_KEY);
try {
    InetAddress inetAddress = InetAddress.getLocalHost();
    String macAddress = SystemUtil.getMacAddress(inetAddress);
    //String systemCode = Md5Utils.hash(macAddress).toUpperCase();
    String systemCode = "机器码";
    String RSAPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNMGBEQTyKC+2zh2CUxEDI8M3jSpSFIwDjW1JLCzJCQDTclGqX/A3DWsS+PMrFfRxd0w9rIoLx1DjF2KpJmAzUKpFHtptm8tWPAaPgcl58x7zJvnYUHIMcejXhUZfqE8qHVVQeNaUGxq2Nn9S2s+dFVJ9zSc327mS9Ym0xt2wTYQIDAQAB";
    String RSAPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0wYERBPIoL7bOHYJTEQMjwzeNKlIUjAONbUksLMkJANNyUapf8DcNaxL48ysV9HF3TD2sigvHUOMXYqkmYDNQqkUe2m2by1Y8Bo+ByXnzHvMm+dhQcgxx6NeFRl+oTyodVVB41pQbGrY2f1Laz50VUn3NJzfbuZL1ibTG3bBNhAgMBAAECgYAnewFq4KqHXVg1TP0WYtScVUkoTLdbDqsjE/U3n0XiXXxOXPhNmiAD0Lk+aXASo8oLe4rh8FgFs/Hgj5nkYy9EY2B+e4nzdGkaXpLCYJQL8gYFnh+TlcJnhcKBHkQuBGORVghDWOky0bMyKxdPlO20B8AySThHaQ6k/CWjJFkMKQJBAOdlQbp//cCRImTI1GIW3ghQuqGrOtrQHnLO4My/FsW5elaqKhU3sfAAa+Tk7jWm0cdsu5OYFjvsjzmrea0Y5wsCQQDjAcJCQn275itpTtOjqLDGH0lf2AKFv+DARBDdvZNDULirzUpiMT6xHlWyIu3NXD6oRofvKiF40ADKOJPSsgLDAkEAhLM9Dod4LocNAl9p7RbQHlStsylPh0zzKUQbB1BO7vV/g1Py7lgSY2Daf1oKgho5E/T3XZ1KovL28Eu2a95sIQJAdgITD0jrfgOAa8UrpjdqdgQLq8RqQ0dlOe3oaq1DYcoTxlP5KCR7d63SVMFtp8UdWXMY9U6MifZvgrB4wB4D6wJBAILQrxAtbzMG9qD9jLBjBy6dVpMTGS2NqSUlIHz5CFdGT5d9gLMjLJ5cCovKgdzrX+pyAFmUIy7n3BFkGHtWcTs=";

    JsonObject jsonContainer =new JsonObject();
    //为当前的json对象添加键值对
    jsonContainer.addProperty("systemCode", systemCode);
    jsonContainer.addProperty("finishedDate", "2022-12-31 00:00:00");

    //加密
    String encrypt = RsaUtil.encrypt(String.valueOf(jsonContainer), RSAPublicKey);
    //解密
    String decrypt = RsaUtil.decrypt(encrypt1, RSAPrivateKey);
}catch (Exception e){

}
package com.ruoyi.common.utils;

import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.apache.commons.codec.binary.Base64;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.HashMap;
import java.util.Map;

public class RsaUtil {

    /**
     * 类型
     */
    public static final String ENCRYPT_TYPE = "RSA";

    /**
     * 获取公钥的key
     */
    public static final String PUBLIC_KEY = "RSAPublicKey";

    /**
     * 获取私钥的key
     */
    public static final String PRIVATE_KEY = "RSAPrivateKey";

    /**
     * 公钥加密
     * @param content 要加密的内容
     * @param publicKey 公钥
     */
    public static String encrypt(String content, PublicKey publicKey) {
        try{
            RSA rsa = new RSA(null,publicKey);
            return rsa.encryptBase64(content, KeyType.PublicKey);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 公钥加密
     * @param content 要加密的内容
     * @param publicKey 公钥
     */
    public static String encrypt(String content, String publicKey) {
        try{
            RSA rsa = new RSA(null,publicKey);
            return rsa.encryptBase64(content, KeyType.PublicKey);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 私钥解密
     * @param content 要解密的内容
     * @param privateKey 私钥
     */
    public static String decrypt(String content, PrivateKey privateKey) {
        try {
            RSA rsa = new RSA(privateKey,null);
            return rsa.decryptStr(content, KeyType.PrivateKey);
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 私钥解密
     * @param content 要解密的内容
     * @param privateKey 私钥
     */
    public static String decrypt(String content, String privateKey) {
        try {
            RSA rsa = new RSA(privateKey,null);
            return rsa.decryptStr(content, KeyType.PrivateKey);
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取公私钥-请获取一次后保存公私钥使用
     * @return
     */
    public static Map<String,String> generateKeyPair() {
        try {
            KeyPair pair = SecureUtil.generateKeyPair(ENCRYPT_TYPE);
            PrivateKey privateKey = pair.getPrivate();
            PublicKey publicKey = pair.getPublic();
            // 获取 公钥和私钥 的 编码格式(通过该 编码格式 可以反过来 生成公钥和私钥对象)
            byte[] pubEncBytes = publicKey.getEncoded();
            byte[] priEncBytes = privateKey.getEncoded();

            // 把 公钥和私钥 的 编码格式 转换为 Base64文本 方便保存
            String pubEncBase64 = Base64.encodeBase64String(pubEncBytes);
            String priEncBase64 = Base64.encodeBase64String(priEncBytes);

            Map<String, String> map = new HashMap<String, String>(2);
            map.put(PUBLIC_KEY,pubEncBase64);
            map.put(PRIVATE_KEY,priEncBase64);

            return map;
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
log.info("##Time Checking Service Running:{}",LocalDateTime.now());
  String encryptMacAddress = SystemUtil.getMacAddressMd5();
  
       if (Math.abs(datePoorDay - i1) >1){
public class SystemUtil {
    public static String getMacAddressMd5() {
        String encryptMacAddress = null;
        String macAddress= "";
        try {
            RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
            if (redisUtil.hasKey("pcMacAddress")){
                macAddress = redisUtil.get("pcMacAddress").toString();
            }else{
                Map<String, Object> localInetMac = NetworkUtil.getLocalInetMac();
                if (localInetMac == null){
                    throw new Exception("获取mac地址异常:null");
                }
                macAddress = localInetMac.get("mac").toString();
                redisUtil.set("pcMacAddress",macAddress);
            }
            log.info("MAC:{}",macAddress);
            encryptMacAddress = Md5Utils.hash(macAddress).toUpperCase();
        } catch (Exception e) {
            log.error("获取mac地址异常:{}",e.toString());
        }
        return encryptMacAddress;
    }
    
    
    _____________________________________________________________
         String systemMacName = ni.getName();
            log.info("address:{},canonicalHostName:{},hostAddress:{},hostName:{},displayName:{},hardwareAddress:{},systemMacName:{}",
                    address,
                    canonicalHostName,
                    hostAddress,
                    hostName,
                    displayName,
                    hardwareAddress,systemMacName);
            String macAddressName = "enp2s0";
    
    
    
    
---------------------------------------------------------------------------------
   public class PcActivationCodeService implements ApplicationRunner {

    private final PcActivationMapper pcActivationMapper;

    private RedisUtil redisUtil;
    @Override
    public void run(ApplicationArguments args) {
        try {
            redisUtil.del(URLConstant.MAC_ADDRESS_TYPE_NAME);
            redisUtil.del("pcMacAddress");
            redisUtil.del("pcActivation");
            String encryptMacAddress = SystemUtil.getMacAddressMd5();
            //查询是否有激活码
            PcActivation pcActivation = pcActivationMapper.selectPcActivationSingle();
            if (pcActivation != null) {



文档更新时间: 2023-12-18 03:26   作者:JeffreyCheung