鞍钢鲅鱼圈能源管控系统后端代码
houzhongjian
2025-02-25 1af10d0e70ce1844f60cb340ad83a9246bc7c0bc
Merge branch 'master' of http://172.16.8.100:8888/r/ansteel
已添加6个文件
已删除24个文件
已修改2个文件
1460 ■■■■ 文件已修改
ansteel-biz/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/OAuth2Client.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/UserClient.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/oauth2/OAuth2AccessTokenRespDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/oauth2/OAuth2CheckTokenRespDTO.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/user/UserInfoRespDTO.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/user/UserUpdateReqDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/config/FeignTokenInterceptor.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/auth/AuthController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/DemoController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/vo/DemoPageReqVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/vo/DemoRespVO.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/vo/DemoSaveReqVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/app/ip/AppAreaController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/app/ip/vo/AppAreaNodeRespVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/app/package-info.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/package-info.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/dataobject/demo/DemoDO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/dataobject/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/mysql/demo/DemoMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/mysql/package-info.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/mq/common/constant/CommonConstant.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/mq/common/constant/RoutingConstant.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/mq/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/service/demo/DemoService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/service/demo/DemoServiceImpl.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/service/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/SecurityUtils.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/SpringContextUtils.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/token/IailabClient.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/pom.xml
@@ -111,6 +111,11 @@
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.iailab</groupId>
            <artifactId>iailab-common-mq</artifactId>
        </dependency>
    </dependencies>
    <build>
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/OAuth2Client.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/UserClient.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/oauth2/OAuth2AccessTokenRespDTO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/oauth2/OAuth2CheckTokenRespDTO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/user/UserInfoRespDTO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/client/dto/user/UserUpdateReqDTO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/config/FeignTokenInterceptor.java
对比新文件
@@ -0,0 +1,43 @@
package com.iailab.module.ansteel.config;
import com.iailab.module.ansteel.util.token.IailabClient;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Configuration
public class FeignTokenInterceptor implements RequestInterceptor {
    @Autowired
    private IailabClient iailabClient;
    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 从当前请求上下文中获取Token
        String token = getTokenFromCurrentRequest();
        if (token == null) {
            // 如果没有获取到Token,从system-server中获取token
            token = iailabClient.getToken();
            if (token!= null) {
                requestTemplate.header(HttpHeaders.AUTHORIZATION, token);
            }
            Long tenantId = iailabClient.getTenantId();
            if (tenantId != null) {
                requestTemplate.header("tenant-id", String.valueOf(tenantId));
            }
        }
    }
    private String getTokenFromCurrentRequest() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes!= null) {
            return attributes.getRequest().getHeader(HttpHeaders.AUTHORIZATION);
        }
        return null;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/auth/AuthController.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/DemoController.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/vo/DemoPageReqVO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/vo/DemoRespVO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/demo/vo/DemoSaveReqVO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/admin/package-info.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/app/ip/AppAreaController.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/app/ip/vo/AppAreaNodeRespVO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/app/package-info.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/controller/package-info.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/dataobject/demo/DemoDO.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/dataobject/package-info.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/mysql/demo/DemoMapper.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/dal/mysql/package-info.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/mq/common/constant/CommonConstant.java
对比新文件
@@ -0,0 +1,26 @@
package com.iailab.module.ansteel.mq.common.constant;
/**
 * @Description: 通用常量
 */
public interface CommonConstant {
    //压缩空气调度方案code
    String COMPRESSOR_CODE = "Air";
    //蒸汽调度方案code
    String STEAM_CODE = "sha01";
    //氧气班平衡计划方案code
    String OXYGEN_ONE_CODE = "oxygen01";
    //氧气系统优化调度决策方案code
    String OXYGEN_TWO_CODE = "oxygen02";
    //超上限
    String EXCEEDING_UPPER_LIMIT = "UpperLimit";
    //超下限
    String EXCEEDING_LOWER_LIMIT = "LowerLimit";
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/mq/common/constant/RoutingConstant.java
对比新文件
@@ -0,0 +1,12 @@
package com.iailab.module.ansteel.mq.common.constant;
public interface RoutingConstant {
    String EXCHANGE = "FastAnsteel";
    // 预测模型完成路由
    String Iailab_Model_PredictFinish = "Iailab.Model.PredictFinish";
    //预警消息路由
    String Iailab_Model_Alarm = "Iailab.Model.Alarm";
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/mq/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.ansteel.mq;
ansteel-biz/src/main/java/com/iailab/module/ansteel/service/demo/DemoService.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/service/demo/DemoServiceImpl.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/service/package-info.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/SecurityUtils.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/SpringContextUtils.java
对比新文件
@@ -0,0 +1,47 @@
package com.iailab.module.ansteel.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
 * Spring Context 工具类
 *
 * @author Mark sunlightcs@gmail.com
 */
@Component
public class SpringContextUtils implements ApplicationContextAware {
    public static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }
    public static Object getBean(String name) {
        return applicationContext.getBean(name);
    }
    public static <T> T getBean(Class<T> requiredType) {
        return applicationContext.getBean(requiredType);
    }
    public static <T> T getBean(String name, Class<T> requiredType) {
        return applicationContext.getBean(name, requiredType);
    }
    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }
    public static boolean isSingleton(String name) {
        return applicationContext.isSingleton(name);
    }
    public static Class<? extends Object> getType(String name) {
        return applicationContext.getType(name);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/token/IailabClient.java
对比新文件
@@ -0,0 +1,145 @@
package com.iailab.module.ansteel.util.token;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月21日
 */
@Slf4j
@Component
public class IailabClient {
    /**
     * 平台地址
     */
    @Value("${iailab.token.base-url}")
    private String BASE_URL;
    /**
     * 租户编号
     */
    @Value("${iailab.token.tenant-id}")
    private String TENANT_ID;
    /**
     * 客户端信息
     */
    @Value("${iailab.token.client-id}")
    private String CLIENT_ID;
    @Value("${iailab.token.client-secret}")
    private String CLIENT_SECRET;
    @Value("${iailab.token.username}")
    private String USERNAME;
    @Value("${iailab.token.password}")
    private String PASSWORD;
    private static final String GRAND_TYPE = "password";
    private static final String SCOPE = "user.read user.write";
    private static final RestTemplate restTemplate = new RestTemplate();
    // 鉴权token
    private String accessToken;
    // 刷新token
    private String refreshToken;
    // 鉴权token过期时间
    private Long expireTime;
    /**
     * 用户名密码方式获取平台token
     */
    private synchronized void authenticate() {
        log.info("获取平台token");
        // 1.1 构建请求头
        HttpHeaders headers = new HttpHeaders();
        addClientHeader(headers);
        // 1.2 构建authenticate请求URL
        String authenticateUrl = BASE_URL + "/oauth2/token?"
                // 密码模式的参数
                + "grant_type=" + GRAND_TYPE
                + "&username=" + USERNAME
                + "&password=" + PASSWORD
                + "&scope=" + SCOPE;
        // 2. 执行请求
        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
                authenticateUrl,
                HttpMethod.POST,
                new org.springframework.http.HttpEntity<>(headers),
                new ParameterizedTypeReference<Map<String, Object>>() {
                });
        Assert.isTrue(exchange.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
        log.info(exchange.toString());
        Map<String, Object> authMap = exchange.getBody();
        accessToken = authMap.get("access_token").toString();
        refreshToken = authMap.get("refresh_token").toString();
        expireTime = Long.valueOf(authMap.get("expires_time").toString());
    }
    private synchronized void refreshToken() {
        log.info("刷新token");
        // 1.1 构建请求头
        HttpHeaders headers = new HttpHeaders();
        addClientHeader(headers);
        // 1.2 构建authenticate请求URL
        String authenticateUrl = BASE_URL + "/system/auth/client-refresh-token?refreshToken=" + refreshToken
                + "&clientId=" + CLIENT_ID;
        // 2. 执行请求
        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
                authenticateUrl,
                HttpMethod.POST,
                new org.springframework.http.HttpEntity<>(headers),
                new ParameterizedTypeReference<Map<String, Object>>() {
                });
        Assert.isTrue(exchange.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
        Map<String, Object> authMap = exchange.getBody();
        //刷新token过期,重新获取token
        if (!ObjectUtils.isEmpty(authMap.get("code"))) {
            Integer code = Integer.valueOf(authMap.get("code").toString());
            if (code == 401) {
                authenticate();
            }
        } else {
            accessToken = authMap.get("access_token").toString();
            expireTime = Long.valueOf(authMap.get("expires_time").toString());
        }
    }
    private void addClientHeader(HttpHeaders headers) {
        // client 拼接,需要 BASE64 编码
        String client = CLIENT_ID + ":" + CLIENT_SECRET;
        client = Base64Utils.encodeToString(client.getBytes(StandardCharsets.UTF_8));
        headers.add("Authorization", "Basic " + client);
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.set("tenant-id", getTenantId().toString());
    }
    public String getToken() {
        //第一次请求或者token过期,需要重新获取token
        if(ObjectUtils.isEmpty(accessToken)) {
            authenticate();
        } else if (expireTime < System.currentTimeMillis() / 1000) {
            refreshToken();
        }
        return accessToken;
    }
    public Long getTenantId() {
        return Long.valueOf(TENANT_ID);
    }
}
pom.xml
@@ -154,17 +154,10 @@
                <version>${revision}</version>
            </dependency>
            <!-- Spring 核心 -->
            <dependency>
                <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <!-- 消息队列相关 -->
            <dependency>
                <groupId>com.iailab</groupId>
                <artifactId>iailab-common-env</artifactId>
                <artifactId>iailab-common-mq</artifactId>
                <version>${revision}</version>
            </dependency>
@@ -182,12 +175,6 @@
            </dependency>
            <dependency>
                <groupId>com.iailab</groupId>
                <artifactId>iailab-common-websocket</artifactId>
                <version>${revision}</version>
            </dependency>
            <dependency>
                <groupId>org.springdoc</groupId> <!-- 接口文档 UI:默认 -->
                <artifactId>springdoc-openapi-ui</artifactId>
                <version>${springdoc.version}</version>
@@ -197,22 +184,12 @@
                <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId> <!-- 接口文档 UI:knife4j【网关专属】 -->
                <artifactId>knife4j-gateway-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
            <!-- DB 相关 -->
            <dependency>
                <groupId>com.iailab</groupId>
                <artifactId>iailab-common-mybatis</artifactId>
                <version>${revision}</version>
            </dependency>
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-webflux-ui</artifactId>
                <version>${springdoc.version}</version>
            </dependency>
            <dependency>
@@ -225,11 +202,7 @@
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId> <!-- 代码生成器,使用它解析表结构 -->
                <version>${mybatis-plus-generator.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 -->
@@ -279,29 +252,11 @@
                <version>${redisson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.dameng</groupId>
                <artifactId>DmJdbcDriver18</artifactId>
                <version>${dm8.jdbc.version}</version>
            </dependency>
            <!-- RPC 远程调用相关 -->
            <dependency>
                <groupId>com.iailab</groupId>
                <artifactId>iailab-common-rpc</artifactId>
                <version>${revision}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
                <version>${lock4j.version}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>redisson-spring-boot-starter</artifactId>
                        <groupId>org.redisson</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- 监控相关 -->
@@ -372,38 +327,11 @@
                <version>${easyexcel.verion}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-core</artifactId> <!-- 文件类型的识别 -->
                <version>${tika-core.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>cn.smallbun.screw</groupId>
                <artifactId>screw-core</artifactId> <!-- 实现数据库文档 -->
                <version>${screw.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.freemarker</groupId>
                        <artifactId>freemarker</artifactId> <!-- 移除 Freemarker 依赖,采用 Velocity 作为模板引擎 -->
                    </exclusion>
                    <exclusion>
                        <groupId>com.alibaba</groupId>
                        <artifactId>fastjson</artifactId> <!-- 最新版screw-core1.0.5依赖fastjson1.2.73存在漏洞,移除。 -->
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
@@ -413,26 +341,9 @@
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>${guice.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>transmittable-thread-local</artifactId> <!-- 解决 ThreadLocal 父子线程的传值问题 -->
                <version>${transmittable-thread-local.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId> <!-- 解决 ftp 连接 -->
                <version>${commons-net.version}</version>
            </dependency>
            <dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId> <!-- 解决 sftp 连接 -->
                <version>${jsch.version}</version>
            </dependency>
            <dependency>