Browse Source

初始化

master
review512jwy@163.com 3 months ago
commit
7ab6f9fdea
  1. 16
      .gitignore
  2. 15
      data-center-business-common/.gitignore
  3. 41
      data-center-business-common/pom.xml
  4. 82
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/Constants.java
  5. 150
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceAdminConfig.java
  6. 18
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceContextHolder.java
  7. 102
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceInterceptor.java
  8. 13
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DynamicRouteDataSource.java
  9. 95
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/FlywayConfig.java
  10. 121
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/RestTemplateConfig.java
  11. 33
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/TaskExecutorConfig.java
  12. 36
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/exception/BusinessException.java
  13. 26
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/exception/MsgCodeException.java
  14. 26
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/PropertySourceYumFactory.java
  15. 38
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/MsgLanguageChange.java
  16. 25
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/Msg_CN.java
  17. 25
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/Msg_EN.java
  18. 25
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/Msg_JP.java
  19. 52
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/BaseResponse.java
  20. 401
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/PageInfo.java
  21. 64
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/PageResponse.java
  22. 36
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/ResponseCode.java
  23. 108
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/SimpleDataResponse.java
  24. 106
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/ssl/SslUtil.java
  25. 188
      data-center-business-common/src/main/resources/config/language/msg/msg_cn.yml
  26. 188
      data-center-business-common/src/main/resources/config/language/msg/msg_en.yml
  27. 188
      data-center-business-common/src/main/resources/config/language/msg/msg_jp.yml
  28. 15
      data-center-business-controller/.gitignore
  29. 7
      data-center-business-controller/buildPush-prod.sh
  30. 18
      data-center-business-controller/buildPush-staging.ps1
  31. 13
      data-center-business-controller/buildPush-staging.sh
  32. 21
      data-center-business-controller/dockerfile
  33. 404
      data-center-business-controller/pom.xml
  34. 19
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/BusinessApplication.java
  35. 59
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/ApiConfig.java
  36. 38
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/CorsConfigurer.java
  37. 125
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/CrosXssFilter.java
  38. 32
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/MdcLogEnhancerFilter.java
  39. 299
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/RequestWrapper.java
  40. 20
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/WebMvcConfig.java
  41. 38
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/advice/CustomExceptionHandler.java
  42. 30
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/advice/GlobalXssHandler.java
  43. 82
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/AccessApiInterceptor.java
  44. 10
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/AccessRequired.java
  45. 194
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java
  46. 162
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AssetClassController.java
  47. 368
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/BuildingController.java
  48. 396
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java
  49. 61
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CompanyController.java
  50. 257
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DashboardController.java
  51. 74
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataController.java
  52. 104
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataProviderController.java
  53. 101
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataProviderGatewayInfoController.java
  54. 164
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataSrcConfigController.java
  55. 166
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DeviceCategoryController.java
  56. 631
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DeviceController.java
  57. 156
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/FloorController.java
  58. 187
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/GatewayClientsController.java
  59. 38
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/HealthController.java
  60. 50
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MailController.java
  61. 71
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MonitorInfoController.java
  62. 332
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MonitoringAssetController.java
  63. 134
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MqttController.java
  64. 173
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/NotificationConfigController.java
  65. 43
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/Oidc.java
  66. 56
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java
  67. 124
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/ProjectController.java
  68. 182
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/RiliPersonnasController.java
  69. 271
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/SpaceController.java
  70. 64
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/SysEnvController.java
  71. 151
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/TargetConfigController.java
  72. 178
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/TenantController.java
  73. 75
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/UserOperationLogsController.java
  74. 43
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/VersionInfoController.java
  75. 116
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/oidc/AutoLoginFilter.java
  76. 26
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/oidc/Jwks.java
  77. 162
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/oidc/SecurityConfig.java
  78. 49
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/swagger/SwaggerConfig.java
  79. 59
      data-center-business-controller/src/main/resources/assembly.xml
  80. BIN
      data-center-business-controller/src/main/resources/config/NotoSansJP-Regular.ttf
  81. BIN
      data-center-business-controller/src/main/resources/config/VLGothicregular.ttf
  82. 170
      data-center-business-controller/src/main/resources/config/application.properties
  83. 4
      data-center-business-controller/src/main/resources/config/log4j.properties
  84. 61
      data-center-business-controller/src/main/resources/config/logback-boot.xml
  85. 4
      data-center-business-controller/src/main/resources/config/version.properties
  86. 13
      data-center-business-controller/src/main/resources/db/migration/V10__gateway_clients.sql
  87. 7
      data-center-business-controller/src/main/resources/db/migration/V11__sys_env.sql
  88. 141
      data-center-business-controller/src/main/resources/db/migration/V12__asset_class.sql
  89. 16
      data-center-business-controller/src/main/resources/db/migration/V13_user_operation_logs.sql
  90. 50
      data-center-business-controller/src/main/resources/db/migration/V14__effective_period.sql
  91. 2
      data-center-business-controller/src/main/resources/db/migration/V15__gateway_clients_alter.sql
  92. 27
      data-center-business-controller/src/main/resources/db/migration/V16__aurora_read_url.sql
  93. 79
      data-center-business-controller/src/main/resources/db/migration/V17__mqtt_statistics.sql
  94. 30
      data-center-business-controller/src/main/resources/db/migration/V18__iotcore.sql
  95. 7
      data-center-business-controller/src/main/resources/db/migration/V19__gateway_client_status_history.sql
  96. 5
      data-center-business-controller/src/main/resources/db/migration/V1__init_schema.sql
  97. 5
      data-center-business-controller/src/main/resources/db/migration/V20__mail_roid_log.sql
  98. 2
      data-center-business-controller/src/main/resources/db/migration/V21__iotcore_type.sql
  99. 2
      data-center-business-controller/src/main/resources/db/migration/V22__gateway_clients_modify.sql
  100. 12
      data-center-business-controller/src/main/resources/db/migration/V23__file_key.sql

16
.gitignore

@ -0,0 +1,16 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
/data-center-business-controller/tmp/
application-*.properties

15
data-center-business-common/.gitignore

@ -0,0 +1,15 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
application-*.properties

41
data-center-business-common/pom.xml

@ -0,0 +1,41 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.techsor</groupId>
<artifactId>data-center-business</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>data-center-business-common</artifactId>
<name>data-center-business-common</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>data-center-business-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>data-center-business-util</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk18on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.80</version>
</dependency>
</dependencies>
</project>

82
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/Constants.java

@ -0,0 +1,82 @@
package com.techsor.datacenter.business.common;
/**
* @author Mr.Jiang
* @time 2022年5月20日 下午2:01:41
*/
public class Constants {
public static final String APP_NAME = "data-center-business:";
public static final int LOGIN_ATTEMPTS = 5;
public static final long LOGIN_LOCK_PERIOD = 3600000;//ms
public static final String LOGIN_FAIL = APP_NAME + "login_fail:%s";// 失败次数,过期时间为1小时
public static final String LOGIN_LOCK = APP_NAME + "login_lock:%s";// 锁定标志,值为 true,过期时间为1小时
// This is very important, do not change it casually
public static final String CERT_FILE_PATH="tokyobuilding-certs/";
// This is very important, do not change it casually
public static final String DES_SALT = "ci3b512jwy199511";
// User ID, login name, enterprise ID, token
public static final String ACCESS_TOKEN_FORMAT = "RequestHeader:AccessToken:{0}:{1}:{2}:{3}";
public static final String CAPTCHA_VERIFICATION = "CAPTCHA:VERIFICATION:";
// User ID, login name, enterprise ID, token
public static final String MFA_TOKEN_FORMAT = "RequestHeader:MfaToken:{0}:{1}:{2}:{3}";
// User ID, login name, enterprise ID, token
public static final String MFA_SERECT_FORMAT = "RequestHeader:MfaSecret:{0}:{1}:{2}:{3}";
// User ID, login name, enterprise ID, token
public static final String MFA_EMAIL_FORMAT = "RequestHeader:MfaEmail:{0}:{1}:{2}:{3}";
public static final String AURORA_URL_FORMAT = "jdbc:mysql://{0}:3306/third?useSSL=false";
public static final String DATASOURCE_PREFIX = "dataSourceForCompany_";
public static final String THIRD_DB_PREFIX = "data_center_dongjian_";
//Key for storing clientId sent.
public static final String SYS_ENV_GATEWAY_ALERT_MAIL_FLAG = "SYS_ENV_GATEWAY_ALERT_MAIL_FLAG_";
//For mqtt gateway offline email.
public static final String SYS_ENV_GATEWAY_ALERT_MAIL_ADDRESS = "SYS_ENV_GATEWAY_ALERT_MAIL_ADDRESS";
public static final String SYS_ENV_GATEWAY_OFFLINE_MAIL_ADDRESS = "SYS_ENV_GATEWAY_OFFLINE_MAIL_ADDRESS";
//OFF-0/ON-1
public static final String SYS_ENV_GATEWAY_ALERT_MAIL_SWITCH = "SYS_ENV_GATEWAY_ALERT_MAIL_SWITCH";
//User operation log multi type.
public static final String USER_OPERATION_LOG_TYPE_USER_LOGIN = "USER_LOG";
public static final String USER_OPERATION_LOG_TYPE_PROJECT_LOG = "PROJECT_LOG";
public static final String USER_OPERATION_LOG_TYPE_ASSET_LOG = "ASSET_LOG";
public static final String USER_OPERATION_LOG_TYPE_CLASS_LOG = "CLASS_LOG";
public static final String USER_OPERATION_LOG_TYPE_DEVICE_LOG = "DEVICE_LOG";
public static final String USER_OPERATION_LOG_TYPE_DEVICE_TYPE_LOG = "DEVICE_TYPE_LOG";
public static final String USER_OPERATION_LOG_TYPE_ALERT_TEMPLATE_LOG = "ALERT_TEMPLATE_LOG";
public static final String USER_OPERATION_LOG_TYPE_FORWARD_LOG = "FORWARD_LOG";
public static final String USER_OPERATION_LOG_TYPE_DATASOURCE_LOG = "DATASOURCE_LOG";
public static final String USER_OPERATION_LOG_TYPE_IOTCORE_LOG = "IOTCORE_LOG";
public static final String USER_OPERATION_LOG_TYPE_SLACK_LOG = "SLACK_LOG";
public static final String USER_OPERATION_LOG_TYPE_TEAMS_LOG = "TEAMS_LOG";
public static final String USER_OPERATION_LOG_TYPE_DATA_PROVIDER_LOG = "PROVIDER_LOG";
public static final String USER_OPERATION_LOG_TYPE_GATEWAY_INFO_LOG = "DATA_PROVIDER_GATEWAY_INFO";
public static final String USER_OPERATION_LOG_TYPE_TENANT_LOG = "TENANT_LOG";
public static final String USER_OPERATION_LOG_TYPE_RILIPERSONAS_LOG = "PERSONNAS_LOG";
public static final String GATEWAY_CLIENTS_STATISTICS = "gateway_clients_statistics:{0}";
public static final String OLD_FILE_BUCKET = "operation-records";
public static final String S3_DATA_PATH = "data";
// public static final String SPACE_S3_DATA_PATH = S3_DATA_PATH +"/space/";
//
// public static final String ASSET_S3_DATA_PATH = S3_DATA_PATH +"/asset/";
public static final String S3_PDF_IAMGE_PATH = "datacenter-storeage/";
public static final String RILI_API_TOKEN = "RILI_API_TOKEN";
}

150
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceAdminConfig.java

@ -0,0 +1,150 @@
package com.techsor.datacenter.business.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.techsor.datacenter.business.common.Constants;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Configuration
public class DataSourceAdminConfig {
private static Logger logger = LoggerFactory.getLogger(DataSourceAdminConfig.class);
@Value("${spring.datasource.admin.name}")
private String name;
@Value("${spring.datasource.admin.url}")
private String url;
@Value("${spring.datasource.admin.username}")
private String username;
@Value("${spring.datasource.admin.password}")
private String password;
@Value("${spring.datasource.admin.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.admin.type}")
private String type;
@Value("${dynamic.jdbc.url}")
private String dynamicJdbcUrl;
private final static String THIRD_DB_PREFIX = Constants.THIRD_DB_PREFIX;
private final static String DATASOURCE_PREFIX = Constants.DATASOURCE_PREFIX;
@Primary
@Bean
public DataSource adminDatasource() {
DruidDataSource datasource = DataSourceBuilder.create()
.url(url)
.username(username)
.password(password).driverClassName(driverClassName)
.type(DruidDataSource.class)
.build();
return datasource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource adminDatasource) {
return new JdbcTemplate(adminDatasource);
}
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration globalConfiguration() {
return new org.apache.ibatis.session.Configuration();
}
@Bean
public SqlSessionFactory sqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dynamicDataSource); // 设置为动态数据源
sessionFactory.setConfiguration(globalConfiguration());//驼峰设置mybatis.configuration.map-underscore-to-camel-case不生效处理
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/**/*.xml")); // 设置Mapper XML文件的位置
return sessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
public DataSource dynamicDataSource(JdbcTemplate jdbcTemplate, DataSource adminDatasource) {
DynamicRouteDataSource dynamicDataSource = new DynamicRouteDataSource();
Map<Object, Object> targetDataSources = new HashMap<>();
//Requirement for 2024-07-16: Small enterprises and large enterprises share the same database. For large enterprises, parent_id = 1
String sql="\t\tSELECT\n" +
"\t\t\tbcom.id,\n" +
"\t\t\tbcom.company_name companyName\n" +
"\t\tFROM\n" +
"\t\t\tdata_center_new.basic_company bcom\n" +
"\t\tWHERE bcom.flag != 1 and (parent_id = 1 or parent_id = -1)";
jdbcTemplate.query(sql,rs->{
DruidDataSource dataSource1 = new DruidDataSource();
String dbName=THIRD_DB_PREFIX+rs.getInt("id");
String dbUrl=String.format(dynamicJdbcUrl,dbName);
dataSource1.setUrl(dbUrl);
dataSource1.setUsername(username);
dataSource1.setPassword(password);
dataSource1.setDriverClassName(driverClassName);
dataSource1.setDbType(type);
targetDataSources.put(DATASOURCE_PREFIX+rs.getInt("id"), dataSource1);
});
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(adminDatasource); // 设置默认数据源
return dynamicDataSource;
}
public void updateTargetDataSources(DynamicRouteDataSource dynamicRouteDataSource, long companyId) {
DruidDataSource dataSource = new DruidDataSource();
String dbUrl = String.format(dynamicJdbcUrl, THIRD_DB_PREFIX+companyId);
dataSource.setUrl(dbUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driverClassName);
dataSource.setDbType(type);
Map<Object, Object> targetDataSources = new HashMap<>(dynamicRouteDataSource.getResolvedDataSources());
targetDataSources.put(DATASOURCE_PREFIX +companyId, dataSource);
dynamicRouteDataSource.setTargetDataSources(targetDataSources);
dynamicRouteDataSource.afterPropertiesSet(); // 重新加载数据源配置
}
}

18
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceContextHolder.java

@ -0,0 +1,18 @@
package com.techsor.datacenter.business.common.config;
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setCurrentDataSourceKey(String dataSourceKey) {
contextHolder.set(dataSourceKey);
}
public static String getCurrentDataSourceKey() {
return contextHolder.get();
}
public static void clearCurrentDataSourceKey() {
contextHolder.remove();
}
}

102
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceInterceptor.java

@ -0,0 +1,102 @@
package com.techsor.datacenter.business.common.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import com.techsor.datacenter.business.common.Constants;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
@Slf4j
@Component
public class DataSourceInterceptor implements HandlerInterceptor {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String companyId = request.getHeader("companyId");
if (companyId != null && !companyId.isEmpty()) {
//Find the ID of the large enterprise.
long topCompanyId = getTopCompanyId(companyId);
String dataSourceKey = Constants.DATASOURCE_PREFIX + topCompanyId; // 创建数据源键
log.info("当前数据源为:" + dataSourceKey);
DataSourceContextHolder.setCurrentDataSourceKey(dataSourceKey);
}
return true;
}
public long getTopCompanyId(String companyId) {
String sql="SELECT "
+ " bcom.id, bcom.parent_id parentId"
+ " FROM data_center_new.basic_company bcom "
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
AtomicLong parentId = new AtomicLong(0);
AtomicLong id = new AtomicLong(0);
jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId"));
id.set(rs.getLong("id"));
});
//Recursive logic
if (1 == parentId.get() || -1 == parentId.get()) {
return id.get();
} else {
return getTopCompanyId(parentId.get()+"");
}
}
/**
* 获取所有的一级企业
* @return
*/
public List<Long> getTopCompanyIdList(){
List<Long> companyIdList=new ArrayList<>();
String sql="\t\tSELECT\n" +
"\t\t\tbcom.id,\n" +
"\t\t\tbcom.company_name companyName\n" +
"\t\tFROM\n" +
"\t\t\tdata_center_new.basic_company bcom\n" +
"\t\tWHERE (bcom.parent_id=1 or bcom.parent_id=-1) and bcom.flag != 1";
jdbcTemplate.query(sql,rs->{
companyIdList.add(rs.getLong("id"));
});
// // 用于存放去重后的 topCompanyIdList
// List<Long> topCompanyIdList = new ArrayList<>();
// Set<Long> seenIds = new HashSet<>(); // 用于快速判断重复
// // 遍历 companyIdList
// for (Integer companyId : companyIdList) {
// Long topCompanyId = getTopCompanyId(companyId.toString());
// // 如果 topCompanyId 未出现在 seenIds 中,则添加
// if (seenIds.add(topCompanyId)) {
// topCompanyIdList.add(topCompanyId);
// }
// }
return companyIdList;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
DataSourceContextHolder.clearCurrentDataSourceKey(); // 清理数据源键
}
}

13
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DynamicRouteDataSource.java

@ -0,0 +1,13 @@
package com.techsor.datacenter.business.common.config;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicRouteDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 返回当前线程要使用的数据源的键
return DataSourceContextHolder.getCurrentDataSourceKey();
}
}

95
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/FlywayConfig.java

@ -0,0 +1,95 @@
package com.techsor.datacenter.business.common.config;
import org.flywaydb.core.Flyway;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.flyway.FlywayProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import com.techsor.datacenter.business.common.Constants;
import jakarta.annotation.PostConstruct;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
@Configuration
@EnableConfigurationProperties(FlywayProperties.class)
public class FlywayConfig {
@Autowired
private FlywayProperties flywayProperties;
@Value("${spring.datasource.admin.url}")
private String url;
@Value("${spring.datasource.admin.username}")
private String username;
@Value("${spring.datasource.admin.password}")
private String password;
@Value("${spring.datasource.admin.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.admin.type}")
private String type;
@Value("${dynamic.jdbc.url}")
private String dynamicJdbcUrl;
private final static String THIRD_DB_PREFIX = Constants.THIRD_DB_PREFIX;
private final static String DATASOURCE_PREFIX = Constants.DATASOURCE_PREFIX;
@Bean
public Object migrateDatabases(JdbcTemplate jdbcTemplate) {
List<String> databaseUrls = getDatabaseUrls(jdbcTemplate); // 获取数据库URL列表的方法
for (String url : databaseUrls) {
DataSource dataSource = createDataSource(url);
Flyway flyway = Flyway.configure()
.dataSource(dataSource)
.locations(flywayProperties.getLocations().toArray(new String[0]))
.schemas(flywayProperties.getSchemas().toArray(new String[0]))
.load();
// 执行repair操作
flyway.repair();
// 执行基准化操作
flyway.baseline();
// 执行迁移操作
flyway.migrate();
}
return new Object();
}
private DataSource createDataSource(String url) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(flywayProperties.getDriverClassName());
dataSource.setUrl(url);
dataSource.setUsername(flywayProperties.getUser());
dataSource.setPassword(flywayProperties.getPassword());
return dataSource;
}
private List<String> getDatabaseUrls(JdbcTemplate jdbcTemplate) {
String sql="\t\tSELECT\n" +
"\t\t\tbcom.id,\n" +
"\t\t\tbcom.company_name companyName\n" +
"\t\tFROM\n" +
"\t\t\tdata_center_new.basic_company bcom\n" +
"\t\tWHERE bcom.flag != 1 and (parent_id = 1 or parent_id = -1)";
List<String> resultList=new ArrayList<>();
jdbcTemplate.query(sql,rs->{
String dbName=THIRD_DB_PREFIX+rs.getInt("id");
String dbUrl=String.format(dynamicJdbcUrl,dbName);
resultList.add(dbUrl);
});
// resultList.add("jdbc:mysql://rm-bp11k2zm2fr7864428o.mysql.rds.aliyuncs.com:3306/data_center_third?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai");
return resultList;
}
}

121
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/RestTemplateConfig.java

@ -0,0 +1,121 @@
package com.techsor.datacenter.business.common.config;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.io.SocketConfig;
import org.apache.hc.core5.ssl.SSLContextBuilder;
import org.apache.hc.core5.ssl.TrustStrategy;
import org.apache.hc.core5.util.Timeout;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
/***
* okhttp connectionFactory
* **/
@Configuration
public class RestTemplateConfig {
@Value("${ok.http.connect-timeout:5}")
private Integer connectTimeout;
@Value("${ok.http.read-timeout:5}")
private Integer readTimeout;
@Value("${ok.http.write-timeout:5}")
private Integer writeTimeout;
@Value("${ok.http.max-idle-connections:6}")
private Integer maxIdleConnections;
@Value("${ok.http.keep-alive-duration:6}")
private Long keepAliveDuration;
/**
* RestTemplate
*/
@Bean("httpRestTemplate")
public RestTemplate httpRestTemplate() {
ClientHttpRequestFactory factory = httpRequestFactory();
RestTemplate restTemplate = new RestTemplate(factory);
return restTemplate;
}
@Bean("trustRestTemplate")
public RestTemplate trustRestTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
// Create an SSLContext that trusts all SSL certificates
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true)
.build();
// Create a SSLConnectionSocketFactory with the SSLContext
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
sslContext, NoopHostnameVerifier.INSTANCE);
// Create a PoolingHttpClientConnectionManager
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setDefaultSocketConfig(SocketConfig.custom()
.setSoTimeout(Timeout.ofMilliseconds(60000)) // Socket read timeout
.build());
// Configure timeouts using RequestConfig
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(Timeout.ofMilliseconds(10000)) // 10 seconds
.setResponseTimeout(Timeout.ofMilliseconds(60000)) // 60 seconds
.build();
// Create a HttpClient with the SSLContext and timeouts
HttpClient httpClient = HttpClientBuilder.create()
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig)
.setConnectionManagerShared(true) // Share the connection manager
.build();
// Create a HttpComponentsClientHttpRequestFactory and set the HttpClient
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setHttpClient(httpClient);
// Create and return the RestTemplate
return new RestTemplate(factory);
}
public ClientHttpRequestFactory httpRequestFactory() {
return new OkHttp3ClientHttpRequestFactory(okHttpConfigClient());
}
public OkHttpClient okHttpConfigClient(){
return new OkHttpClient().newBuilder()
.connectionPool(pool())
.connectTimeout(connectTimeout, TimeUnit.SECONDS)
.readTimeout(readTimeout, TimeUnit.SECONDS)
.writeTimeout(writeTimeout, TimeUnit.SECONDS)
.hostnameVerifier((hostname, session) -> true)
.build();
}
public ConnectionPool pool() {
return new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.SECONDS);
}
}

33
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/TaskExecutorConfig.java

@ -0,0 +1,33 @@
package com.techsor.datacenter.business.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
public class TaskExecutorConfig {
@Bean("threadPoolTaskExecutor")
public TaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(10);
executor.setThreadNamePrefix("my_executor_thread");
executor.initialize();
return executor;
}
@Bean("taskScheduler")
public TaskScheduler taskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler
= new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setThreadNamePrefix(
"ThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}
}

36
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/exception/BusinessException.java

@ -0,0 +1,36 @@
package com.techsor.datacenter.business.common.exception;
/**
* Handles business exceptions
*
*/
public class BusinessException extends RuntimeException {
/**
* Instantiates a new business exception
*
* @param msg Exception message
*/
public BusinessException(String msg) {
super(msg);
}
/**
* Instantiates a new business exception
*
* @param cause The cause of the exception
*/
public BusinessException(Throwable cause) {
super(cause);
}
/**
* Instantiates a new business exception
*
* @param msg Exception message
* @param cause The cause of the exception
*/
public BusinessException(String msg, Throwable cause) {
super(msg, cause);
}
}

26
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/exception/MsgCodeException.java

@ -0,0 +1,26 @@
package com.techsor.datacenter.business.common.exception;
/**
*
* @author jwy-style
*
*/
public class MsgCodeException extends RuntimeException{
private String message;
public MsgCodeException(String message) {
super(message);
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

26
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/PropertySourceYumFactory.java

@ -0,0 +1,26 @@
package com.techsor.datacenter.business.common.language;
import java.io.IOException;
import java.util.List;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
/**
* @PropertySource To parse .yum files, it is necessary to specify this factory
*/
public class PropertySourceYumFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
if (resource == null) {
return super.createPropertySource(name, resource);
}
List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
return sources.get(0);
}
}

38
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/MsgLanguageChange.java

@ -0,0 +1,38 @@
package com.techsor.datacenter.business.common.language.msg;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MsgLanguageChange {
@Autowired
private Msg_EN msgEn;
@Autowired
private Msg_CN msgCn;
@Autowired
private Msg_JP msgJp;
/**
* 参数映射
* @param languaType
* @param code
* @return
*/
public String getParameterMapByCode(Integer languaType,String code){
String msg = null;
if(null != languaType){
if(languaType == 0){//中文
msg = MapUtils.getString(msgCn.getParameterMap(), code, code);
}else if(languaType == 1){//英文
msg = MapUtils.getString(msgEn.getParameterMap(), code, code);
}else if(languaType == 2){//日语
msg = MapUtils.getString(msgJp.getParameterMap(), code, code);
}
}else{
msg = MapUtils.getString(msgJp.getParameterMap(), code, code);
}
return msg;
}
}

25
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/Msg_CN.java

@ -0,0 +1,25 @@
package com.techsor.datacenter.business.common.language.msg;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import com.techsor.datacenter.business.common.language.PropertySourceYumFactory;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Component
@PropertySource(value = "classpath:/config/language/msg/msg_cn.yml", encoding = "UTF-8", factory = PropertySourceYumFactory.class)
@ConfigurationProperties(prefix = "msgcn")
public class Msg_CN {
private Map<String,String> parameterMap;
private Map<String,String> reportMap;
}

25
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/Msg_EN.java

@ -0,0 +1,25 @@
package com.techsor.datacenter.business.common.language.msg;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import com.techsor.datacenter.business.common.language.PropertySourceYumFactory;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Component
@PropertySource(value = "classpath:/config/language/msg/msg_en.yml", encoding = "UTF-8", factory = PropertySourceYumFactory.class)
@ConfigurationProperties(prefix = "msgen")
public class Msg_EN {
private Map<String,String> parameterMap;
private Map<String,String> reportMap;
}

25
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/language/msg/Msg_JP.java

@ -0,0 +1,25 @@
package com.techsor.datacenter.business.common.language.msg;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import com.techsor.datacenter.business.common.language.PropertySourceYumFactory;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Component
@PropertySource(value = "classpath:/config/language/msg/msg_jp.yml", encoding = "UTF-8", factory = PropertySourceYumFactory.class)
@ConfigurationProperties(prefix = "msgjp")
public class Msg_JP {
private Map<String,String> parameterMap;
private Map<String,String> reportMap;
}

52
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/BaseResponse.java

@ -0,0 +1,52 @@
package com.techsor.datacenter.business.common.response;
import io.swagger.v3.oas.annotations.media.Schema;
/**
*
* @author jwy-style
*
*/
public class BaseResponse<T> {
/**
* Return code
*/
@Schema(description = "Status code, 0 or 200 indicates success", example = "0")
private int code;
/**
* Message
*/
@Schema(description = "Simple message", example = "Server error")
private String msg = "success";
public BaseResponse() {
}
public BaseResponse(int code) {
this.code = code;
}
public BaseResponse(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

401
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/PageInfo.java

@ -0,0 +1,401 @@
package com.techsor.datacenter.business.common.response;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageSerializable;
/**
* 对Page<E>结果进行包装
* <p/>
* 新增分页的多项属性主要参考:http://bbs.csdn.net/topics/360010907
*
* @author liuzh/abel533/isea533
* @version 3.3.0
* @since 3.2.2
* 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class PageInfo<T> extends PageSerializable<T> {
public static final int DEFAULT_NAVIGATE_PAGES = 8;
public static final PageInfo EMPTY = new PageInfo(Collections.emptyList(), 0);
/**
* 当前页
*/
private int pageNum;
/**
* 每页的数量
*/
private int pageSize;
/**
* 当前页的数量
*/
private int size;
/**
* 由于startRow和endRow不常用这里说个具体的用法
* 可以在页面中"显示startRow到endRow 共size条数据"
* 当前页面第一个元素在数据库中的行号
*/
private long startRow;
/**
* 当前页面最后一个元素在数据库中的行号
*/
private long endRow;
/**
* 总页数
*/
private int pages;
/**
* 前一页
*/
private int prePage;
/**
* 下一页
*/
private int nextPage;
/**
* 是否为第一页
*/
private boolean isFirstPage = false;
/**
* 是否为最后一页
*/
private boolean isLastPage = false;
/**
* 是否有前一页
*/
private boolean hasPreviousPage = false;
/**
* 是否有下一页
*/
private boolean hasNextPage = false;
/**
* 导航页码数
*/
private int navigatePages;
/**
* 所有导航页号
*/
private int[] navigatepageNums;
/**
* 导航条上的第一页
*/
private int navigateFirstPage;
/**
* 导航条上的最后一页
*/
private int navigateLastPage;
public PageInfo() {
}
/**
* 包装Page对象
*
* @param list
*/
public PageInfo(List<? extends T> list) {
this(list, DEFAULT_NAVIGATE_PAGES);
}
/**
* 包装Page对象
*
* @param list page结果
* @param navigatePages 页码数量
*/
public PageInfo(List<? extends T> list, int navigatePages) {
super(list);
if (list instanceof Page) {
Page page = (Page) list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.pages = page.getPages();
this.size = page.size();
//由于结果是>startRow的,所以实际的需要+1
if (this.size == 0) {
this.startRow = 0;
this.endRow = 0;
} else {
this.startRow = page.getStartRow() + 1;
//计算实际的endRow(最后一页的时候特殊)
this.endRow = this.startRow - 1 + this.size;
}
} else if (list instanceof Collection) {
this.pageNum = 1;
this.pageSize = list.size();
this.pages = this.pageSize > 0 ? 1 : 0;
this.size = list.size();
this.startRow = 0;
this.endRow = list.size() > 0 ? list.size() - 1 : 0;
}
if (list instanceof Collection) {
calcByNavigatePages(navigatePages);
}
}
public static <T> PageInfo<T> of(List<? extends T> list) {
return new PageInfo<T>(list);
}
public static <T> PageInfo<T> of(List<? extends T> list, int navigatePages) {
return new PageInfo<T>(list, navigatePages);
}
/**
* 返回一个空的 Pageinfo 对象
*
* @return
*/
public static <T> PageInfo<T> emptyPageInfo() {
return EMPTY;
}
public void calcByNavigatePages(int navigatePages) {
setNavigatePages(navigatePages);
//计算导航页
calcNavigatepageNums();
//计算前后页,第一页,最后一页
calcPage();
//判断页面边界
judgePageBoudary();
}
/**
* 计算导航页
*/
private void calcNavigatepageNums() {
//当总页数小于或等于导航页码数时
if (pages <= navigatePages) {
navigatepageNums = new int[pages];
for (int i = 0; i < pages; i++) {
navigatepageNums[i] = i + 1;
}
} else { //当总页数大于导航页码数时
navigatepageNums = new int[navigatePages];
int startNum = pageNum - navigatePages / 2;
int endNum = pageNum + navigatePages / 2;
if (startNum < 1) {
startNum = 1;
//(最前navigatePages页
for (int i = 0; i < navigatePages; i++) {
navigatepageNums[i] = startNum++;
}
} else if (endNum > pages) {
endNum = pages;
//最后navigatePages页
for (int i = navigatePages - 1; i >= 0; i--) {
navigatepageNums[i] = endNum--;
}
} else {
//所有中间页
for (int i = 0; i < navigatePages; i++) {
navigatepageNums[i] = startNum++;
}
}
}
}
/**
* 计算前后页第一页最后一页
*/
private void calcPage() {
if (navigatepageNums != null && navigatepageNums.length > 0) {
navigateFirstPage = navigatepageNums[0];
navigateLastPage = navigatepageNums[navigatepageNums.length - 1];
if (pageNum > 1) {
prePage = pageNum - 1;
}
if (pageNum < pages) {
nextPage = pageNum + 1;
}
}
}
/**
* 判定页面边界
*/
private void judgePageBoudary() {
isFirstPage = pageNum == 1;
isLastPage = pageNum == pages || pages == 0;
hasPreviousPage = pageNum > 1;
hasNextPage = pageNum < pages;
}
/**
* 是否包含内容
*/
public boolean hasContent() {
return this.size > 0;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public long getStartRow() {
return startRow;
}
public void setStartRow(long startRow) {
this.startRow = startRow;
}
public long getEndRow() {
return endRow;
}
public void setEndRow(long endRow) {
this.endRow = endRow;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getPrePage() {
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public boolean isIsFirstPage() {
return isFirstPage;
}
public void setIsFirstPage(boolean isFirstPage) {
this.isFirstPage = isFirstPage;
}
public boolean isIsLastPage() {
return isLastPage;
}
public void setIsLastPage(boolean isLastPage) {
this.isLastPage = isLastPage;
}
public boolean isHasPreviousPage() {
return hasPreviousPage;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public boolean isHasNextPage() {
return hasNextPage;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public int getNavigatePages() {
return navigatePages;
}
public void setNavigatePages(int navigatePages) {
this.navigatePages = navigatePages;
}
public int[] getNavigatepageNums() {
return navigatepageNums;
}
public void setNavigatepageNums(int[] navigatepageNums) {
this.navigatepageNums = navigatepageNums;
}
public int getNavigateFirstPage() {
return navigateFirstPage;
}
public int getNavigateLastPage() {
return navigateLastPage;
}
public void setNavigateFirstPage(int navigateFirstPage) {
this.navigateFirstPage = navigateFirstPage;
}
public void setNavigateLastPage(int navigateLastPage) {
this.navigateLastPage = navigateLastPage;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("PageInfo{");
sb.append("pageNum=").append(pageNum);
sb.append(", pageSize=").append(pageSize);
sb.append(", size=").append(size);
sb.append(", startRow=").append(startRow);
sb.append(", endRow=").append(endRow);
sb.append(", total=").append(total);
sb.append(", pages=").append(pages);
sb.append(", list=").append(list);
sb.append(", prePage=").append(prePage);
sb.append(", nextPage=").append(nextPage);
sb.append(", isFirstPage=").append(isFirstPage);
sb.append(", isLastPage=").append(isLastPage);
sb.append(", hasPreviousPage=").append(hasPreviousPage);
sb.append(", hasNextPage=").append(hasNextPage);
sb.append(", navigatePages=").append(navigatePages);
sb.append(", navigateFirstPage=").append(navigateFirstPage);
sb.append(", navigateLastPage=").append(navigateLastPage);
sb.append(", navigatepageNums=");
if (navigatepageNums == null) {
sb.append("null");
} else {
sb.append('[');
for (int i = 0; i < navigatepageNums.length; ++i) {
sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);
}
sb.append(']');
}
sb.append('}');
return sb.toString();
}
}

64
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/PageResponse.java

@ -0,0 +1,64 @@
package com.techsor.datacenter.business.common.response;
import com.github.pagehelper.PageInfo;
import java.util.Map;
/**
*
* @author jwy-style
*
* @param <T>
*/
public class PageResponse<T> extends BaseResponse<T>{
private T data;
private Map<String,String> errorMap;
public PageResponse() {
}
public PageResponse(int code) {
super(code);
}
public PageResponse(int code, String msg) {
super(code, msg);
}
public PageResponse(int code,String msg,Map<String,String> errorMap){
super(code, msg);
this.errorMap = errorMap;
}
public static PageResponse success(Object data){
PageResponse pageResponse = new PageResponse();
pageResponse.setData((PageInfo) data);
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
return pageResponse;
}
public Map<String, String> getErrorMap() {
return errorMap;
}
public void setErrorMap(Map<String, String> errorMap) {
this.errorMap = errorMap;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}

36
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/ResponseCode.java

@ -0,0 +1,36 @@
package com.techsor.datacenter.business.common.response;
/**
*
* @author jwy-style
*
*/
public class ResponseCode {
/** Success */
public static final int OK = 0;
/**
* The request has succeeded. The desired response headers or body will be returned with this response.
*/
public static final int SUCCESS = 200;
// Authorization failed
public static final int AUTHORIZE_FAILED = 401;
// Internal server error
public static final int SERVER_ERROR = 500;
public static final String SERVER_ERROR_MSG = "service error";
/** System error */
public static final int SYSTEM_ERROR = 20000;
public static final int MSG_ERROR = 20001;
public static final int MSG_DATA_NULL_ERROR = 20002;
public static final int MSG_DATA_ERROR = 20003;
public static final int BUSINESS_ERROR = 30001;
}

108
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/response/SimpleDataResponse.java

@ -0,0 +1,108 @@
package com.techsor.datacenter.business.common.response;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Map;
/**
*
* @author jwy-style
*
* @param <T>
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SimpleDataResponse<T> extends BaseResponse<T> {
/**
* Single object
*/
@Schema(description = "Returned data", example = "object")
private T data;
/**
* The parameters error map
*/
@Schema(description = "Detailed error information", example = "{\"name\":\"Length is too long\",\"age\":\"Age is too high\",\"weight\":\"Weight exceeds limit\"}")
private Map<String, String> errorMap;
public SimpleDataResponse() {
super();
}
public SimpleDataResponse(int code) {
super(code);
}
public SimpleDataResponse(int code, String msg) {
super(code, msg);
}
/**
* Response result with an error map
*
* @param code The response code
* @param msg The response message
* @param errorMap The map of errors
*/
public SimpleDataResponse(int code, String msg, Map<String, String> errorMap) {
this(code, msg);
this.errorMap = errorMap;
}
/**
* Successful response
*
* @return A SimpleDataResponse indicating success
*/
public static SimpleDataResponse success() {
return new SimpleDataResponse(ResponseCode.SUCCESS, "Success");
}
/**
* Successful response with multiple data rows
*
* @param rows The number of rows
* @return A SimpleDataResponse indicating success with the number of rows
*/
public static SimpleDataResponse success(int rows) {
return new SimpleDataResponse(ResponseCode.SUCCESS, "Success: " + rows);
}
/**
* Successful response with a data object
*
* @param data The data object to include in the response
* @return A SimpleDataResponse indicating success with the data object
*/
public static SimpleDataResponse success(Object data) {
SimpleDataResponse comm = success();
comm.setData(data);
return comm;
}
public static SimpleDataResponse fail(int code,String message){
return new SimpleDataResponse(code,message);
}
public static SimpleDataResponse fail(int code,String message,Object data){
SimpleDataResponse simpleDataResponse= new SimpleDataResponse(code,message);
simpleDataResponse.setData(data);
return simpleDataResponse;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Map<String, String> getErrorMap() {
return errorMap;
}
public void setErrorMap(Map<String, String> errorMap) {
this.errorMap = errorMap;
}
}

106
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/ssl/SslUtil.java

@ -0,0 +1,106 @@
package com.techsor.datacenter.business.common.ssl;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMDecryptorProvider;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
import org.springframework.core.io.ClassPathResource;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.Security;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
public class SslUtil {
public static SSLSocketFactory getSocketFactory(final String caCrtFile,
final String crtFile, final String keyFile, final String password)
throws Exception {
Security.addProvider(new BouncyCastleProvider());
// load CA certificate
X509Certificate caCert = null;
// FileInputStream fis = new FileInputStream(caCrtFile);
ClassPathResource resourcefis = new ClassPathResource(caCrtFile);
InputStream fis = resourcefis.getInputStream();
BufferedInputStream bis = new BufferedInputStream(fis);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
caCert = (X509Certificate) cf.generateCertificate(bis);
// System.out.println(caCert.toString());
}
// load client certificate
ClassPathResource resourcebis = new ClassPathResource(crtFile);
bis = new BufferedInputStream(resourcebis.getInputStream());
X509Certificate cert = null;
while (bis.available() > 0) {
cert = (X509Certificate) cf.generateCertificate(bis);
// System.out.println(caCert.toString());
}
// load client private key
ClassPathResource resourcekey = new ClassPathResource(keyFile);
InputStream in = resourcekey.getInputStream();
InputStreamReader inReader=new InputStreamReader (in,"UTF-8");
PEMParser pemParser = new PEMParser(inReader);
Object object = pemParser.readObject();
PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder()
.build(password.toCharArray());
JcaPEMKeyConverter converter = new JcaPEMKeyConverter()
.setProvider("BC");
KeyPair key;
if (object instanceof PEMEncryptedKeyPair) {
System.out.println("Encrypted key - we will use provided password");
key = converter.getKeyPair(((PEMEncryptedKeyPair) object)
.decryptKeyPair(decProv));
} else {
System.out.println("Unencrypted key - no password needed");
key = converter.getKeyPair((PEMKeyPair) object);
}
pemParser.close();
// CA certificate is used to authenticate server
KeyStore caKs = KeyStore.getInstance(KeyStore.getDefaultType());
caKs.load(null, null);
caKs.setCertificateEntry("ca-certificate", caCert);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(caKs);
// client key and certificates are sent to server so it can authenticate
// us
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null, null);
ks.setCertificateEntry("certificate", cert);
ks.setKeyEntry("private-key", key.getPrivate(), password.toCharArray(),
new java.security.cert.Certificate[] { cert });
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
.getDefaultAlgorithm());
kmf.init(ks, password.toCharArray());
// finally, create SSL socket factory
SSLContext context = SSLContext.getInstance("TLSv1.2");
// SSLContext context = SSLContext.getInstance("SSL");
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
return context.getSocketFactory();
}
}

188
data-center-business-common/src/main/resources/config/language/msg/msg_cn.yml

@ -0,0 +1,188 @@
msgcn:
parameterMap:
serviceError: 内部服务错误
tokenError: 接口鉴权失败
apikeyError: apikey认证失败
excelEmpty: 表格为空
lineNum: 第{0}行:
paramsFormatError: 参数格式错误
verifCodeExpired: 验证码过期
verifCodeError: 验证码错误
accountExpired: 该账号已过期
pwdError: 密码错误
userNotExist: 用户不存在
noOperationAuth: 无操作权限
projectNameHasExisted: 项目名称已存在
projectNameDoesNotExist: 项目名称不存在
buildingNameHasExisted: 楼宇名称已存在
buildingNameDoesNotExist: 楼宇名称不存在
floorNameHasExisted: 楼层名称已存在
floorNameDoesNotExist: 楼层名称不存在
buildingNotFound: 不存在该楼宇
fbNotSameCompany: 需与楼宇归属于同一企业
spaceNameHasExisted: 房间名称已存在
floorNotFound: 不存在该楼层
rfNotSameCompany: 需与楼层归属于同一企业
assetNameHasExisted: 资产名称已存在
assetSymbolHasExisted: 资产记号已存在
assetNameDoesNotExist: 资产名称不存在
assetSymbolDoesNotExist: 资产记号不存在
spaceNotFound: 不存在该房间
faNotSameCompany: 需与房间归属于同一企业
bindedDevice: 绑定了设备
deviceTypeNotExist: 设备类型不存在
excelBuildingLineDuplicate: 表格内存在相同的数据
dbBuildingDuplicate: 平台已存在此楼宇
dbFloorDuplicate: 平台已存在此楼层
dbSpaceDuplicate: 平台已存在此房间
dbAssetDuplicate: 平台已存在此资产
excelCompanyNameIsNull: 需填写企业名称
excelBuildingNameIsNull: 需填写楼宇
excelFloorNameIsNull: 需填写楼层
excelSpaceNameIsNull: 需填写房间
excelSpaceOrFloorNameIsNull: 需填写楼层和房间
excelCompanyNameNotExist: 平台不存在此企业名称
dataSrcNotExist: 数据源不存在
dataSrcEmpty: 数据源为空
expressionMapNotExist: 表达式不存在
expressionVariableMapNotExist: 表达式变量不存在
deviceNameNotExist: 设备名称不存在
deviceIdNotExist: 请配置$.deviceId
### 新增部分
datasrcMethodTypeEmpty: 数据源来源法为空
datasrcMethodTypeNotExist: 不存在该类型的数据来源
datasrcNameEmpty: 数据源名称为空
datasrcStateNotExist: 数据源状态不正确
datasrcCodeExists: 数据源编码已存在
datasrcAddFail: 数据源添加失败
datasrcUpdateFail: 数据源更新失败
mqttParamsMissing: MQTT参数配置缺失
mqttURLMissing: MQTT URL缺失
mqttClientIdMissing: MQTT ClientId缺失
mqttUsernameMissing: MQTT 用户名缺失
mqttPasswordMissing: MQTT 密码缺失
mqttTopicMissing: MQTT Topic缺失
mqttConnectTimeoutInvalid: MQTT 连接超时无效,小于120秒或者大于0秒
restParamsMissing: REST参数配置缺失
restURLMissing: REST URL缺失
restMethodMissing: REST Method缺失
restMethodNotSupport: REST Method不支持GET
restHeadersMissing: REST headers Missing
caPathMissing: MQTT CA证书路径缺失
crtPathMissing: Crt证书路径不存在
keyPathMissing: Key证书路径不存在
onlyOneRecord: 只能设置一条记录.
forwardConfigNotFound: 未查询到该转发配置信息
deviceConfigInfoNotBelongToCompany: 您无权对该设备配置信息进行操作
userOrEmailNotExist: 用户名或邮箱不存在
notAllDeviceExist: 有设备不存在或不属于该企业账号
redInExcelNotFilled: 存在红色必填内容没有填写,请检查
alertNotificationMethodNotCorrect: 告警通知方式需要为 MAIL,API,API_AND_MAIL
alertLevelNotCorrect: 告警等级需要为 高,中,低
targetCodeNotExist: 转发目标代码不存在
wsClientIDNotExist: wsClientID不存在
notNumberOrComma: 模板Id仅支持数字和,
wrongTargetIdFormat: 业务Id格式不正确,请检查,
category_1: zeta
category_2: Delta 故障
category_3: Delta 计测
category_4: Delta 累计
category_5: 大金
category_6: nittan
mfaCodeError: 安全码错误
mfaCodeIsNull: 需要填写MFA安全码
mfaEmailCodeSubject: MFA邮箱验证码
mfaEmailCodeContent: 请使用该验证码登录:<u>{0}</u>
assetClassNameHasExisted: 分类名称已存在
classBigNotFound: 大类不存在
classMediumNotFound: 中类不存在
classSmallNotFound: 小类不存在
notSameCompany: 不在同一企业下
excelAssetClassBigIsNull: 需填写分类(大)
excelAssetClassMediumIsNull: 需填写分类(中)
excelAssetClassBigOrMediumIsNull: 需填写分类(大)和分类(中)
dbAssetClassBigDuplicate: 平台已存在此分类(大)
dbAssetClassMediumDuplicate: 平台已存在此分类(中)
dbAssetClassSmallDuplicate: 平台已存在此分类(小)
dbAssetClassBigNotExist: 平台不存在此分类(大)
dbAssetClassMediumNotExist: 平台不存在此分类(中)
dbAssetClassSmallNotExist: 平台不存在此分类(小)
binded: 信息已经存在
gatewayNotExist: gateway不存在
USER_LOG: 用户日志
PROJECT_LOG: 项目管理日志
ASSET_LOG: 资产管理日志
CLASS_LOG: 资产类别日志
DEVICE_LOG: 设备管理日志
DEVICE_TYPE_LOG: 设备类别日志
ALERT_TEMPLATE_LOG: 告警模板日志
FORWARD_LOG: 转发目标日志
DATASOURCE_LOG: 数据来源日志
urlNotCorrect: Url不正确,请检查
noDeviceIdImportData: 导入的数据中没有设备Id,请检查表格中的设备Id或检查模板是否正确
alertTemplateIdNotExist: 告警模板Id不存在,请检查
mqttNameHasExisted: 该名称已存在
IOTCORE_LOG: IoT Core日志
assetClassUsed: 分类已被使用,不允许删除
IoTCoreNotExist: IoT Core不存在
deviceIsImporting: 设备正在导入,稍后再试
bindedFloor: 需先删除楼层
bindedSpace: 需先删除房间
bindedAsset: 需先删除资产
udfBuildingIdHasExisted: 自定义楼宇ID已存在
udfFloorIdHasExisted: 自定义楼层ID已存在
udfSpaceIdHasExisted: 自定义房间ID已存在
excelUdfFloorIdIsNotFound: 自定义楼宇ID不存在
excelUdfBuildingIdIsNull: 需填写自定义楼宇ID
excelUdfBuildingIdIsNotFound: 自定义楼宇ID不存在
excelUdfFloorIdIsNull: 需填写自定义楼层ID
excelUdfSpaceIdIsNull: 需填写自定义房间ID
excelSpaceOrFloorIdIsNull: 需填写楼层自定义ID和房间自定义ID
fileNameIsEmpty: 上传的文件名为空
zipIsEmptyOrSaveFailed: 上传的ZIP文件为空或保存失败
excelNotFoundInZip: Excel文件未在ZIP中找到
buildingCustomId: 楼宇自定义ID
spaceCustomId: 房间自定义ID
buildingDevice: 建筑设备
electricalDevice: 电气设备
ventilationDevice: 给排气设备
sanitaryDevice: 卫生设备
fireProtectionDevice: 消防设备
otherDevice: 其他设备
img1: 图片-1
img2: 图片-2
img3: 图片-3
customRoomIdNotUnique: 该房间自定义ID不唯一
customRoomIdNotExist: 房间自定义ID不存在
fileNotExist: 文件不存在
assetSymbol: 资产记号
userManual: 用户手册
deviceFile: 设备文件
assetSymbolNotExist: 资产记号不存在
assetSymbolNotUnique: 该资产记号不唯一
consecutiveLoginFail: 登录失败次数过多,请等待{0}分{1}秒后再登录
loginFailCount: 已登录失败{0}次,剩余尝试登录次数:{1}
img1Description: 图片-1描述
img2Description: 图片-2描述
img3Description: 图片-3描述
assetSymbolIsNull: 需填写资产记号
assetNameIsNull: 需填写资产名称
slackHasExisted: 此slack已存在
teamsHasExisted: 此teams已存在
SLACK_LOG: slack
TEAMS_LOG: teams
dataProviderNameHasExisted: 此提供方已存在
PROVIDER_LOG: 数据提供方
DATA_PROVIDER_GATEWAY_INFO: 网关情报
gatewayInfoNameHasExisted: 此网关已存在
tenantUdfIdHasExisted: 租户自定义ID已存在
noTenantUdfId: 无租户自定义ID
spaceIdIsUsed: 房间Id已被使用
excelSpaceIdIsDuplicated: 导入数据中的房间Id重复
spaceIdIsDuplicated: 空间ID已经被使用了,空间ID:
spaceIsUsed: 空间ID已经被使用了
tenantUdfIdNotFound: 租户自定义ID不存在
spaceIdOrSpaceNameIsNull: 需填写房间Id或房间名称
spaceIdDumplicated: 空间Id已存在
spaceIdNotExist: 空间Id不存在
personnasSpaceIdCannotBeNull: 人员空间Id不能为空

188
data-center-business-common/src/main/resources/config/language/msg/msg_en.yml

@ -0,0 +1,188 @@
msgen:
parameterMap:
serviceError: Internal service error.
tokenError: API authentication failed.
apikeyError: apikey authentication failed.
excelEmpty: Excel is empty.
lineNum: "Lines {0}:"
paramsFormatError: Parameter format error.
verifCodeExpired: Verification code expired.
verifCodeError: Verification code error.
accountExpired: The account has expired.
pwdError: Password error.
userNotExist: User does not exist.
noOperationAuth: No operation permission.
projectNameHasExisted: Project name already exists.
projectNameDoesNotExist: Project name does not exist.
buildingNameHasExisted: Building name already exists.
buildingNameDoesNotExist: Building name does not exist.
floorNameHasExisted: Floor name already exists.
floorNameDoesNotExist: Floor name does not exist.
buildingNotFound: Building not found.
fbNotSameCompany: Must belong to the same company as the building.
spaceNameHasExisted: Room name already exists.
floorNotFound: Floor not found.
rfNotSameCompany: Must belong to the same company as the floor.
assetNameHasExisted: Asset name already exists.
assetSymbolHasExisted: Asset symbol already exists.
assetNameDoesNotExist: Asset name does not exist.
assetSymbolDoesNotExist: 资产记号不存在
spaceNotFound: Room not found.
faNotSameCompany: Must belong to the same company as the room.
bindedDevice: Device is bound.
deviceTypeNotExist: Device type does not exist.
excelBuildingLineDuplicate: Duplicate data exists in the spreadsheet.
dbBuildingDuplicate: This building already exists on the platform.
dbFloorDuplicate: 平台已存在此楼层
dbSpaceDuplicate: 平台已存在此房间
dbAssetDuplicate: 平台已存在此资产
excelCompanyNameIsNull: Company name needs to be filled out.
excelBuildingNameIsNull: Building name needs to be filled out.
excelFloorNameIsNull: 需填写楼层
excelSpaceNameIsNull: 需填写房间
excelSpaceOrFloorNameIsNull: 需填写楼层和房间
excelCompanyNameNotExist: The platform does not have this company name.
dataSrcNotExist: Data source does not exist.
dataSrcEmpty: Data source is empty.
expressionMapNotExist: Expression does not exist.
expressionVariableMapNotExist: Expression variable does not exist.
deviceNameNotExist: Device name does not exist.
deviceIdNotExist: Please configure $.deviceId.
### 新增部分
datasrcMethodTypeEmpty: The source method of the data source is empty.
datasrcMethodTypeNotExist: The specified type of data source does not exist.
datasrcNameEmpty: The name of the data source is empty.
datasrcStateNotExist: The state of the data source is incorrect.
datasrcCodeExists: The code for the data source already exists.
datasrcAddFail: Failed to add the data source.
datasrcUpdateFail: Failed to update the data source.
mqttParamsMissing: MQTT parameter setting error.
mqttURLMissing: MQTT URL error.
mqttClientIdMissing: MQTT ClientId error.
mqttUsernameMissing: MQTT username error.
mqttPasswordMissing: MQTT password error.
mqttTopicMissing: MQTT Topic error.
mqttConnectTimeoutInvalid: MQTT connection timeout error.
restParamsMissing: REST parameter setting error.
restURLMissing: REST URL error.
restMethodMissing: REST Method error.
restMethodNotSupport: The REST Method does not support GET.
restHeadersMissing: REST headers missing.
caPathMissing: Missing path for the MQTT CA certificate.
crtPathMissing: Missing path for the Crt certificate.
keyPathMissing: Missing path for the Key certificate.
onlyOneRecord: Only one record can be set.
forwardConfigNotFound: No forwarding configuration information found
deviceConfigInfoNotBelongToCompany: You do not have the authority to operate on the configuration information of this device
userOrEmailNotExist: The username or email does not exist
notAllDeviceExist: There are devices that does not exist or does not belong to the company
redInExcelNotFilled: There is a mandatory red field that has not been filled in. Please check
alertNotificationMethodNotCorrect: Alarm method should be in MAIL,API,API_AND_MAIL
alertLevelNotCorrect: The alert level should be high,middle,low.
targetCodeNotExist: targetCode not exist.
wsClientIDNotExist: wsClientId not exist.
notNumberOrComma: templateId only supports num and ,
wrongTargetIdFormat: Target Id format wrong,
category_1: zeta
category_2: Delta failure
category_3: Delta measurment
category_4: Delta accural
category_5: daikin
category_6: nittan
mfaCodeError: MFA code error
mfaCodeIsNull: MFA code is required
mfaEmailCodeSubject: MFA邮箱验证码
mfaEmailCodeContent: 请使用该验证码登录:<u>{0}</u>
assetClassNameHasExisted: 分类名称已存在
classBigNotFound: 大类不存在
classMediumNotFound: 中类不存在
classSmallNotFound: 小类不存在
notSameCompany: 不在同一企业下
excelAssetClassBigIsNull: 需填写分类(大)
excelAssetClassMediumIsNull: 需填写分类(中)
excelAssetClassBigOrMediumIsNull: 需填写分类(大)和分类(中)
dbAssetClassBigDuplicate: 平台已存在此分类(大)
dbAssetClassMediumDuplicate: 平台已存在此分类(中)
dbAssetClassSmallDuplicate: 平台已存在此分类(小)
dbAssetClassBigNotExist: 平台不存在此分类(大)
dbAssetClassMediumNotExist: 平台不存在此分类(中)
dbAssetClassSmallNotExist: 平台不存在此分类(小)
binded: Already exist
gatewayNotExist: gateway not exist
USER_LOG: User Log
PROJECT_LOG: Project Management Log
ASSET_LOG: Asset Management Log
CLASS_LOG: Asset Category Log
DEVICE_LOG: Device Management Log
DEVICE_TYPE_LOG: Device Type Log
ALERT_TEMPLATE_LOG: Alert Template Log
FORWARD_LOG: Forward Target Log
DATASOURCE_LOG: Data Source Log
urlNotCorrect: url not correct
noDeviceIdImportData: There is no device ID in the imported data. Please check the device ID in the table or check if the template is correct
alertTemplateIdNotExist: alert Template id not exist
mqttNameHasExisted: The name already exists
IOTCORE_LOG: IoT Core Log
assetClassUsed: Classification has already been used, not allowed to delete
IoTCoreNotExist: IoT Core does not exists
deviceIsImporting: These devices are currently importing. Please try again later.
bindedFloor: The floors must be deleted first.
bindedSpace: The rooms must be deleted first.
bindedAsset: The assets must be deleted first.
udfBuildingIdHasExisted: Custom building ID already exists
udfFloorIdHasExisted: Custom floor ID already exists
udfSpaceIdHasExisted: Custom space ID already exists
excelUdfFloorIdIsNotFound: Custom floor ID not found
excelUdfBuildingIdIsNull: Custom building ID is required.
excelUdfBuildingIdIsNotFound: Custom building ID not found
excelUdfFloorIdIsNull: Custom floor ID is required.
excelUdfSpaceIdIsNull: Custom room ID is required.
excelSpaceOrFloorIdIsNull: Both custom floor ID and custom room ID are required.
fileNameIsEmpty: The uploaded file name is empty
zipIsEmptyOrSaveFailed: ZIP file is empty or failed to save
excelNotFoundInZip: Excel file not found in ZIP
buildingCustomId: building custom ID
spaceCustomId: space customId ID
buildingDevice: building device
electricalDevice: electrical device
ventilationDevice: ventilation device
sanitaryDevice: sanitary device
fireProtectionDevice: fire protection device
otherDevice: other device
img1: image-1
img2: image-2
img3: image-3
customRoomIdNotUnique: The custom room ID is not unique within this building
customRoomIdNotExist: Room custom ID does not exist
fileNotExist: file does not exist
assetSymbol: Asset symbol
userManual: User manual
deviceFile: Device file
assetSymbolNotExist: Asset symbol does not exist
assetSymbolNotUnique: The asset symbol is not unique within this building
consecutiveLoginFail: Too many failed login attempts. Please wait {0} minute(s) and {1} second(s) before trying again.
loginFailCount: Login failed {0} times. Remaining login attempts:{1}.
img1Description: image-1 description
img2Description: image-2 description
img3Description: image-3 description
assetSymbolIsNull: Asset symbol is required.
assetNameIsNull: Asset name is required.
slackHasExisted: This Slack already exists
teamsHasExisted: This Teams already exists
SLACK_LOG: slack
TEAMS_LOG: teams
dataProviderNameHasExisted: This data provider already exists
PROVIDER_LOG: Data Provider
DATA_PROVIDER_GATEWAY_INFO: Gateway Information
gatewayInfoNameHasExisted: This gateway already exists
tenantUdfIdHasExisted: Tenant custom ID already exists
noTenantUdfId: Tenant custom ID is required.
spaceIdIsUsed: The space ID is used
excelSpaceIdIsDuplicated: The space ID import is duplicated
spaceIdIsDuplicated: The space ID is duplicated,SpaceUdfIf:
spaceIsUsed: The space is used
tenantUdfIdNotFound: Tenant custom ID not found
spaceIdOrSpaceNameIsNull: Space ID or space name is required.
spaceIdDumplicated: The space ID is duplicated
spaceIdNotExist: Space ID does not exist
personnasSpaceIdCannotBeNull: Personas space ID cannot be null

188
data-center-business-common/src/main/resources/config/language/msg/msg_jp.yml

@ -0,0 +1,188 @@
msgjp:
parameterMap:
serviceError: 内部サービスのエラー
tokenError: インターフェイスの認証に失敗
apikeyError: apikeyの認証に失敗
excelEmpty: フォームが空になっている
lineNum: 行{0}:
paramsFormatError: パラメータのフォーマットエラー
verifCodeExpired: 確認コード期限切れ
verifCodeError: 確認コードエラー
accountExpired: アカウントの有効期限が切れている
pwdError: パスワードエラー
userNotExist: ユーザーが存在しない
noOperationAuth: 操作権限なし
projectNameHasExisted: プロジェクト名がすでにある
projectNameDoesNotExist: プロジェクト名がない
buildingNameHasExisted: 該当ビル名がすでにある
buildingNameDoesNotExist: 該当ビル名がない
floorNameHasExisted: 該当フロア名がすでにある
floorNameDoesNotExist: 該当フロア名がない
buildingNotFound: 該当ビルがない
fbNotSameCompany: ビルと同じ会社に所属してください
spaceNameHasExisted: 該当空間名がすでにある
floorNotFound: 該当フロア名がない
rfNotSameCompany: フロアと同じ会社に所属してください
assetNameHasExisted: 該当資産名がすでにある
assetSymbolHasExisted: 記号はすでに存在します
assetNameDoesNotExist: 該当資産名がない
assetSymbolDoesNotExist: 資産記号が存在しません
spaceNotFound: 該当空間がない
faNotSameCompany: 空間と同じ会社に所属してください
bindedDevice: 登録されたデバイスは存在しています
deviceTypeNotExist: デバイスタイプがない
excelBuildingLineDuplicate: テーブルに同じデータがある
dbBuildingDuplicate: プラットフォームにすでに該当ビルがない
dbFloorDuplicate: プラットフォームには既にこのフロアが存在しています。
dbSpaceDuplicate: プラットフォームには既にこのスペースが存在しています。
dbAssetDuplicate: プラットフォームには既にこのアセットが存在しています。
excelCompanyNameIsNull: 会社名を入力してください
excelBuildingNameIsNull: ビルを入力してください
excelFloorNameIsNull: フロア名を入力してください。
excelSpaceNameIsNull: スペース名を入力してください。
excelSpaceOrFloorNameIsNull: フロア名とスペース名を入力してください。
excelCompanyNameNotExist: プラットフォーム上に該当会社名はない
dataSrcNotExist: データソースがない
dataSrcEmpty: データソースが空
expressionMapNotExist: 式がない
expressionVariableMapNotExist: 式変数がない
deviceNameNotExist: デバイス名がない
deviceIdNotExist: $.deviceIdを設定してください
### 新增部分
datasrcMethodTypeEmpty: データソースのソースメソッドが空になっている
datasrcMethodTypeNotExist: 該当タイプのデータソースが無い
datasrcNameEmpty: データソース名が空になっている
datasrcStateNotExist: データソースの状態が正しくない
datasrcCodeExists: データソースのコードはすでにある
datasrcAddFail: データソースの追加に失敗
datasrcUpdateFail: ータソースの更新に失敗
mqttParamsMissing: MQTT パラメータ設定エラー
mqttURLMissing: MQTT URLエラー
mqttClientIdMissing: MQTT ClientIdエラー
mqttUsernameMissing: MQTT ユーザー名エラー
mqttPasswordMissing: MQTT パスワードエラー
mqttTopicMissing: MQTT Topicエラー
mqttConnectTimeoutInvalid: MQTT 接続のタイムアウトは無効です。120秒未満または0秒以上である必要があります。
restParamsMissing: RESTパラメータ設定エラー
restURLMissing: REST URLエラー
restMethodMissing: REST Methodエラー
restMethodNotSupport: REST MethodはGETを対応していない
restHeadersMissing: REST headers Missing
caPathMissing: MQTT CA 証明書のパスがない
crtPathMissing: Crt証明書のパスがない
keyPathMissing: Key証明書のパスがない
onlyOneRecord: 1つのレコードのみ設定できます
forwardConfigNotFound: その転送設定情報は検索されませんでした
deviceConfigInfoNotBelongToCompany: あなたはこのデバイスの設定情報を操作する権限がありません
userOrEmailNotExist: ユーザーが存在しません
notAllDeviceExist: デバイスリストにデバイスが存在しないか、その企業アカウントに属していないデバイスがあります
redInExcelNotFilled: 赤の必須事項がありますが記入していません、チェックしてください
alertNotificationMethodNotCorrect: アラート通知方式は MAIL,API,API_AND_MAIL
alertLevelNotCorrect: 警告レベルは高、中、低である必要があります
targetCodeNotExist: 転送目標コードが存在しません
wsClientIDNotExist: DBM ClientIdは存在しません
notNumberOrComma: テンプレートIdは数値またはカンマのみをサポートしています
wrongTargetIdFormat: 業務項目ID形式が正しくありません,
category_1: zeta
category_2: Delta 故障
category_3: Delta 計測
category_4: Delta 積算
category_5: daikin
category_6: nittan
mfaCodeError: MFAコードエラー
mfaCodeIsNull: MFAコードの記入が必要
mfaEmailCodeSubject: MFAメールボックス認証コード
mfaEmailCodeContent: この認証コードを使用してログインしてください:<u>{0}</u>
assetClassNameHasExisted: カテゴリ名が既に存在します
classBigNotFound: 大カテゴリが見つかりません
classMediumNotFound: 中カテゴリが見つかりません
classSmallNotFound: 小カテゴリが見つかりません
notSameCompany: 同じ企業ではありません
excelAssetClassBigIsNull: 分類(大)を記入してください
excelAssetClassMediumIsNull: 分類(中)を記入してください
excelAssetClassBigOrMediumIsNull: 分類(大)と(中)を記入してください
dbAssetClassBigDuplicate: 上記の分類(大)はすでにプラットフォームに存在しているので、ご確認してください
dbAssetClassMediumDuplicate: 上記の分類(中)はすでにプラットフォームに存在しているので、ご確認してください
dbAssetClassSmallDuplicate: 上記の分類(小)はすでにプラットフォームに存在しているので、ご確認してください
dbAssetClassBigNotExist: 上記の分類(大)はプラットフォームに存在しないので、ご確認してください
dbAssetClassMediumNotExist: 上記の分類(中)はプラットフォームに存在しないので、ご確認してください
dbAssetClassSmallNotExist: 上記の分類(小)はプラットフォームに存在しないので、ご確認してください
binded: 情報はすでに存在します
gatewayNotExist: gatewayは存在しません
USER_LOG: ユーザーログ
PROJECT_LOG: プロジェクト管理ログ
ASSET_LOG: 資産管理ログ
CLASS_LOG: 資産カテゴリーログ
DEVICE_LOG: デバイス管理ログ
DEVICE_TYPE_LOG: デバイス種類ログ
ALERT_TEMPLATE_LOG: アラートテンプレートログ
FORWARD_LOG: 転送ターゲットログ
DATASOURCE_LOG: データソースログ
urlNotCorrect: Urlが正しくありません
noDeviceIdImportData: インポートされたデータにはデバイスIdがありません。テーブルのデバイスIdを確認するか、テンプレートが正しいかどうかを確認してください
alertTemplateIdNotExist: アラームテンプレートIdは存在しません。チェックしてください
mqttNameHasExisted: 名前は既に存在します
IOTCORE_LOG: IoT Coreログ
assetClassUsed: 分類はすでに使用されており、削除は許可されていません
IoTCoreNotExist: IoT Coreは存在しません
deviceIsImporting: デバイスは現在インポート中です。しばらくしてからもう一度お試しください。
bindedFloor: 先にフロアを削除する必要があります。
bindedSpace: 先に空間を削除する必要があります。
bindedAsset: 先に資産を削除する必要があります。
udfBuildingIdHasExisted: カスタムビルIDは既に存在します
udfFloorIdHasExisted: カスタムフロアIDは既に存在します
udfSpaceIdHasExisted: カスタム空間IDは既に存在します
excelUdfBuildingIdIsNull: カスタムビルIDを入力してください
excelUdfFloorIdIsNotFount: カスタムフロアIDが存在しません
excelUdfFloorIdIsNull: カスタムフロアIDを入力してください
excelUdfBuildingIdIsNotFound: カスタムビルIDが存在しません
excelUdfSpaceIdIsNull: カスタム空間IDを入力してください
excelSpaceOrFloorIdIsNull: カスタムフロアIDとカスタム空間IDの両方を入力してください
fileNameIsEmpty: アップロードされたファイル名が空です
zipIsEmptyOrSaveFailed: アップロードされたZIPファイルが空、または保存に失敗しました
excelNotFoundInZip: ZIP内にExcelファイルが見つかりません
buildingCustomId: カスタムビルID
spaceCustomId: カスタム空間ID
buildingDevice: 建築設備
electricalDevice: 電気設備
ventilationDevice: 給排気設備
sanitaryDevice: 衛生設備
fireProtectionDevice: 消防設備
otherDevice: その他
img1: 写真−1
img2: 写真−2
img3: 写真-3
customRoomIdNotUnique: この建物内でカスタム空間IDが重複しています
customRoomIdNotExist: カスタム空間IDが存在しません
fileNotExist: ファイルが存在しません
assetSymbol: 資産シンボル
userManual: ユーザーマニュアル
deviceFile: 設備図面ファイル
assetSymbolNotExist: 資産シンボルが存在しません
assetSymbolNotUnique: この建物内で資産シンボルが重複しています
consecutiveLoginFail: ログインの失敗が多すぎます。{0}分{1}秒待ってから再度ログインしてください。
loginFailCount: ログインに{0}回失敗しました。残りの試行回数:{1}回。
img1Description: 写真−1の説明
img2Description: 写真−2の説明
img3Description: 写真−3の説明
assetSymbolIsNull: 資産シンボルを入力してください
assetNameIsNull: 資産名を入力してください
slackHasExisted: このSlackは既に存在します
teamsHasExisted: このTeamsは既に存在します
SLACK_LOG: slack
TEAMS_LOG: teams
dataProviderNameHasExisted: この提供元はすでに存在しています
PROVIDER_LOG: データ提供元
DATA_PROVIDER_GATEWAY_INFO: ゲートウェイ情報
gatewayInfoNameHasExisted: このゲートウェイはすでに存在しています
tenantUdfIdHasExisted: テナントカスタムIDは既に存在します
noTenantUdfId: テナントIDが空です
spaceIdIsUsed: 空間Idは使用されています
excelSpaceIdIsDuplicated: Excel内の空間IDが重複しています
spaceIdIsDuplicated: 空間IDが重複しています,空間ID-
spaceIsUsed: 空間は使用されています
tenantUdfIdNotFound: カスタムテナントIdが見つかりません
spaceIdOrSpaceNameIsNull: 空間IDまたは空間名が空です
spaceIdDumplicated: 空間IDが重複しています
spaceIdNotExist: 空間IDは存在しません
personnasSpaceIdCannotBeNull: 個人空間IDは空です

15
data-center-business-controller/.gitignore

@ -0,0 +1,15 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
application-*.properties

7
data-center-business-controller/buildPush-prod.sh

@ -0,0 +1,7 @@
aws configure set aws_access_key_id AKIAVRXFMB43TOELSROK
aws configure set aws_secret_access_key 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
aws configure set default.region ap-northeast-1
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com
docker build -t 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest --build-arg JAR_FILE=target/data-center-business-controller-0.0.1-SNAPSHOT.jar --build-arg LIB_DIR=target/lib --build-arg CONFIG_DIR=target/config .
docker push 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest

18
data-center-business-controller/buildPush-staging.ps1

@ -0,0 +1,18 @@
# 设置 AWS 凭证
aws configure set aws_access_key_id AKIA5OFH5OOZPCXZIRUQ
aws configure set aws_secret_access_key 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
aws configure set default.region ap-northeast-1
# 获取 ECR 登录密码并登录 Docker
$loginPass = aws ecr get-login-password --region ap-northeast-1
$loginPass | docker login --username AWS --password-stdin 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com
# 构建 Docker 镜像
docker build -t 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest `
--build-arg JAR_FILE=target/data-center-business-controller-0.0.1-SNAPSHOT.jar `
--build-arg LIB_DIR=target/lib `
--build-arg CONFIG_DIR=target/config `
.
# 推送镜像
docker push 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest

13
data-center-business-controller/buildPush-staging.sh

@ -0,0 +1,13 @@
# 注意事项!!!!!!!!!!!!!!!!!!!
# 注意ThenaQuery中 350行左右的【测试】和【正式】是否正确
# 注意CommonOpt中的S3注释是否开启(测试时注释掉以避免网络问题)
aws configure set aws_access_key_id AKIA5OFH5OOZPCXZIRUQ
aws configure set aws_secret_access_key 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
aws configure set default.region ap-northeast-1
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com
docker build -t 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest --build-arg JAR_FILE=target/data-center-business-controller-0.0.1-SNAPSHOT.jar --build-arg LIB_DIR=target/lib --build-arg CONFIG_DIR=target/config .
docker push 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest

21
data-center-business-controller/dockerfile

@ -0,0 +1,21 @@
FROM registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest
# FROM openjdk:17-jdk
ENV TZ=Asia/Tokyo
WORKDIR /home/data-center-business
#EXPOSE 20008
# 设置时区
#RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ARG JAR_FILE
ARG LIB_DIR
ARG CONFIG_DIR
COPY ${JAR_FILE} app.jar
COPY ${LIB_DIR} lib
COPY ${CONFIG_DIR} config
ENTRYPOINT ["java","-jar","app.jar"]

404
data-center-business-controller/pom.xml

@ -0,0 +1,404 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.techsor</groupId>
<artifactId>data-center-business</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>data-center-business-controller</artifactId>
<name>data-center-business-controller</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<aws.ecr.repository>tokyo-build-business</aws.ecr.repository>
<aws.ecr.tag>latest</aws.ecr.tag>
<aws.ecr.region>ap-northeast-1</aws.ecr.region>
<aws.ecr.registry.test>923770123186.dkr.ecr.ap-northeast-1.amazonaws.com</aws.ecr.registry.test>
<aws.access.key.test>AKIA5OFH5OOZHM3U3KX4</aws.access.key.test>
<aws.secret.access.key.test>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</aws.secret.access.key.test>
<aws.ecr.registry.production>381659385655.dkr.ecr.ap-northeast-1.amazonaws.com</aws.ecr.registry.production>
<aws.access.key.production>AKIAVRXFMB43XVQ3GXAL</aws.access.key.production>
<aws.secret.access.key.production>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</aws.secret.access.key.production>
</properties>
<dependencies>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>data-center-business-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>data-center-business-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>only-package</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<!-- 项目的打包配置 -->
<plugins>
<!-- 自定义打zip包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>data-center-business</finalName>
<descriptors>
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-package</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.5</version>
<configuration>
<from>
<![CDATA[
<!--
这里先登录【docker login --username=409950420@qq.com registry.ap-northeast-1.aliyuncs.com】,
然后【docker pull registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest】到本地,
再docker://使用本地镜像
-->
]]>
<image>docker://registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest</image>
</from>
<to>
<image>${aws.ecr.registry.test}/${aws.ecr.repository}:${aws.ecr.tag}</image>
</to>
<container>
<workingDirectory>/home/data-center-business</workingDirectory>
<environment>
<TZ>Asia/Tokyo</TZ>
</environment>
<entrypoint>
<entrypoint>java</entrypoint>
<entrypoint>-jar</entrypoint>
<entrypoint>${project.build.finalName}.jar</entrypoint>
</entrypoint>
</container>
<extraDirectories>
<paths>
<path>
<from>${project.build.directory}</from>
<includes>${project.build.finalName}.jar</includes>
<into>/home/data-center-business/</into>
</path>
<path>
<from>${project.build.directory}</from>
<includes>lib/**</includes>
<into>/home/data-center-business/</into>
</path>
<path>
<from>${project.build.directory}</from>
<includes>config/**</includes>
<into>/home/data-center-business/</into>
</path>
</paths>
<permissions>
<permission>
<file>/home/data-center-business/lib</file>
<mode>755</mode>
</permission>
<permission>
<file>/home/data-center-business/config</file>
<mode>755</mode>
</permission>
</permissions>
</extraDirectories>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<!-- 本地,使用dockerBuild目标而不是build -->
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-test</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.5</version>
<configuration>
<from>
<![CDATA[
<!--
这里先登录【docker login --username=409950420@qq.com registry.ap-northeast-1.aliyuncs.com】,
然后【docker pull registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest】到本地,
再docker://使用本地镜像
-->
]]>
<image>docker://registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest</image>
</from>
<to>
<image>${aws.ecr.registry.test}/${aws.ecr.repository}:${aws.ecr.tag}</image>
</to>
<container>
<workingDirectory>/home/data-center-business</workingDirectory>
<environment>
<TZ>Asia/Tokyo</TZ>
</environment>
<entrypoint>
<entrypoint>java</entrypoint>
<entrypoint>-jar</entrypoint>
<entrypoint>${project.build.finalName}.jar</entrypoint>
</entrypoint>
</container>
<extraDirectories>
<paths>
<path>
<from>${project.build.directory}</from>
<includes>${project.build.finalName}.jar</includes>
<into>/home/data-center-business/</into>
</path>
<path>
<from>${project.build.directory}</from>
<includes>lib/**</includes>
<into>/home/data-center-business/</into>
</path>
<path>
<from>${project.build.directory}</from>
<includes>config/**</includes>
<into>/home/data-center-business/</into>
</path>
</paths>
<permissions>
<permission>
<file>/home/data-center-business/lib</file>
<mode>755</mode>
</permission>
<permission>
<file>/home/data-center-business/config</file>
<mode>755</mode>
</permission>
</permissions>
</extraDirectories>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<!-- 本地,使用dockerBuild目标而不是build -->
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- maven-antrun-plugin执行推送aws ecr的命令 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<!--放在package阶段后面执行-->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Run AWS ECR login command using Ant tasks -->
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_access_key_id ${aws.access.key.test}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_secret_access_key ${aws.secret.access.key.test}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.region ${aws.ecr.region}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.output text" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws ecr get-login-password --region ${aws.ecr.region} | docker login --username AWS --password-stdin ${aws.ecr.registry.test}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="docker push ${aws.ecr.registry.test}/${aws.ecr.repository}:${aws.ecr.tag}" />
</exec>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-production</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.5</version>
<configuration>
<from>
<![CDATA[
<!--
这里先登录【docker login --username=409950420@qq.com registry.ap-northeast-1.aliyuncs.com】,
然后【docker pull registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest】到本地,
再docker://使用本地镜像
-->
]]>
<image>docker://registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest</image>
</from>
<to>
<image>${aws.ecr.registry.production}/${aws.ecr.repository}:${aws.ecr.tag}</image>
</to>
<container>
<workingDirectory>/home/data-center-business</workingDirectory>
<environment>
<TZ>Asia/Tokyo</TZ>
</environment>
<entrypoint>
<entrypoint>java</entrypoint>
<entrypoint>-jar</entrypoint>
<entrypoint>${project.build.finalName}.jar</entrypoint>
</entrypoint>
</container>
<extraDirectories>
<paths>
<path>
<from>${project.build.directory}</from>
<includes>${project.build.finalName}.jar</includes>
<into>/home/data-center-business/</into>
</path>
<path>
<from>${project.build.directory}</from>
<includes>lib/**</includes>
<into>/home/data-center-business/</into>
</path>
<path>
<from>${project.build.directory}</from>
<includes>config/**</includes>
<into>/home/data-center-business/</into>
</path>
</paths>
<permissions>
<permission>
<file>/home/data-center-business/lib</file>
<mode>755</mode>
</permission>
<permission>
<file>/home/data-center-business/config</file>
<mode>755</mode>
</permission>
</permissions>
</extraDirectories>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- maven-antrun-plugin执行推送aws ecr的命令 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<!--放在package阶段后面执行-->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Run AWS ECR login command using Ant tasks -->
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_access_key_id ${aws.access.key.production}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_secret_access_key ${aws.secret.access.key.production}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.region ${aws.ecr.region}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.output text" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws ecr get-login-password --region ${aws.ecr.region} | docker login --username AWS --password-stdin ${aws.ecr.registry.production}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="docker push ${aws.ecr.registry.production}/${aws.ecr.repository}:${aws.ecr.tag}" />
</exec>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

19
data-center-business-controller/src/main/java/com/techsor/datacenter/business/BusinessApplication.java

@ -0,0 +1,19 @@
package com.techsor.datacenter.business;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@ServletComponentScan
@EnableAsync
@EnableScheduling
public class BusinessApplication {
public static void main(String[] args) {
SpringApplication.run(BusinessApplication.class, args);
}
}

59
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/ApiConfig.java

@ -0,0 +1,59 @@
package com.techsor.datacenter.business.configurator;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.techsor.datacenter.business.configurator.interceptor.AccessApiInterceptor;
import jakarta.servlet.MultipartConfigElement;
import java.io.File;
import java.util.List;
@Configuration
public class ApiConfig implements WebMvcConfigurer {
@Bean
public AccessApiInterceptor accessApiInterceptor(){
return new AccessApiInterceptor();
}
/**
* 加了配置spring.web.resources.add-mappings=false
* 这里需要手动为 Swagger 静态资源路径添加映射
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置 Swagger UI 静态资源的路径
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(accessApiInterceptor());
}
@Bean
public MultipartConfigElement multipartConfigElement() {
String path = System.getProperty("user.dir")+"/tmp";
MultipartConfigFactory factory = new MultipartConfigFactory();
// factory.setMaxFileSize(DataSize.ofMegabytes(20L));
File tmpFile = new File(path);
if (!tmpFile.exists()) {
tmpFile.mkdirs();
}
factory.setLocation(path);
return factory.createMultipartConfig();
}
}

38
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/CorsConfigurer.java

@ -0,0 +1,38 @@
package com.techsor.datacenter.business.configurator;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* CorsConfigurer
* @author jwy
* @time 2022-5-12 17:54:43
*/
//@Configuration
public class CorsConfigurer {
@Value("${crosxss.origin:*}")
private String corsOrigin;
@Bean
public FilterRegistrationBean corsFilter() {
List<String> allowedOriginPatterns = new ArrayList<String>();
allowedOriginPatterns.add(corsOrigin);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOriginPatterns(allowedOriginPatterns);
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}

125
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/CrosXssFilter.java

@ -0,0 +1,125 @@
package com.techsor.datacenter.business.configurator;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.jboss.logging.MDC;
@WebFilter
public class CrosXssFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(CrosXssFilter.class);
@Value("${crosxss.filter.disable:false}")
private boolean disable;
@Value("${response.access.control.allow.origin:*}")
private String accessControlAllowOrigin;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
MDC.put("processNo", UUID.randomUUID().toString().replace("-", ""));
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
if (disable) {
chain.doFilter(request, response);
} else {
if (response instanceof HttpServletResponse) {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpServletRequest httpRequest = (HttpServletRequest) request;
String referer = httpRequest.getHeader("Referer");
if (StringUtils.isNotBlank(referer) && !"*".equals(accessControlAllowOrigin)
&& !referer.startsWith(accessControlAllowOrigin)) {
httpServletResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Invalid Referer");
return;
}
httpServletResponse.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setHeader("X-Frame-Options", "deny");
String nonce = UUID.randomUUID().toString().replace("-", "").substring(0, 16); // 生成随机 nonce
httpServletResponse.setHeader("Content-Security-Policy",
"default-src 'self'; " +
"img-src 'self' data:; "+
"font-src 'self' https://i.alicdn.com data:; "+ //阿里系的ui组件
// "script-src 'self' 'nonce-" + nonce + "'; " + //nonce针对内联 JavaScript
// "style-src 'self' 'nonce-" + nonce + "'; " + //nonce针对内联 CSS
"script-src 'self'; " +
"style-src 'self'; " +
"object-src 'none'; " +
"base-uri 'none'; " +
"form-action 'self'; " +
"frame-ancestors 'none'"
);
httpServletResponse.setHeader("X-XSS-Protection", "1; mode=block");
httpServletResponse.setHeader("X-Content-Type-Options", "nosniff");
httpServletResponse.setHeader("Referrer-Policy", "origin");
httpServletResponse.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
//add
httpServletResponse.addHeader("Vary", "Origin");
httpServletResponse.addHeader("Vary", "Access-Control-Request-Method");
httpServletResponse.addHeader("Vary", "Access-Control-Request-Headers");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS");
// 设置允许的域名
httpServletResponse.setHeader("Access-Control-Allow-Origin", accessControlAllowOrigin);
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
if ("OPTIONS".equals(((HttpServletRequest) request).getMethod())) {
httpServletResponse.setStatus(HttpServletResponse.SC_OK); // 200
return;
}
}
ServletRequest requestWrapper = null;
if(request instanceof HttpServletRequest) {
requestWrapper = new RequestWrapper((HttpServletRequest) request);
}
if(requestWrapper == null) {
chain.doFilter(request, response);
} else {
chain.doFilter(requestWrapper, response);
}
}
} finally {
MDC.clear();
}
}
@Override
public void destroy() {
}
}

32
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/MdcLogEnhancerFilter.java

@ -0,0 +1,32 @@
package com.techsor.datacenter.business.configurator;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;
@Component
public class MdcLogEnhancerFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String requestId = request.getHeader("X-Request-ID");
if (requestId == null || requestId.isEmpty()) {
requestId = UUID.randomUUID().toString();
}
MDC.put("requestId", requestId);
try {
filterChain.doFilter(request, response);
} finally {
MDC.clear();
}
}
}

299
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/RequestWrapper.java

@ -0,0 +1,299 @@
package com.techsor.datacenter.business.configurator;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.owasp.encoder.Encode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class RequestWrapper extends HttpServletRequestWrapper {
private final Logger log = LoggerFactory.getLogger(getClass());
private static String key = "drop|chr|exec|insert|select|delete|update|count|mid|master|truncate|declare|-|+|sleep";
private static Set<String> notAllowedKeyWords = new HashSet<String>(0);
HttpServletRequest servletRequest;
private String decryptFields;
private static String[] allowedHeadersArray = new String[]{"Accept", "Accept-Charset", "Accept-Encoding", "Accept-Language", "Accept-Ranges",
"Authorization", "Cache-Control", "Connection", "Cookie", "Content-Length", "Content-Type", "Date", "Expect", "From", "Host","If-Match",
"If-Modified-Since", "If-None-Match", "If-Range", "If-Unmodified-Since", "Max-Forwards", "Pragma", "Proxy-Authorization", "Range",
"Referer", "TE", "Upgrade", "User-Agent", "Via", "Warning","Origin"};
private static Set<String> allowedHeadersSet = Arrays.stream(allowedHeadersArray).map(str -> str.toUpperCase()).collect(Collectors.toSet());
static {
String keyStr[] = key.split("\\|");
for (String str : keyStr) {
notAllowedKeyWords.add(str);
}
}
private String currentUrl;
//保存流中的数据
private byte[] postData;
public RequestWrapper(HttpServletRequest servletRequest) throws IOException {
super(servletRequest);
this.servletRequest = servletRequest;
currentUrl = servletRequest.getRequestURI();
// 读取 POST 数据
postData = IOUtils.toByteArray(servletRequest.getInputStream());
String json = new String(postData, "utf-8");
if (StringUtils.isNotBlank(json)) { // 确保 JSON 不为空
Object objData = JSON.parse(json);
if (objData instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) objData;
cleanJsonArray(jsonArray);
postData = JSON.toJSONString(jsonArray).getBytes();
} else if (objData instanceof JSONObject) {
JSONObject jsonData = (JSONObject) objData;
cleanJsonObject(jsonData);
postData = jsonData.toJSONString().getBytes();
}
}
}
/**
* 递归处理 JSONObject清理 XSS 并保留 JSON 结构
*/
private void cleanJsonObject(JSONObject jsonObject) {
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
Object value = entry.getValue();
if (value instanceof String) {
jsonObject.put(entry.getKey(), cleanXSS((String) value));
} else if (value instanceof JSONObject) {
cleanJsonObject((JSONObject) value); // 递归处理 JSON 对象
} else if (value instanceof JSONArray) {
cleanJsonArray((JSONArray) value); // 递归处理 JSON 数组
}
}
}
/**
* 递归处理 JSONArray确保数组中的 JSONObject 也进行 XSS 处理
*/
private void cleanJsonArray(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.size(); i++) {
Object item = jsonArray.get(i);
if (item instanceof JSONObject) {
cleanJsonObject((JSONObject) item);
} else if (item instanceof JSONArray) {
cleanJsonArray((JSONArray) item);
}
}
}
/**
* 在使用@RequestBody注解的时候其实框架是调用了getInputStream()方法所以我们要重写这个方法
* @return
* @throws IOException
*/
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(postData);
return new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public void setReadListener(ReadListener readListener) {
}
};
}
/**覆盖getParameter方法将参数名和参数值都做xss过滤
* 如果需要获得原始的值则通过super.getParameterValues(name)来获取
* getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
*/
@Override
public String getParameter(String parameter) {
String value = super.getParameter(parameter);
if (value == null) {
return null;
}
return cleanXSS(value);
}
@Override
public String[] getParameterValues(String parameter) {
String userId = servletRequest.getHeader("user_id");
String[] values = super.getParameterValues(parameter);
if (values == null) {
return null;
}
int count = values.length;
String[] encodedValues = new String[count];
for (int i = 0; i < count; i++) {
log.debug("key:{} value[{}]:{}",parameter,i,values[i]);
String subValues = cleanXSS(values[i]);
log.debug("Key:{} Values:{}",parameter,subValues);
encodedValues[i]= subValues;
}
return encodedValues;
}
@Override
public Map<String, String[]> getParameterMap(){
Map<String, String[]> values=super.getParameterMap();
if (values == null) {
return null;
}
String userId = servletRequest.getHeader("user_id");
Map<String, String[]> result=new HashMap<>();
for(String key:values.keySet()){
String encodedKey=cleanXSS(key);
int count=values.get(key).length;
String[] encodedValues = new String[count];
for (int i = 0; i < count; i++){
log.debug("key:{} value[{}]:{}",key,i,values.get(key)[i]);
String subValues = cleanXSS(values.get(key)[i]);
log.debug("Key:{} Values:{}",key,subValues);
encodedValues[i]= subValues;
}
result.put(encodedKey,encodedValues);
}
return result;
}
private Map<String, String> headerMap = new HashMap<>();
public void addHeader(String name, String value) {
headerMap.put(name, value);
}
@Override
public Enumeration<String> getHeaderNames() {
List<String> names = Collections.list(super.getHeaderNames());
for (String name : headerMap.keySet()) {
names.add(name);
}
return Collections.enumeration(names);
}
@Override
public Enumeration<String> getHeaders(String name) {
List<String> values = Collections.list(super.getHeaders(name));
if (headerMap.containsKey(name)) {
values = Arrays.asList(headerMap.get(name));
}
return Collections.enumeration(values);
}
/**
* 覆盖getHeader方法将参数名和参数值都做xss过滤
* 如果需要获得原始的值则通过super.getHeaders(name)来获取
* getHeaderNames 也可能需要覆盖
*/
@Override
public String getHeader(String name) {
String value = super.getHeader(name);
if (allowedHeadersSet.contains(name.toUpperCase())) {
return value;
}
if (StringUtils.isBlank(value)) {
return value;
}
String userId = servletRequest.getHeader("user_id");
value = cleanXSS(value);
addHeader(name, value);
return value;
}
private String cleanXSS(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
// 检测是否包含 HTML 标签
if (value.matches("(?i).*</?(script|iframe|embed|object|link|style|img|svg)[^>]*>.*")) {
value = Encode.forHtml(value);
}
// 检测是否包含 JavaScript 关键字
if (value.matches("(?i).*(javascript:|<script|on\\w+\\s*=).*")) {
value = Encode.forJavaScript(value);
}
// 处理 CSS 编码
// if (value.matches("(?i).*(\\{.*\\}|;.*:.*).*")) {
// value = Encode.forCssString(value);
// }
if (value != null && !isJsonObject(value)) {//防止误处理了参数里的json对象
if (value.matches("(?i).*(\\{.*\\}|;.*:.*).*")) {
value = Encode.forCssString(value);
}
}
value = value.replaceAll("(?i)<[^>]+\\s+on\\w+\\s*=\\s*['\"].*?['\"]", "");//检测和匹配 HTML 元素中可能包含的事件处理属性(如 onclick、onmouseover)
value = value.replaceAll("(?i)eval\\s*\\((.*?)\\)", "");//匹配 JavaScript 中的 eval() 函数调用
value = cleanSqlKeyWords(value);
return value;
}
private boolean isJsonObject(String value) {
try {
JSONObject.parseObject(value);
return true; // 是 JSON 对象
} catch (Exception e) {
return false; // 不是 JSON 对象
}
}
private String cleanSqlKeyWords(String value) {
String value2Upper = value.toUpperCase();
String returnValue = value;
for (String keyword : notAllowedKeyWords) {
String k2Upper = keyword.toUpperCase();
if (value2Upper.length() > k2Upper.length() + 4
&& (value2Upper.contains("("+k2Upper)||value2Upper.contains(k2Upper+")")||value2Upper.contains(" "+k2Upper)||value2Upper.contains(k2Upper+" ")||value2Upper.contains(" "+k2Upper+" "))) {
returnValue = StringUtils.replace(returnValue, keyword, "\\\\"+keyword);
// returnValue = StringUtils.join("\\", value);
log.error(this.currentUrl + "已被过滤,因为参数中包含不允许sql的关键词(" + keyword
+ ")"+";参数:"+value+";过滤后的参数:"+returnValue);
}
}
return returnValue;
}
}

20
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/WebMvcConfig.java

@ -0,0 +1,20 @@
package com.techsor.datacenter.business.configurator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.techsor.datacenter.business.common.config.DataSourceInterceptor;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private DataSourceInterceptor dataSourceInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(dataSourceInterceptor);
}
}

38
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/advice/CustomExceptionHandler.java

@ -0,0 +1,38 @@
package com.techsor.datacenter.business.configurator.advice;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException;
@ControllerAdvice
public class CustomExceptionHandler {
@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(NoHandlerFoundException ex) {
ErrorResponse errorResponse = new ErrorResponse(
HttpStatus.NOT_FOUND.value(),
"The requested resource was not found on this server."
);
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
public static class ErrorResponse {
private int status;
private String message;
public ErrorResponse(int status, String message) {
this.status = status;
this.message = message;
}
public int getStatus() {
return status;
}
public String getMessage() {
return message;
}
}
}

30
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/advice/GlobalXssHandler.java

@ -0,0 +1,30 @@
package com.techsor.datacenter.business.configurator.advice;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
//@ControllerAdvice
public class GlobalXssHandler {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new java.beans.PropertyEditorSupport() {
@Override
public void setAsText(String text) {
setValue(clean(text));
}
});
}
public static String clean(String value) {
if (value != null) {
// 过滤 HTML 标签和特殊字符
value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
value = value.replaceAll("\"", "&quot;").replaceAll("'", "&#x27;");
}
return value;
}
}

82
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/AccessApiInterceptor.java

@ -0,0 +1,82 @@
package com.techsor.datacenter.business.configurator.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.service.AccountService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import java.lang.reflect.Method;
public class AccessApiInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(AccessApiInterceptor.class);
@Value("${user.login.keytimeout}")
private long keytimeout;
@Autowired
private AccountService accountService;
/**
* Intercepts HTTP requests to perform access control checks.
*
* @param request the HttpServletRequest object
* @param response the HttpServletResponse object
* @param handler the handler (or handler method) to be executed
* @return boolean indicating whether the request should be allowed to proceed
* @throws Exception if an error occurs during the access control process
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Class<?> tClass = handlerMethod.getBeanType();
AccessRequired annotation = tClass.getAnnotation(AccessRequired.class);
if (annotation == null) {
Method method = handlerMethod.getMethod();
annotation = method.getAnnotation(AccessRequired.class);
}
try {
if (annotation != null) {
String loginName = request.getHeader("LoginName");
String accessToken = request.getHeader("AccessToken");
String userId = request.getHeader("UserId");
String companyId = request.getHeader("CompanyId");
String languageType = request.getHeader("LanguageType");
response.setContentType("text/html;charset=utf-8");
String URI = request.getRequestURI();
logger.info("===============URI :" + URI + " ===============");
JSONObject jsonObject = new JSONObject();
boolean result = accountService.accessAuth(loginName, companyId, userId, accessToken, languageType, jsonObject, keytimeout);
if(!result) {
response.getWriter().print(jsonObject.toString());
}
return result;
}
} catch (Exception e) {
logger.error("Error from AccessApiInterceptor!", e);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", ResponseCode.SERVER_ERROR);
jsonObject.put("msg", "service error");
response.getWriter().print(jsonObject.toString());
return false;
}
return true;
}else if(handler instanceof ResourceHttpRequestHandler) {
return true;
}
return false;
}
}

10
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/AccessRequired.java

@ -0,0 +1,10 @@
package com.techsor.datacenter.business.configurator.interceptor;
import java.lang.annotation.*;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AccessRequired {
}

194
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AccountController.java

@ -0,0 +1,194 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.account.CacheUserData;
import com.techsor.datacenter.business.dto.account.LoginParam;
import com.techsor.datacenter.business.dto.account.MfaData;
import com.techsor.datacenter.business.service.AccountService;
import com.techsor.datacenter.business.service.captcha.CaptchaService;
import com.techsor.datacenter.business.service.captcha.CaptchaVO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Account management
* @author jwy-style
*
*/
@RestController
@RequestMapping("/account")
@Tag(name = "AccountController",description = "账号登录/登出、获取验证码接口")
public class AccountController {
@Autowired
private AccountService accountService;
@Autowired
private DefaultKaptcha producer;
@Autowired
private CaptchaService captchaService;
/**
* User login
*
* @param loginParam the login parameters
* @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese)
* @param request the HttpServletRequest object
* @param response the HttpServletResponse object
* @param device the device object
* @return a SimpleDataResponse containing the cached user data
*/
@Operation(summary = "User Login")
@RequestMapping(value = "/login", method = RequestMethod.POST)
public SimpleDataResponse<CacheUserData> login(@RequestBody LoginParam loginParam,
@Parameter(name="LanguageType", description="Language Type 0: Chinese, 1: English, 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="TargetPlatform", description="Platform Type, 1-Business, 2-dashboard", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Integer targetPlatform,
HttpServletRequest request,
HttpServletResponse response) {
return accountService.login(loginParam, targetPlatform, LanguageType, request, response);
}
/**
* User retrieves MFA QR code URL
*
* @param cacheUserData the cached user data
* @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese)
* @param request the HttpServletRequest object
* @param response the HttpServletResponse object
* @return a SimpleDataResponse containing the MFA QR code URL
*/
@Operation(summary = "Retrieve MFA QR Code URL", description = "The frontend needs to convert this QR code URL into an image for scanning")
@RequestMapping(value = "/login/getMfaUrl", method = RequestMethod.POST)
public SimpleDataResponse getMfaUrl(
@RequestBody CacheUserData cacheUserData,
@Parameter(name="LanguageType", description="Language Type 0: Chinese, 1: English, 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
HttpServletRequest request,
HttpServletResponse response) {
return accountService.getMfaUrl(cacheUserData, LanguageType, request, response);
}
/**
* User MFA login
*
* @param mfaData the MFA login data
* @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese)
* @param request the HttpServletRequest object
* @param response the HttpServletResponse object
* @return a SimpleDataResponse containing the result of the MFA login
*/
@Operation(summary = "User MFA Login")
@RequestMapping(value = "/login/mfa", method = RequestMethod.POST)
public SimpleDataResponse loginMfa(
@RequestBody MfaData mfaData,
@Parameter(name="LanguageType",description="Language Type 0: Chinese, 1: English, 2: Japanese",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
HttpServletRequest request,
HttpServletResponse response) {
return accountService.loginMfa(mfaData, LanguageType, request, response);
}
/**
* User retrieves MFA email verification code
*
* @param cacheUserData the cached user data
* @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese)
* @param request the HttpServletRequest object
* @param response the HttpServletResponse object
* @return a SimpleDataResponse containing the MFA email verification code
*/
@Operation(summary = "User Retrieves MFA Email Verification Code")
@RequestMapping(value = "/login/getEmailCode", method = RequestMethod.POST)
public SimpleDataResponse getEmailCode(
@RequestBody CacheUserData cacheUserData,
@Parameter(name="LanguageType",description="Language Type 0: Chinese, 1: English, 2: Japanese",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
HttpServletRequest request,
HttpServletResponse response) {
return accountService.getEmailCode(cacheUserData, LanguageType, request, response);
}
/**
* User MFA email login
*
* @param mfaData the MFA email login data
* @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese)
* @param request the HttpServletRequest object
* @param response the HttpServletResponse object
* @return a SimpleDataResponse containing the result of the MFA email login
*/
@Operation(summary = "User MFA Email Login")
@RequestMapping(value = "/login/mfaEmail", method = RequestMethod.POST)
public SimpleDataResponse loginMfaEmail(
@RequestBody MfaData mfaData,
@Parameter(name="LanguageType",description="Language Type 0: Chinese, 1: English, 2: Japanese",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
HttpServletRequest request,
HttpServletResponse response) {
return accountService.loginMfaEmail(mfaData, LanguageType, request, response);
}
/**
* User logout
*
* @param LoginName the login name
* @param AccessToken the authentication token
* @param UserId the user ID
* @param CompanyId the company ID (optional)
* @param LanguageType the language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse containing the result of the logout operation
*/
@AccessRequired
@Operation(summary = "User Logout")
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public SimpleDataResponse logout(
@Parameter(name="LoginName",description="Login Name",required=true) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="Authentication Token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="User ID",required=true) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="Company ID",required=false) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description="Language Type 0: Chinese, 1: English, 2: Japanese",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return accountService.logout(AccessToken, CompanyId, LoginName, UserId);
}
/**
* Retrieve captcha
*
* @return a SimpleDataResponse containing the captcha image and related data
* @throws IOException if an I/O exception occurs during captcha generation
*/
@Operation(summary = "Retrieve Login Captcha")
@RequestMapping(value = "/getCaptcha", method = RequestMethod.GET)
public SimpleDataResponse<CaptchaVO> getCaptcha() throws IOException {
// Generate text captcha
String content = producer.createText();
// Generate image captcha
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedImage image = producer.createImage(content);
ImageIO.write(image, "jpg", outputStream);
// Encode byte array to Base64
String str = "data:image/jpeg;base64,";
String base64Img = str + Base64.encodeBase64String(outputStream.toByteArray())
.replace("\n", "")
.replace("\r", "");
// Cache captcha and prepare response
CaptchaVO captchaVO = captchaService.cacheCaptcha(content);
captchaVO.setBase64Img(base64Img);
return SimpleDataResponse.success(captchaVO);
}
}

162
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/AssetClassController.java

@ -0,0 +1,162 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.asset.MonitoringAssetSearchParams;
import com.techsor.datacenter.business.dto.assetclass.AssetClassSearchParams;
import com.techsor.datacenter.business.dto.assetclass.DeleteAssetClassParams;
import com.techsor.datacenter.business.dto.assetclass.OptAssetClassParams;
import com.techsor.datacenter.business.service.AssetClassService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.assetclass.AssetClassPageVO;
/**
*
* @author jwy-style
*
*/
@RestController//代表返回的是json格式的数据,这个注解是Spring4之后新加的注解
@AccessRequired //注解标识是否需要验证登录token,放在这表示整个类的接口都要鉴权,也可以注释掉放在单独的接口上对指定接口鉴权
@RequestMapping("/assetClass") //http请求路径映射
@Tag(name = "AssetClassController",description = "楼宇管理模块-分类的相关接口")
@SuppressWarnings("unchecked")
public class AssetClassController {
private static Logger logger = LoggerFactory.getLogger(AssetClassController.class);
@Autowired
private AssetClassService assetClassService;
// @AccessRequired
@Operation(summary = "添加分类")
@RequestMapping(value = "/add",method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptAssetClassParams optAssetClassParams,
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return assetClassService.add(optAssetClassParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "编辑分类")
@RequestMapping(value = "/edit",method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptAssetClassParams optAssetClassParams,
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return assetClassService.edit(optAssetClassParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "删除分类")
@RequestMapping(value = "/batchDelete",method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteAssetClassParams deleteAssetClassParams,
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return assetClassService.batchDelete(deleteAssetClassParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "获取分类列表")
@RequestMapping(value = "/getListPage",method = RequestMethod.GET)
public PageResponse<PageInfo<AssetClassPageVO>> getListPage(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
AssetClassSearchParams pageSearchParam
) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<AssetClassPageVO>> pageResponse = new PageResponse<PageInfo<AssetClassPageVO>>();
try{
pageResponse.setData(assetClassService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
}catch (Exception e){
logger.error("查询列表报错",e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "模板下载")
@RequestMapping(value = "/downloadTemplate", method = RequestMethod.GET)
public void downloadTemplate(HttpServletResponse res,
@Parameter(name="LoginName",description ="登录名",required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="所属企业ID",required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType
) throws FileNotFoundException {
if(LanguageType == 2){
FileUtil.downloadExcelFile(res,this.getClass().getResourceAsStream("/template/jp/asset_class_template_jp.xlsx"), "asset_class_template.xlsx");
}else if(LanguageType == 1){
FileUtil.downloadExcelFile(res,this.getClass().getResourceAsStream("/template/en/asset_class_template_en.xlsx"), "asset_class_template.xlsx");
}else {
FileUtil.downloadExcelFile(res,this.getClass().getResourceAsStream("/template/asset_class_template_zh.xlsx"), "asset_class_template.xlsx");
}
}
@Operation(summary = "批量导入")
@RequestMapping(value = "/batchImport",method = RequestMethod.POST)
public SimpleDataResponse batchImport(
MultipartFile excelFile,
@Parameter(name="LoginName",description ="登录名",required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="所属企业ID",required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType
) {
return assetClassService.batchImport(excelFile, UserId, CompanyId, LanguageType);
}
@Operation(summary = "下载分类")
@GetMapping(path = "/download")
public ResponseEntity download(
AssetClassSearchParams pageSearchParam,
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws UnsupportedEncodingException {
return assetClassService.download(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset);
}
}

368
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/BuildingController.java

@ -0,0 +1,368 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import java.io.FileNotFoundException;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.building.BindBuildingParams;
import com.techsor.datacenter.business.dto.building.BuildingFileNameList;
import com.techsor.datacenter.business.dto.building.BuildingSearchParams;
import com.techsor.datacenter.business.dto.building.DeleteBuildingParams;
import com.techsor.datacenter.business.dto.building.OptBuildingParams;
import com.techsor.datacenter.business.dto.space.SpaceFileNameList;
import com.techsor.datacenter.business.service.BuildingService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.building.BindedBuildingVO;
import com.techsor.datacenter.business.vo.building.BuildingPageVO;
import com.techsor.datacenter.business.vo.user.UserBindBuildingVO;
/**
*
* @author jwy-style
*
*/
/**
* Controller for managing buildings.
* Handles JSON formatted data and requires authentication token verification for all methods in the class.
* Request mapping for HTTP requests is "/building".
*/
@RestController
@AccessRequired // Indicates whether login token verification is required. Placing it here means all methods in this class require authentication.
@RequestMapping("/building") // HTTP request path mapping
@Tag(name = "BuildingController", description = "Building Management Module - APIs for managing buildings")
@SuppressWarnings("unchecked")
public class BuildingController {
private static Logger logger = LoggerFactory.getLogger(BuildingController.class);
@Autowired
private BuildingService buildingService;
/**
* Add a building.
*
* @param optBuildingParams parameters for building operation
* @param LoginName login name
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId user's company ID (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse indicating the result of the add operation
*/
@Operation(summary = "Add a building")
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse add(
OptBuildingParams optBuildingParams,
@RequestPart(name = "pictureIntroduction", required = false) List<MultipartFile> pictureIntroduction,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return buildingService.add(optBuildingParams, pictureIntroduction, UserId, CompanyId, LanguageType);
}
/**
* Edit a building.
*
* @param optBuildingParams parameters for building operation
* @param LoginName login name
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId user's company ID (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse indicating the result of the edit operation
*/
@Operation(summary = "Edit a building")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptBuildingParams optBuildingParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return buildingService.edit(optBuildingParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete file for specified building")
@RequestMapping(value = "/edit/deleteInfoFile/{buildingId}", method = RequestMethod.POST)
public SimpleDataResponse deleteInfoFile(
@Parameter(name="buildingId", description="Building primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long buildingId,
@RequestBody BuildingFileNameList deleteInfoFile,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return buildingService.deleteInfoFile(deleteInfoFile, buildingId, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Upload file for specified building")
@RequestMapping(value = "/edit/uploadInfoFile/{buildingId}", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse modifyUploadInfoFile(
@Parameter(name="buildingId", description="Space primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long buildingId,
@RequestPart("files") List<MultipartFile> detailFiles,
@Parameter(name="fileType", description="file type, 1-image", required=true, schema = @Schema(defaultValue = "1")) @RequestParam Integer fileType,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return buildingService.modifyUploadInfoFile(detailFiles, buildingId, fileType, UserId, CompanyId, LanguageType);
}
/**
* Batch delete buildings.
*
* @param deleteBuildingParams parameters for deleting buildings
* @param LoginName login name
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId user's company ID (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse indicating the result of the batch delete operation
*/
@Operation(summary = "Batch delete buildings")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteBuildingParams deleteBuildingParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return buildingService.batchDelete(deleteBuildingParams, UserId, CompanyId, LanguageType);
}
/**
* Get a page of building list.
*
* @param LoginName login name
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId user's company ID (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between GMT and local time in minutes (e.g., -480 for GMT+8)
* @param pageSearchParam search parameters for building list
* @return a PageResponse containing a page of BuildingPageVO objects
* @throws BusinessException if there is any business logic error
*/
@Operation(summary = "Get a page of building list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<BuildingPageVO>> getListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between GMT and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
BuildingSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<BuildingPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(buildingService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
/**
* Download template file.
*
* @param res HttpServletResponse object for writing response
* @param LoginName login name
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId user's company ID
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @throws FileNotFoundException if the specified template file is not found
*/
@Operation(summary = "Download template file")
@RequestMapping(value = "/downloadTemplate", method = RequestMethod.GET)
public void downloadTemplate(HttpServletResponse res,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) throws FileNotFoundException {
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/building_info_template_jp.xlsx"), "building_info_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/building_info_template_en.xlsx"), "building_info_template.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/building_info_template_zh.xlsx"), "building_info_template.xlsx");
}
}
@Operation(summary = "Download template file (only spatial information)")
@RequestMapping(value = "/downloadTemplateSpatial", method = RequestMethod.GET)
public void downloadTemplateSpatial(HttpServletResponse res,
@RequestParam(defaultValue = "floor_and_space") String fileTag,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) throws FileNotFoundException {
switch (fileTag){
case "floor_and_space":
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/only_building_info_template_jp.xlsx"), "only_building_info_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/only_building_info_template_en.xlsx"), "only_building_info_template.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/only_building_info_template_zh.xlsx"), "only_building_info_template.xlsx");
}
break;
case "floor":
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/only_floor_info_template_jp.xlsx"), "only_floor_info_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/only_floor_info_template_en.xlsx"), "only_floor_info_template.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/only_floor_info_template_zh.xlsx"), "only_floor_info_template.xlsx");
}
break;
case "space":
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/only_space_info_template_jp.xlsx"), "only_space_info_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/only_space_info_template_en.xlsx"), "only_space_info_template.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/only_space_info_template_zh.xlsx"), "only_space_info_template.xlsx");
}
break;
case "asset":
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/only_asset_template_jp.xlsx"), "only_asset_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/only_asset_template_en.xlsx"), "only_asset_template.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/only_asset_template_zh.xlsx"), "only_asset_template.xlsx");
}
break;
default:
break;
}
}
/**
* Batch import buildings from Excel file.
*
* @param excelFile Excel file containing building data
* @param assetDuplicateOptType asset duplicate handling type: 1 - remind, 2 - update
* @param LoginName login name
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId user's company ID
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse indicating the result of the batch import operation
*/
@Operation(summary = "Batch import buildings from Excel file")
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public SimpleDataResponse batchImport(
@RequestParam MultipartFile excelFile,
@Parameter(name = "assetDuplicateOptType", description = "Asset duplicate handling type: 1 - remind, 2 - update", required = true, schema = @Schema(defaultValue = "1")) @RequestParam Integer assetDuplicateOptType,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return buildingService.batchImport(excelFile, assetDuplicateOptType, UserId, CompanyId, LanguageType);
}
@Operation(summary = "获取所有")
@RequestMapping(value = "/getAll",method = RequestMethod.GET)
public SimpleDataResponse<List<BuildingPageVO>> getAll(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(buildingService.getAll(CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
@Operation(summary = "获取可以绑定楼宇的用户")
@RequestMapping(value = "/getUserForBindBuilding",method = RequestMethod.GET)
public SimpleDataResponse<List<UserBindBuildingVO>> getUserForBindBuilding(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(buildingService.getUserForBindBuilding(CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
@Operation(summary = "给用户绑定楼宇")
@RequestMapping(value = "/bindBuilding", method = RequestMethod.POST)
public SimpleDataResponse bindBuilding(
@RequestBody BindBuildingParams bindBuildingParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return buildingService.bindBuilding(bindBuildingParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "获取指定用户绑定的楼宇")
@RequestMapping(value = "/getBindedBuilding/{sourceUserId}",method = RequestMethod.GET)
public SimpleDataResponse<List<BindedBuildingVO>> getBindedBuilding(
@PathVariable Long sourceUserId,
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(buildingService.getBindedBuilding(sourceUserId, CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
}

396
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java

@ -0,0 +1,396 @@
package com.techsor.datacenter.business.controller;
import java.util.List;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.common.RepostRoidParams;
import com.techsor.datacenter.business.dto.common.api.*;
import com.techsor.datacenter.business.dto.common.roidproblemreport.ProblemReportsSummariesSearchParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.dto.asset.ApiAssetSearchByClassParams;
import com.techsor.datacenter.business.dto.asset.GetAssetFileTemporaryParams;
import com.techsor.datacenter.business.dto.asset.MonitoringAssetSearchParams;
import com.techsor.datacenter.business.dto.assetclass.ApiAssetClassSearchParams;
import com.techsor.datacenter.business.dto.common.AddBuildingParams;
import com.techsor.datacenter.business.dto.common.BatchGetFileTemporaryParams;
import com.techsor.datacenter.business.dto.common.DatacenterV1QueryParams;
import com.techsor.datacenter.business.dto.common.GetFileTemporaryParams;
import com.techsor.datacenter.business.dto.common.QueryBuilding;
import com.techsor.datacenter.business.dto.common.QueryDataFor2D3D;
import com.techsor.datacenter.business.dto.device.ApiAlarmDeviceSearchParams;
import com.techsor.datacenter.business.dto.device.ApiRiliDeviceSearchParams;
import com.techsor.datacenter.business.dto.device.DeviceSearchParams;
import com.techsor.datacenter.business.dto.space.ApiSpaceSearchParams;
import com.techsor.datacenter.business.model.Company;
import com.techsor.datacenter.business.service.CommonService;
import com.techsor.datacenter.business.vo.company.ApikeyInfo;
import com.techsor.datacenter.business.vo.version.VersionVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.tags.Tag;
/**
*
* @author jwy-style
*
*/
//@Hidden
@RestController
@RequestMapping("/common")
@Tag(name = "CommonController",description = "公共接口")
@SuppressWarnings("unchecked")
public class CommonController{
private static Logger logger = LoggerFactory.getLogger(CommonController.class);
@Autowired
private CommonService commonService;
@Value("${open.api.mock}")
private String openApiMock;
/**
* Retrieve the list of companies.
*
* @return a SimpleDataResponse containing the list of companies
*/
@Hidden
@Operation(summary = "Retrieve the list of companies")
@RequestMapping(value = "/getCompanyList", method = RequestMethod.GET)
public SimpleDataResponse<List<Company>> getCompanyList() {
return commonService.getCompanyList();
}
/**
* Receive Lambda test data.
*
* @param jsonObj JSON object containing Lambda test data
* @return a SimpleDataResponse indicating the success of receiving Lambda test data
*/
@Hidden
@Operation(summary = "Receive Lambda test data")
@RequestMapping(value = "/testReceiveLambdaData", method = RequestMethod.POST)
public SimpleDataResponse testReceiveLambdaData(@RequestBody JSONObject jsonObj) {
logger.info("Received test data from Lambda -- {}", jsonObj.toString());
return SimpleDataResponse.success();
}
/**
* Check if the API key is valid.
*
* @param apikey API key value
* @return a SimpleDataResponse indicating the validity of the API key
*/
@Hidden
@Operation(summary = "Check if the API key is valid")
@RequestMapping(value = "/checkApikey", method = RequestMethod.GET)
public SimpleDataResponse checkApikey(
@Parameter(name = "apikey", description = "API key value", required = true) @RequestParam String apikey) {
return commonService.checkApikey(apikey);
}
/**
* Endpoint for datacenter-v1-query.
*
* @param DatacenterV1QueryParams parameters for datacenter-v1-query
* @return a SimpleDataResponse containing the result of datacenter-v1-query
*/
@Operation(summary = "Endpoint for datacenter-v1-query")
@RequestMapping(value = "/datacenter/v1/query", method = RequestMethod.POST)
public SimpleDataResponse datacenterV1Query(@RequestBody DatacenterV1QueryParams DatacenterV1QueryParams) {
return commonService.datacenterV1Query(DatacenterV1QueryParams);
}
/**
* Receive Lambda email sending result.
*
* @param jsonObj JSON object containing Lambda email sending result
* @return a SimpleDataResponse indicating the success of receiving Lambda email sending result
*/
@Operation(summary = "Receive Lambda email sending result")
@RequestMapping(value = "/logEmailSentResult", method = RequestMethod.POST)
public SimpleDataResponse logEmailSentResult(@RequestBody JSONObject jsonObj) {
logger.info("Received email sending result from Lambda -- {}", jsonObj.toString());
return commonService.logEmailSentResult(jsonObj);
}
/**
* Query asset information.
*
* @param queryAssetSearchParams parameters for querying asset information
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried asset information
*/
@Operation(summary = "Query asset information")
@RequestMapping(value = "/queryAssetInfo", method = RequestMethod.POST)
public SimpleDataResponse queryAssetInfo(
@RequestBody MonitoringAssetSearchParams queryAssetSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryAssetInfo(Apikey, queryAssetSearchParams);
}
@Operation(summary = "Query space information")
@RequestMapping(value = "/querySpaceInfo", method = RequestMethod.POST)
public SimpleDataResponse querySpaceInfo(
@RequestBody ApiSpaceSearchParams searchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.querySpaceInfo(Apikey, searchParams);
}
@Operation(summary = "Query space information by floor info")
@RequestMapping(value = "/querySpaceInfoList", method = RequestMethod.POST)
public SimpleDataResponse querySpaceInfoList(
@RequestBody ApiSpaceSearchParams searchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.querySpaceInfoList(Apikey, searchParams);
}
/**
* Query device information.
*
* @param deviceSearchParams parameters for querying device information
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried device information
*/
@Operation(summary = "Query device information")
@RequestMapping(value = "/queryDeviceInfo", method = RequestMethod.POST)
public SimpleDataResponse queryDeviceInfo(
@RequestBody DeviceSearchParams deviceSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required = true) String Apikey) {
return commonService.queryDeviceInfo(Apikey, deviceSearchParams);
}
/**
* Query asset information by class.
*
* @param apiAssetSearchByClassParams parameters for querying asset information by class
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried asset information
*/
@Operation(summary = "Query asset information by class")
@RequestMapping(value = "/queryAssetInfoByClass", method = RequestMethod.POST)
public SimpleDataResponse queryAssetInfoByClass(
@RequestBody ApiAssetSearchByClassParams apiAssetSearchByClassParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryAssetInfoByClass(Apikey, apiAssetSearchByClassParams);
}
/**
* Query alarm devices information.
*
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried alarm devices information
*/
@Operation(summary = "Query alarm devices information")
@RequestMapping(value = "/queryAlarmDevice", method = RequestMethod.POST)
public SimpleDataResponse queryAlarmDevice(
@RequestBody ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryAlarmDevice(null, Apikey, apiAlarmDeviceSearchParams);
}
/**
* Query Device Classification
*
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried alarm devices information
*/
@Operation(summary = "Query Device Classification")
@RequestMapping(value = "/queryClass",method = RequestMethod.POST)
public SimpleDataResponse queryClass(
@RequestBody ApiAssetClassSearchParams apiAssetClassSearchParams,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "123456")) @RequestHeader(required=true) String Apikey){
return commonService.queryClass(Apikey, apiAssetClassSearchParams);
}
@Operation(summary = "Query Device Classification")
@RequestMapping(value = "/problem-reports/summaries",method = RequestMethod.POST)
public SimpleDataResponse problemReportsSummaries(
@RequestBody ProblemReportsSummariesSearchParams params,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "123456")) @RequestHeader(required=true) String Apikey){
//Only for test use, For staging env
if (openApiMock.equals("true")){
params.setBuildingName("東京建物日本橋ビル");
params.setAssetSymbol("HMI-7-1-4C");
}
// params.setStartDate("2024-08-30 12:50:46");
// params.setEndDate("2024-09-12 12:50:46");
//test end
return commonService.problemReportsSummaries(Apikey, params);
}
/**
* Endpoint for 2D-3D platform data integration.
*
* @param queryDataFor2D3D parameters for querying data for 2D-3D platform
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried data for 2D-3D platform
*/
@Operation(summary = "Endpoint for 2D-3D platform data integration")
@RequestMapping(value = "/datacenter/v1/sgs/query", method = RequestMethod.POST)
public SimpleDataResponse query2D3D(
@RequestBody QueryDataFor2D3D queryDataFor2D3D,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required = true) String Apikey) {
queryDataFor2D3D.setApikey(Apikey);
return commonService.query2D3D(queryDataFor2D3D);
}
@Operation(summary = "Endpoint for 2D-3D platform data integration")
@RequestMapping(value = "/queryKanriRoidMaintenanceRecord", method = RequestMethod.POST)
public SimpleDataResponse queryKanriRoidMaintenanceRecord(
@RequestBody QueryDataFor2D3D queryDataFor2D3D,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required = true) String Apikey) {
queryDataFor2D3D.setApikey(Apikey);
return commonService.query2D3D(queryDataFor2D3D);
}
/**
* Set thresholds for business IDs.
*
* @param setThresholdV1 parameters for setting thresholds
* @param Apikey API key for authentication
* @return a ResponseSetThresholdV1 indicating the success of setting thresholds
*/
@Operation(summary = "Set thresholds for business IDs")
@PostMapping("/v1/setThreshold")
public ResponseSetThresholdV1 setThresholdV1(
@RequestBody SetThresholdV1 setThresholdV1,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required = true) String Apikey) {
setThresholdV1.setApikey(Apikey);
return commonService.setThresholdV1(setThresholdV1);
}
/**
* Retrieve information related to an API key.
*
* @param param JSON object containing parameters related to an API key
* @return an ApikeyInfo containing information related to the API key
*/
@Operation(summary = "Retrieve information related to an API key")
@PostMapping("/getApikeyInfo")
public ApikeyInfo getApikeyInfo(@RequestBody JSONObject param) {
return commonService.getApikeyInfo(param);
}
@Operation(summary = "校验业务ID")
@PostMapping("/checkTargetIds")
public ResponseSetThresholdV1 checkTargetIds(
@RequestBody TargetIds targetIds,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required=true) String Apikey){
targetIds.setApikey(Apikey);
return commonService.checkTargetIds(targetIds);
}
@Operation(summary = "查询BA Status")
@PostMapping("/v1/queryStatus")
public ResponseQueryStatusV1 queryStatus(
@RequestBody QueryStatusV1 param,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required=true) String Apikey){
return commonService.queryStatusV1(param,Apikey);
}
/**
* Retrieve the latest version information.
*
* @return a SimpleDataResponse containing the latest version information
*/
@Operation(summary = "Retrieve the latest version")
@PostMapping("/getVersion")
public SimpleDataResponse<VersionVO> getVersion() {
return commonService.getVersion();
}
@AccessRequired
@Operation(summary = "重新发送Roid接口请求")
@PostMapping("/v1/repostRoid")
public SimpleDataResponse repostRoidV1(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody RepostRoidParams param
){
return commonService.repostRoidV1(param,CompanyId,LanguageType);
}
@Operation(summary = "Query devices information for Rili")
@RequestMapping(value = "/device/queryDeviceInfo", method = RequestMethod.POST)
public SimpleDataResponse queryDeviceInfo(
@RequestBody ApiRiliDeviceSearchParams apiRiliDeviceSearchParams,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required=true) String Apikey) {
return commonService.queryDeviceInfo(Apikey, apiRiliDeviceSearchParams);
}
@Hidden
@Operation(summary = "更新DynamicRouteDataSource里的TargetDataSources")
@RequestMapping(value = "/updateTargetDataSources",method = RequestMethod.POST)
public SimpleDataResponse updateTargetDataSources(@RequestBody JSONObject jsonObj){
logger.info("updateTargetDataSources接收数据--{}", jsonObj.toString());
return commonService.updateTargetDataSources(jsonObj);
}
@Operation(summary = "Get temporary link")
@RequestMapping(value = "/getTemporaryLink", method = RequestMethod.GET)
public SimpleDataResponse getTemporaryLink(
GetFileTemporaryParams getFileTemporaryParams,
@Parameter(name="LanguageType", description="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return commonService.getTemporaryLink(getFileTemporaryParams, LanguageType);
}
@Operation(summary = "batch get temporary link")
@RequestMapping(value = "/getS3FileUrl", method = RequestMethod.POST)
public SimpleDataResponse getS3FileUrl(
@RequestBody BatchGetFileTemporaryParams batchGetFileTemporaryParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
){
return commonService.getS3FileUrl(batchGetFileTemporaryParams, Apikey);
}
@Operation(summary = "add building")
@RequestMapping(value = "/addBuilding", method = RequestMethod.POST)
public SimpleDataResponse addBuilding(
@RequestBody AddBuildingParams addBuildingParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
){
return commonService.addBuilding(addBuildingParams, Apikey);
}
@Operation(summary = "query building")
@RequestMapping(value = "/queryBuilding", method = RequestMethod.POST)
public SimpleDataResponse queryBuilding(
@RequestBody QueryBuilding queryBuilding,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
){
return commonService.queryBuilding(queryBuilding, Apikey);
}
@Operation(summary = "Query information of devices with cancelled alarm")
@RequestMapping(value = "/queryCancelAlarmDevice", method = RequestMethod.POST)
public SimpleDataResponse queryCancelAlarmDevice(
@RequestBody ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryCancelAlarmDevice(null, Apikey, apiAlarmDeviceSearchParams);
}
}

61
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CompanyController.java

@ -0,0 +1,61 @@
package com.techsor.datacenter.business.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.model.BasicCompany;
import com.techsor.datacenter.business.service.CompanyService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
/**
*
* @author jwy-style
*
*/
//@Hidden
@RestController
@AccessRequired
@RequestMapping("/company")
@Tag(name = "CompanyController",description = "企业接口")
@SuppressWarnings("unchecked")
public class CompanyController{
private static Logger logger = LoggerFactory.getLogger(CompanyController.class);
@Autowired
private CompanyService companyService;
/**
* Retrieve a dropdown list of companies.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse containing the dropdown list of companies
*/
@Operation(summary = "Retrieve a dropdown list of companies")
@RequestMapping(value = "/getSelectList", method = RequestMethod.GET)
public SimpleDataResponse<List<BasicCompany>> getCompanyList(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return companyService.getSelectList(CompanyId, UserId);
}
}

257
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DashboardController.java

@ -0,0 +1,257 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.dashboard.DashboardSearchParamByDate;
import com.techsor.datacenter.business.dto.dashboard.DashboardSearchParams;
import com.techsor.datacenter.business.dto.dashboard.emqx.EmqxDashboardSearchParam;
import com.techsor.datacenter.business.dto.monitor.DevicTrendsStatsInfoDTO;
import com.techsor.datacenter.business.dto.monitor.DeviceTrendsStatsInfoAuroraDTO;
import com.techsor.datacenter.business.dto.monitor.MonitorSearchParams;
import com.techsor.datacenter.business.model.AuroraBuildingTrendStats;
import com.techsor.datacenter.business.model.BuildingTrendStats;
import com.techsor.datacenter.business.model.DeviceTrendsStats;
import com.techsor.datacenter.business.service.DashboardService;
import com.techsor.datacenter.business.service.GatewayClientsService;
import com.techsor.datacenter.business.vo.monitor.MonitorVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/dashboard")
@Tag(name = "DashboardController",description = "Dashboard")
public class DashboardController {
@Resource
private DashboardService dashboardService;
@Resource
private GatewayClientsService gatewayClientsService;
/**
* Query device information including metrics such as receiver, sender within a specific time range.
* This endpoint does not include building information.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between Greenwich Mean Time and local time in minutes (e.g., -480 for UTC+8)
* @param dashboardSearchParams parameters for the dashboard search
* @return a SimpleDataResponse containing a list of DeviceTrendsStatsInfoDTO
*/
// @AccessRequired
@Operation(summary = "Query device information including metrics such as receiver, sender within a specific time range",
description = "Time range query, received devices, processed devices, sent alarm messages")
@RequestMapping(value = "/queryDeviceInfos", method = RequestMethod.POST)
public SimpleDataResponse<List<DevicTrendsStatsInfoDTO>> queryDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DashboardSearchParams dashboardSearchParams
) {
return SimpleDataResponse.success(this.dashboardService.queryWithoutBuilding(dashboardSearchParams));
}
/**
* Query device information including metrics such as receiver, sender within a specific time range.
* This endpoint includes only building information.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between Greenwich Mean Time and local time in minutes (e.g., -480 for UTC+8)
* @param dashboardSearchParams parameters for the dashboard search
* @return a SimpleDataResponse containing a list of BuildingTrendStats
*/
@AccessRequired
@Operation(summary = "Query device information including metrics such as receiver, sender within a specific time range",
description = "Only queries building information")
@RequestMapping(value = "/queryBuildingInfos", method = RequestMethod.POST)
public SimpleDataResponse<List<BuildingTrendStats>> queryBuildingInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DashboardSearchParams dashboardSearchParams
) {
return SimpleDataResponse.success(this.dashboardService.queryWithBuilding(dashboardSearchParams));
}
/**
* Query the total quantity of all variables by day.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between Greenwich Mean Time and local time in minutes (e.g., -480 for UTC+8)
* @param dashboardSearchParams parameters for the dashboard search by date
* @return a SimpleDataResponse containing the query result for all variables' total quantity by day
*/
@Operation(summary = "Query the total quantity of all variables by day")
@RequestMapping(value = "/queryStatsDaily", method = RequestMethod.POST)
public SimpleDataResponse queryStatsDaily(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DashboardSearchParamByDate dashboardSearchParams
) {
return SimpleDataResponse.success(this.dashboardService.queryAllVarsTotalToday(dashboardSearchParams));
}
/**
* Query device information including metrics such as receiver, sender within a specific time range.
* This endpoint queries data from Aurora and does not include building information.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between Greenwich Mean Time and local time in minutes (e.g., -480 for UTC+8)
* @param dashboardSearchParams parameters for the dashboard search
* @return a SimpleDataResponse containing a list of DeviceTrendsStatsInfoAuroraDTO
*/
@Operation(summary = "Query device information including metrics such as receiver, sender within a specific time range",
description = "Time range query, received devices, processed devices, sent alarm messages")
@RequestMapping(value = "/queryDeviceInfosFromAurora", method = RequestMethod.POST)
public SimpleDataResponse<List<DeviceTrendsStatsInfoAuroraDTO>> queryDeviceInfosFromAurora(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DashboardSearchParams dashboardSearchParams
) {
return SimpleDataResponse.success(this.dashboardService.queryWithoutBuildingFromAurora(dashboardSearchParams));
}
/**
* Query device information including metrics such as receiver, sender within a specific time range.
* This endpoint queries data from Aurora and includes only building information.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between Greenwich Mean Time and local time in minutes (e.g., -480 for UTC+8)
* @param dashboardSearchParams parameters for the dashboard search
* @return a SimpleDataResponse containing a list of BuildingTrendStats
*/
@Operation(summary = "Query device information including metrics such as receiver, sender within a specific time range",
description = "Only queries building information from Aurora")
@RequestMapping(value = "/queryBuildingInfosFromAurora", method = RequestMethod.POST)
public SimpleDataResponse<List<BuildingTrendStats>> queryBuildingInfosFromAurora(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DashboardSearchParams dashboardSearchParams
) {
return SimpleDataResponse.success(this.dashboardService.queryWithBuildingFromAurora(dashboardSearchParams));
}
// @AccessRequired
// @Operation(summary = "查询所有变量的总量,按照天来算")
// @RequestMapping(value = "/queryCurrentAllVarsTotal",method = RequestMethod.POST)
// public SimpleDataResponse queryCurrentAllVarsTotal( @Parameter(name="LoginName",value="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
// @Parameter(name="AccessToken",value="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
// @Parameter(name="UserId",value="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
// @Parameter(name="CompanyId",value="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
// @Parameter(name="LanguageType",value="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
// @Parameter(name="UTCOffset",value="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
// @RequestBody DashboardSearchParamByDate dashboardSearchParams
// ){
// return SimpleDataResponse.success(this.dashboardService.queryAllVarsTotalToday(dashboardSearchParams));
// }
/**
* Query daily statistics of all variables from Aurora.
*
* @param LoginName login name of the user
* @param AccessToken authentication token
* @param UserId user ID
* @param CompanyId ID of the company to which the user belongs (optional)
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @param UTCOffset difference between Greenwich Mean Time and local time in minutes (e.g., -480 for UTC+8)
* @param dashboardSearchParams parameters for the dashboard search by date
* @return a SimpleDataResponse containing the queried daily statistics
*/
@Operation(summary = "Query daily statistics of all variables from Aurora",
description = "This endpoint retrieves total quantities of all variables for the current day from Aurora")
@RequestMapping(value = "/queryStatsDailyFromAurora", method = RequestMethod.POST)
public SimpleDataResponse queryStatsDailyFromAurora(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DashboardSearchParamByDate dashboardSearchParams
) {
return SimpleDataResponse.success(this.dashboardService.queryAllVarsTotalTodayByAurora(dashboardSearchParams));
}
@Operation(summary = "Count loytech gateway numbers",
description = "")
@RequestMapping(value = "/loytechGatewayCount", method = RequestMethod.POST)
public SimpleDataResponse loytechGatewayCount(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset
) {
return this.gatewayClientsService.count(UserId,CompanyId,LanguageType);
}
@Operation(summary = "Query daily statistics of all variables from Aurora",
description = "This endpoint retrieves total quantities of all variables for the current day from Aurora")
@RequestMapping(value = "/queryEmqxDashboard", method = RequestMethod.POST)
public SimpleDataResponse queryEmqxDashboard(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Difference between Greenwich Mean Time and local time in minutes", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
@RequestBody EmqxDashboardSearchParam param
) {
return this.dashboardService.queryEmqxDashboard(param);
}
}

74
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataController.java

@ -0,0 +1,74 @@
package com.techsor.datacenter.business.controller;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import com.techsor.datacenter.business.vo.data.HistoricalDataVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.dto.data.HistoricalDataParam;
import com.techsor.datacenter.business.service.DataService;
/**
*
* @author jwy-style
*
*/
//@Hidden
@RestController
@RequestMapping("/data")
@Tag(name = "DataController",description = "data controller")
@SuppressWarnings("unchecked")
public class DataController{
private static Logger logger = LoggerFactory.getLogger(DataController.class);
@Autowired
private DataService dataCenterService;
/**
* Export historical data based on the provided parameters.
*
* @param HistoricalDataParam parameters for historical data export
* @param response HttpServletResponse object for handling response
* @throws Exception if there is an error during the export process
*/
@Operation(summary = "Export historical data")
@RequestMapping(value = "/exportHistoricalData", method = RequestMethod.GET)
public void exportHistoricalData(
HistoricalDataParam HistoricalDataParam,
HttpServletResponse response
) throws Exception {
dataCenterService.exportHistoricalData(HistoricalDataParam, response);
}
/**
* Retrieve historical data based on the provided parameters.
*
* @param HistoricalDataParam parameters for historical data retrieval
* @return a SimpleDataResponse containing a list of HistoricalDataVO objects
*/
@Operation(summary = "Retrieve historical data")
@RequestMapping(value = "/getHistoricalData", method = RequestMethod.GET)
public SimpleDataResponse<List<HistoricalDataVO>> getHistoricalData(
HistoricalDataParam HistoricalDataParam
) {
return dataCenterService.getHistoricalData(HistoricalDataParam);
}
}

104
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataProviderController.java

@ -0,0 +1,104 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.dataprovider.DeleteDataProviderParams;
import com.techsor.datacenter.business.dto.dataprovider.OptDataProviderParams;
import com.techsor.datacenter.business.dto.dataprovider.DataProviderSearchParams;
import com.techsor.datacenter.business.service.DataProviderService;
import com.techsor.datacenter.business.vo.dataprovider.DataProviderPageVO;
import java.util.List;
@RestController
@AccessRequired
@RequestMapping("/dataProvider")
@Tag(name = "数据提供方管理", description = "Data Provider manage API")
@SuppressWarnings("unchecked")
public class DataProviderController {
private static Logger logger = LoggerFactory.getLogger(DataProviderController.class);
@Autowired
private DataProviderService dataProviderService;
@Hidden
@Operation(summary = "Add data provider")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptDataProviderParams optDataProviderParams,
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType) {
return dataProviderService.add(optDataProviderParams, UserId, CompanyId, LanguageType);
}
@Hidden
@Operation(summary = "Edit data provider")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptDataProviderParams optDataProviderParams,
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType) {
return dataProviderService.edit(optDataProviderParams, UserId, CompanyId, LanguageType);
}
@Hidden
@Operation(summary = "Delete data provider")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteDataProviderParams deleteParams,
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType) {
return dataProviderService.batchDelete(deleteParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get data provider list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<DataProviderPageVO>> getListPage(
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType,
@RequestHeader Integer UTCOffset,
DataProviderSearchParams searchParams) throws BusinessException {
searchParams.setUserId(UserId);
PageResponse<PageInfo<DataProviderPageVO>> response = new PageResponse<>();
try {
response.setData(dataProviderService.getListPage(searchParams, CompanyId, UserId, LanguageType, UTCOffset));
response.setCode(ResponseCode.SUCCESS);
response.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
response.setCode(ResponseCode.SERVER_ERROR);
response.setMsg("service error");
}
return response;
}
}

101
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataProviderGatewayInfoController.java

@ -0,0 +1,101 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.gatewayinfo.DeleteGatewayInfoParams;
import com.techsor.datacenter.business.dto.gatewayinfo.OptGatewayInfoParams;
import com.techsor.datacenter.business.dto.gatewayinfo.GatewayInfoSearchParams;
import com.techsor.datacenter.business.service.DataProviderGatewayInfoService;
import com.techsor.datacenter.business.vo.gatewayinfo.GatewayInfoPageVO;
import java.util.List;
@RestController
@AccessRequired
@RequestMapping("/dataProviderGatewayInfo")
@Tag(name = "网关情报管理", description = "Gateway info manage API")
@SuppressWarnings("unchecked")
public class DataProviderGatewayInfoController {
private static Logger logger = LoggerFactory.getLogger(DataProviderGatewayInfoController.class);
@Autowired
private DataProviderGatewayInfoService dataProviderGatewayInfoService;
@Operation(summary = "Add gateway info")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptGatewayInfoParams optGatewayInfoParams,
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType) {
return dataProviderGatewayInfoService.add(optGatewayInfoParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit gateway info")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptGatewayInfoParams optGatewayInfoParams,
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType) {
return dataProviderGatewayInfoService.edit(optGatewayInfoParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete gateway info")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteGatewayInfoParams deleteParams,
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType) {
return dataProviderGatewayInfoService.batchDelete(deleteParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get gateway info list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<GatewayInfoPageVO>> getListPage(
@RequestHeader String LoginName,
@RequestHeader String AccessToken,
@RequestHeader Long UserId,
@RequestHeader(required = false) Long CompanyId,
@RequestHeader Integer LanguageType,
@RequestHeader Integer UTCOffset,
GatewayInfoSearchParams searchParams) throws BusinessException {
searchParams.setUserId(UserId);
PageResponse<PageInfo<GatewayInfoPageVO>> response = new PageResponse<>();
try {
response.setData(dataProviderGatewayInfoService.getListPage(searchParams, CompanyId, UserId, LanguageType, UTCOffset));
response.setCode(ResponseCode.SUCCESS);
response.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
response.setCode(ResponseCode.SERVER_ERROR);
response.setMsg("service error");
}
return response;
}
}

164
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DataSrcConfigController.java

@ -0,0 +1,164 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.datasource.DataSourceConfigAddParams;
import com.techsor.datacenter.business.dto.datasource.DataSourceConfigSearchParams;
import com.techsor.datacenter.business.dto.datasource.DataSourceConfigUpdateParams;
import com.techsor.datacenter.business.service.IDataSourceConfigService;
import com.techsor.datacenter.business.vo.datasrc.DataSourceConfigVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
@Slf4j
@RestController
@RequestMapping("/datasrc")
@Tag(name = "DataSrcConfigController",description = "数据来源接口")
public class DataSrcConfigController {
@Resource
IDataSourceConfigService dataSourceConfigService;
@AccessRequired
@Operation(summary = "Get list of data source configuration with pagination")
@PostMapping(path = "/list/page")
public PageResponse<PageInfo<DataSourceConfigVO>> getListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DataSourceConfigSearchParams dataSourceConfigSearchParams
) throws BusinessException {
dataSourceConfigSearchParams.setUserId(UserId);
PageResponse<PageInfo<DataSourceConfigVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(dataSourceConfigService.getListPage(dataSourceConfigSearchParams, CompanyId, UserId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@AccessRequired
@Operation(summary = "Switch state of data source configuration")
@GetMapping(path = "/state/switch")
public SimpleDataResponse switchState(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestParam("id") Long id){
return SimpleDataResponse.success(this.dataSourceConfigService.switchState(id, UserId, CompanyId, LanguageType));
}
@AccessRequired
@Operation(summary = "Edit data source configuration")
@PostMapping(path = "/edit")
public SimpleDataResponse edit(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DataSourceConfigUpdateParams dataSourceConfigUpdateParams){
dataSourceConfigUpdateParams.setUserId(UserId);
dataSourceConfigUpdateParams.setCompanyId(CompanyId);
return this.dataSourceConfigService.editDataSourceConfig(dataSourceConfigUpdateParams, UserId, CompanyId, LanguageType);
}
@AccessRequired
@Operation(summary = "Add data source configuration")
@PostMapping(path = "/add")
public SimpleDataResponse addDataSourceConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DataSourceConfigAddParams dataSourceConfigAddParams
){
return this.dataSourceConfigService.addDataSourceConfig(dataSourceConfigAddParams, UserId, CompanyId, LanguageType);
}
@AccessRequired
@Operation(summary = "Remove data source configuration")
@GetMapping(path = "/remove")
public SimpleDataResponse removeDataSourceConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "id", description = "Data source ID, returned by the query") @RequestParam("id") Long id
){
return this.dataSourceConfigService.removeDataSourceConfig(id, UserId, CompanyId, LanguageType);
}
@AccessRequired
@Operation(summary = "Upload certificates", description = "Upload MQTT certificates")
@PostMapping(path = "/uploadCertifications")
public SimpleDataResponse uploadCertifications(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "type", description = "Certificate type 1: CA certificate 2: Client certificate 3: Client private key", required = true, schema = @Schema(defaultValue = "0")) @RequestHeader(required = true)
@RequestParam("type") Integer type,
@RequestBody MultipartFile file
){
return this.dataSourceConfigService.uploadMQTTCertificateFile(file, type, LanguageType);
}
@AccessRequired
@Operation(summary = "Download certificates", description = "Download MQTT certificates")
@GetMapping(path = "/downloadCertifications")
public void downloadCertications(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestParam("filePath") String filePath,
HttpServletResponse response){
response.setHeader("Content-Disposition", "attachment; filename="+filePath);
try ( OutputStream out = response.getOutputStream()) {
out.write(this.dataSourceConfigService.downloadMQTTCertificateFile(filePath));
out.flush();
} catch (IOException e) {
log.error("Error downloading template========> ",e);
}
}
}

166
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DeviceCategoryController.java

@ -0,0 +1,166 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.device.DeviceCategoryUpdateParams;
import com.techsor.datacenter.business.dto.device.DeviceConfigParams;
import com.techsor.datacenter.business.dto.device.DeviceConfigSearchParams;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertRemoveParams;
import com.techsor.datacenter.business.dto.device.forward.RunMockDataParams;
import com.techsor.datacenter.business.service.IDeviceTypeService;
import com.techsor.datacenter.business.vo.device.BuildInFunctionVO;
import com.techsor.datacenter.business.vo.device.DeviceCategoryVO;
import com.techsor.datacenter.business.vo.device.DeviceConfigVO;
import com.techsor.datacenter.business.vo.device.DeviceTypeVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.util.List;
@RestController
@AccessRequired
@RequestMapping("/devicecate/config")
@Tag(name = "DeviceCategoryController",description = "Device Category")
@Slf4j
public class DeviceCategoryController {
@Resource
private IDeviceTypeService deviceService;
@Operation(summary = "Get built-in function list", description = "Retrieve the list of built-in functions")
@GetMapping(path = "/buildInFunctions/get")
public SimpleDataResponse<List<BuildInFunctionVO>> getBuildInFunctionList(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestParam("functionName") String functionName){
return SimpleDataResponse.success(deviceService.getBuildInFunctionList(functionName, "I"));
}
@Operation(summary = "Get inner function list", description = "Retrieve the list of inner functions")
@GetMapping(path = "/buildInFunctions/getInnerFunction")
public SimpleDataResponse<List<BuildInFunctionVO>> getInnerFunction(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestParam("functionName") String functionName){
return SimpleDataResponse.success(deviceService.getBuildInFunctionList(functionName, "S"));
}
@Operation(summary = "Get device category ID", description = "Used for implementing frontend dropdown lists")
@GetMapping(path = "/devicecate/get")
public SimpleDataResponse<List<DeviceTypeVO>> getDeviceCategoryListByTypeName(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestParam("deviceTypeName") String deviceTypeName){
return SimpleDataResponse.success(deviceService.getDeviceCategoryListByTypeName(deviceTypeName, 0L));
}
@Operation(summary = "Query device configurations", description = "Query configurations based on device category information")
@PostMapping(path = "/deviceInfos/query")
public PageResponse<PageInfo<DeviceConfigVO>> queryBuildInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceConfigSearchParams deviceConfigSearchParams) {
PageResponse<PageInfo<DeviceConfigVO>> pageResponse = new PageResponse<>();
try{
pageResponse.setData(deviceService.getPageList(deviceConfigSearchParams, CompanyId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e){
log.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Configure device information", description = "Configure device category information")
@PostMapping(path = "/deviceInfos/config")
public SimpleDataResponse configDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceConfigParams deviceConfigParams){
return this.deviceService.addDeviceInfos(deviceConfigParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Run mock JSON data", description = "Run mock JSON data")
@PostMapping(path = "/deviceInfos/runMockJson")
public SimpleDataResponse runMockJsonData(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody RunMockDataParams runMockDataParams){
return this.deviceService.runMockJsonData(runMockDataParams);
}
@Operation(summary = "Update device category information", description = "Update device category information")
@PostMapping(path = "/update")
public SimpleDataResponse updateDeviceCate(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceCategoryUpdateParams deviceConfigParams){
return this.deviceService.updateDeviceCategoryInfos(deviceConfigParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Remove device category information", description = "Remove device category information")
@PostMapping(path = "/remove")
public SimpleDataResponse removeDeviceCate(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceAlertRemoveParams params){
return this.deviceService.deleteDeviceCategoryInfos(params.getId(), UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get device category information")
@GetMapping(path = "/getDeviceCategoryInfo")
public SimpleDataResponse<List<DeviceCategoryVO>> getDeviceCategoryInfo(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset){
return SimpleDataResponse.success(deviceService.getDeviceCategoryInfo(LanguageType));
}
}

631
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/DeviceController.java

@ -0,0 +1,631 @@
package com.techsor.datacenter.business.controller;
import com.alibaba.fastjson.JSONObject;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.data.AuroraDataParam;
import com.techsor.datacenter.business.dto.device.*;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertConfigNextParams;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertConfigNextUpdateParams;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertTemplateBindDeviceParams;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertTemplateBindSearchParams;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertTemplateDelete;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertTemplateParams;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertTemplateSearchParams;
import com.techsor.datacenter.business.dto.device.forward.DeviceForwardBatchParams;
import com.techsor.datacenter.business.dto.device.forward.DeviceForwardQueryParams;
import com.techsor.datacenter.business.dto.device.forward.DeviceForwardRemoveParmas;
import com.techsor.datacenter.business.model.MailSentResult;
import com.techsor.datacenter.business.service.CommonService;
import com.techsor.datacenter.business.service.CompanyService;
import com.techsor.datacenter.business.service.IDeviceExcelService;
import com.techsor.datacenter.business.service.IDeviceService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.company.ApikeyInfo;
import com.techsor.datacenter.business.vo.company.ApikeyOnlyInfo;
import com.techsor.datacenter.business.vo.data.AuroraDataVO;
import com.techsor.datacenter.business.vo.device.DeviceVO;
import com.techsor.datacenter.business.vo.device.LambdaEmailResult;
import com.techsor.datacenter.business.vo.device.MonitoringPointCategoryVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.rmi.ServerError;
import java.util.List;
@AccessRequired
@RestController
@RequestMapping("/device")
@Tag(name = "DeviceController",description = "Device Manage")
@Slf4j
public class DeviceController {
private static Logger logger = LoggerFactory.getLogger(DeviceController.class);
@Autowired
private CommonService commonService;
@Resource
private IDeviceService deviceService;
@Resource
private CompanyService companyService;
@Operation(summary = "Download Excel import template for device information")
@GetMapping(path = "/deviceInfos/excel/import/template")
public void downloadExcelImportTemplate(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
HttpServletResponse response) {
// Determine the appropriate template based on LanguageType
if (LanguageType == 2) {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/jp/deviceInfo_jp.xlsx"), "device_info_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/en/deviceInfo_en.xlsx"), "device_info_template.xlsx");
} else {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/deviceInfo_zh.xlsx"), "device_info_template.xlsx");
}
}
@Operation(summary = "Download Excel import template for device alert information")
@GetMapping(path = "/deviceInfos/excel/importAlert/template")
public void downloadExcelImportAlertTemplate(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
HttpServletResponse response) {
// Determine the appropriate template based on LanguageType
if (LanguageType == 2) {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/jp/deviceAlertInfo_jp.xlsx"), "device_alert_info_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/en/deviceAlertInfo_en.xlsx"), "device_alert_info_template.xlsx");
} else {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/deviceAlertInfo_zh.xlsx"), "device_alert_info_template.xlsx");
}
}
@Operation(summary = "Download PDF document for device alert information")
@GetMapping(path = "/deviceInfos/excel/importAlert/doc")
public void downloadExcelImportAlertDoc(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
HttpServletResponse response) {
// Determine the appropriate document based on LanguageType
if (LanguageType == 2) {
FileUtil.downloadPdfFile(response, this.getClass().getResourceAsStream("/documents/deviceAlertDocs/deviceAlertInfoDoc_jp.pdf"), "端末アラートマニュアル.pdf");
} else if (LanguageType == 1) {
FileUtil.downloadPdfFile(response, this.getClass().getResourceAsStream("/documents/deviceAlertDocs/deviceAlertInfoDoc_en.pdf"), "alertImportManual.pdf");
} else {
FileUtil.downloadPdfFile(response, this.getClass().getResourceAsStream("/documents/deviceAlertDocs/deviceAlertInfoDoc_zh.pdf"), "告警数据导入手册.pdf");
}
}
@Operation(summary = "Query device information based on device parameters", description = "Query device information based on device parameters")
@PostMapping(path = "/deviceInfos/query")
public PageResponse<PageInfo<DeviceVO>> queryDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceSearchParams deviceSearchParams) {
PageResponse<PageInfo<DeviceVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(deviceService.getListPage(deviceSearchParams, UserId, CompanyId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying device list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Download all devices information", description = "Download all devices information")
@PostMapping(path = "/deviceInfos/downloadAllDevicesInfo")
public ResponseEntity downloadAllDevicesInfo(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceSearchParams deviceSearchParams) throws UnsupportedEncodingException {
return deviceService.downloadAllDevicesInfo(UserId, CompanyId, LanguageType, deviceSearchParams);
}
@Operation(summary = "Download all device alert information", description = "Download all device alert information")
@PostMapping(path = "/deviceInfos/downloadAllDeviceAlertInfo")
public ResponseEntity downloadAllDeviceAlertInfo(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceSearchParams deviceSearchParams) throws UnsupportedEncodingException {
return deviceService.downloadAllDeviceAlertInfo(UserId, CompanyId, LanguageType, deviceSearchParams);
}
@Operation(summary = "Add device information", description = "Add device information")
@PostMapping(path = "/deviceInfos/add")
public SimpleDataResponse addDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceAddParams deviceAddParams) {
return this.deviceService.addDeviceInfos(deviceAddParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get device alert configuration by device ID", description = "Get device alert configuration by device ID")
@GetMapping(path = "/deviceInfos/getAlertConfig")
public SimpleDataResponse getAlertConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceId", description = "Device ID, primary key", required = true, schema = @Schema(defaultValue = "0")) @RequestParam("deviceId") Long deviceConfigId
) {
return this.deviceService.getAlertConfigById(deviceConfigId, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get DBM ClientId list", description = "Get DBM ClientId list")
@GetMapping(path = "/deviceInfos/getWsclientIdList")
public SimpleDataResponse getWsclientIdList(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset
) {
return this.deviceService.getWsclientIdList(UserId, CompanyId, LanguageType);
}
@Operation(summary = "Add device alert configuration", description = "Add device alert configuration")
@PostMapping(path = "/deviceInfos/addAlertConfig")
public SimpleDataResponse addDeviceAlertConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert configuration", required = true) @RequestBody DeviceAlertConfigNextParams deviceAlertConfigParams
) {
return this.deviceService.addNextDeviceAlertConfigInfos(deviceAlertConfigParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Add device alert configuration (v2)", description = "Add device alert configuration (v2)")
@PostMapping(path = "/deviceInfos/v2/addAlertConfig")
public SimpleDataResponse addNextDeviceAlertConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert configuration", required = true) @RequestBody DeviceAlertConfigNextParams deviceAlertConfigParams
) {
return this.deviceService.addNextDeviceAlertConfigInfos(deviceAlertConfigParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Update device alert configuration", description = "Update device alert configuration")
@PostMapping(path = "/deviceInfos/updateAlertConfig")
public SimpleDataResponse updateAlertConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert configuration", required = true) @RequestBody DeviceAlertConfigNextUpdateParams deviceAlertConfigParams
) {
return this.deviceService.updateNextDeviceAlertConfigInfos(deviceAlertConfigParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Update device alert configuration (v2)", description = "Update device alert configuration (v2)")
@PostMapping(path = "/deviceInfos/v2/updateAlertConfig")
public SimpleDataResponse updateNextAlertConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert information", required = true) @RequestBody DeviceAlertConfigNextUpdateParams deviceAlertConfigParams
) {
return this.deviceService.updateNextDeviceAlertConfigInfos(deviceAlertConfigParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Remove device alert configuration", description = "Remove device alert configuration")
@GetMapping(path = "/deviceInfos/removeAlertConfig")
public SimpleDataResponse removeAlertConfig(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "Id", description = "Device alert configuration ID", required = true) @RequestParam Integer id
) {
return this.deviceService.removeDeviceAlerrtConfig(id, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit device information", description = "Edit device information")
@PostMapping(path = "/deviceInfos/edit")
public SimpleDataResponse editDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceUpdateParams deviceUpdateParams
) {
return this.deviceService.editDeviceInfos(deviceUpdateParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete device information", description = "Delete device information")
@PostMapping(path = "/deviceInfos/delete")
public SimpleDataResponse deleteDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceDeleteParams deviceDeleteParams) {
return this.deviceService.deleteDeviceInfos(deviceDeleteParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Batch delete information", description = "Batch delete information")
@PostMapping(path = "/deviceInfos/batch/delete")
public SimpleDataResponse batchDeleteDeviceInfos(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceBatchDeleteParams deviceDeleteParams) {
return this.deviceService.batchDeleteDeviceInfos(deviceDeleteParams, UserId, CompanyId, LanguageType);
}
@Resource
private IDeviceExcelService deviceExcelService;
@Operation(summary = "Import Excel data information", description = "Import Excel data information")
@PostMapping(path = "/deviceInfos/excel/import")
public SimpleDataResponse importDeviceInfosExcelFiles(
@Parameter(name = "wsClientId", description = "websocket client id", required = false) @RequestParam(required = true) String wsClientId,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody MultipartFile files,
HttpServletResponse response) {
return this.deviceExcelService.importDeviceInfosExcelFiles(wsClientId, files, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Import Excel alert data information", description = "Import Excel alert data information")
@PostMapping(path = "/deviceInfos/excel/importAlertInfos")
public SimpleDataResponse importDeviceAlertInfosExcelFiles(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody MultipartFile files,
HttpServletResponse response) {
return this.deviceExcelService.importDeviceAlertInfosExcelFiles(files, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Configure device information forwarding", description = "Configure device information forwarding")
@PostMapping(path = "/deviceInfos/config/forward")
public SimpleDataResponse configTargetForward(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceForwardBatchParams params
) {
return this.deviceService.configBatchDeviceForward(params, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Query device alert information forwarding targets", description = "Query device alert information forwarding targets")
@PostMapping(path = "/deviceInfos/config/queryForwardList")
public SimpleDataResponse queryForwardList(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceForwardQueryParams params
) {
return this.deviceService.queryDeviceForwardList(params, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Configure device information forwarding deletion", description = "Configure device information forwarding deletion")
@PostMapping(path = "/deviceInfos/config/forward/remove")
public SimpleDataResponse removeDeviceForward(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody DeviceForwardRemoveParmas params
) {
return this.deviceService.removeDeviceForward(params, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Alarm Template - Add", description = "Add alarm template")
@PostMapping(path = "/alarmTmpl/add")
public SimpleDataResponse addAlarmTmpl(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert information", required = true) @RequestBody DeviceAlertTemplateParams deviceAlertTemplateParams
) {
return deviceService.addAlarmTmpl(deviceAlertTemplateParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Alarm Template - Edit", description = "Edit alarm template")
@PostMapping(path = "/alarmTmpl/edit")
public SimpleDataResponse editAlarmTmpl(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert information", required = true) @RequestBody DeviceAlertTemplateParams deviceAlertTemplateParams
) {
return deviceService.editAlarmTmpl(deviceAlertTemplateParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Alarm Template - Delete", description = "Delete alarm template")
@PostMapping(path = "/alarmTmpl/delete")
public SimpleDataResponse deleteAlarmTmpl(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert information", required = true) @RequestBody DeviceAlertTemplateDelete deviceAlertTemplateDelete
) {
return deviceService.deleteAlarmTmpl(deviceAlertTemplateDelete, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Alarm Template - Get Template List")
@RequestMapping(value = "/alarmTmpl/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<DeviceAlertTemplateParams>> getAlarmTmplListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
DeviceAlertTemplateSearchParams deviceAlertTemplateSearchParams
) throws BusinessException {
deviceAlertTemplateSearchParams.setUserId(UserId);
PageResponse<PageInfo<DeviceAlertTemplateParams>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(deviceService.getAlarmTmplListPage(deviceAlertTemplateSearchParams, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Alarm Template - Bind Template to Device", description = "Bind alarm template to device")
@PostMapping(path = "/alarmTmpl/bindDevice")
public SimpleDataResponse bindDevice(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@Parameter(name = "deviceAlertConfigParams", description = "Device alert information", required = true) @RequestBody DeviceAlertTemplateBindDeviceParams deviceAlertTemplateBindDeviceParams
) {
return deviceService.alarmTmplBindDevice(deviceAlertTemplateBindDeviceParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Alarm Template - Get Device Bound Templates", description = "Get templates bound to device")
@RequestMapping(value = "/alarmTmpl/getDeviceBinded/{deviceInfoId}", method = RequestMethod.GET)
public PageResponse<PageInfo<DeviceAlertTemplateParams>> getDeviceBinded(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@PathVariable Integer deviceInfoId
) throws BusinessException {
DeviceAlertTemplateBindSearchParams deviceAlertTemplateBindSearchParams = new DeviceAlertTemplateBindSearchParams();
deviceAlertTemplateBindSearchParams.setDeviceInfoId(deviceInfoId);
PageResponse<PageInfo<DeviceAlertTemplateParams>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(deviceService.getAlarmTmplDeviceBindedPage(deviceAlertTemplateBindSearchParams, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Get Lambda Email Sent Result")
@RequestMapping(value = "/getLambdaEmailSentResult", method = RequestMethod.GET)
public PageResponse<PageInfo<LambdaEmailResult>> getLambdaEmailSentResult(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
LambdaEmailResultSearchParams lambdaEmialResultSearchParams
) throws BusinessException {
PageResponse<PageInfo<LambdaEmailResult>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(deviceService.getLambdaEmailSentResult(lambdaEmialResultSearchParams, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Get Aurora Data")
@RequestMapping(value = "/getAuroraData", method = RequestMethod.GET)
public SimpleDataResponse<List<AuroraDataVO>> getAuroraData(
AuroraDataParam auroraDataParam,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset) {
return deviceService.getAuroraData(auroraDataParam, UserId, CompanyId, LanguageType);
}
/**
* Query alarm devices information.
*
* @return a SimpleDataResponse containing the queried alarm devices information
*/
@Operation(summary = "Query alarm devices information")
@RequestMapping(value = "/queryAlarmDevice", method = RequestMethod.POST)
public SimpleDataResponse queryAlarmDevice(
@RequestBody ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset) {
// ApikeyOnlyInfo apikeyInfo = commonService.getApikeyByCompanyId(CompanyId);
// if (ObjectUtils.isEmpty(apikeyInfo)){
// return SimpleDataResponse.fail(ResponseCode.SERVER_ERROR, "ServerError");
// }
return commonService.queryAlarmDevice(CompanyId, null, apiAlarmDeviceSearchParams);
}
@AccessRequired
@Operation(summary = "download old data file")
@GetMapping("/oldDataFile/download")
public void downloadOldDataFileFromS3(
@Parameter(name = "fileName", description = "file name", required = true, schema = @Schema(defaultValue = "2024-10-30-10-36-25_7o4n4.xlsx")) @RequestParam String fileName,
HttpServletResponse response,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset) {
deviceService.downloadOldDataFileFromS3(fileName, response, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get monitoring point category", description = "Get monitoring point category")
@GetMapping(path = "/getMonitoringPointCategory")
public SimpleDataResponse<List<MonitoringPointCategoryVO>> getMonitoringPointCategory(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset){
return deviceService.getMonitoringPointCategory(CompanyId, LanguageType);
}
}

156
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/FloorController.java

@ -0,0 +1,156 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.dto.space.SpaceSearchParams;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.floor.FloorSearchParams;
import com.techsor.datacenter.business.dto.floor.DeleteFloorParams;
import com.techsor.datacenter.business.dto.floor.OptFloorParams;
import com.techsor.datacenter.business.service.FloorService;
import com.techsor.datacenter.business.vo.floor.FloorPageVO;
import org.springframework.web.multipart.MultipartFile;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
*
* @author jwy-style
*
*/
@RestController
@AccessRequired
@RequestMapping("/floor")
@Tag(name = "FloorController",description = "Floor manage")
@SuppressWarnings("unchecked")
public class FloorController {
private static Logger logger = LoggerFactory.getLogger(FloorController.class);
@Autowired
private FloorService floorService;
@Operation(summary = "Add Floor")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptFloorParams optFloorParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return floorService.add(optFloorParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit Floor")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptFloorParams optFloorParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return floorService.edit(optFloorParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete Floors in Batch")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteFloorParams deleteFloorParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return floorService.batchDelete(deleteFloorParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Batch import buildings from Excel file")
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public SimpleDataResponse batchImport(
@RequestParam MultipartFile excelFile,
@Parameter(name = "assetDuplicateOptType", description = "Asset duplicate handling type: 1 - remind, 2 - update", required = true, schema = @Schema(defaultValue = "1")) @RequestParam Integer assetDuplicateOptType,
@Parameter(name = "dumpMode", description = "Asset duplicate base key, [name]:base by name, [udfId]: base by udfId", required = false, schema = @Schema(defaultValue = "udfId")) @RequestParam String dumpMode,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return floorService.batchImport(excelFile, assetDuplicateOptType,dumpMode, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get Floor List")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<FloorPageVO>> getListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Time difference in minutes from UTC, e.g., East 8 is -480", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
FloorSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<FloorPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(floorService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "获取所有")
@RequestMapping(value = "/getAll",method = RequestMethod.GET)
public SimpleDataResponse<List<FloorPageVO>> getAll(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(floorService.getAll(CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
@Operation(summary = "Download floor information", description = "Download floor information")
@PostMapping(path = "/downloadFloor")
public ResponseEntity downloadFloor(
@RequestBody FloorSearchParams pageSearchParam,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Difference between GMT and local time in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws UnsupportedEncodingException {
return floorService.downloadFloor(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset);
}
}

187
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/GatewayClientsController.java

@ -0,0 +1,187 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.gateway.*;
import com.techsor.datacenter.business.model.GatewayClients;
import com.techsor.datacenter.business.service.GatewayClientsService;
import com.techsor.datacenter.business.vo.device.BuildInFunctionVO;
import com.techsor.datacenter.business.vo.device.DeviceVO;
import com.techsor.datacenter.business.vo.gateway.GatewayClientsStatisticsCount;
import com.techsor.datacenter.business.vo.gateway.GatewayClientsStatisticsVO;
import com.techsor.datacenter.business.vo.gateway.GatewayStatusHistoryVO;
import com.techsor.datacenter.business.vo.gateway.GatewayStatusSwitchHistoryVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
//@AccessRequired
@RequestMapping("/gateway/clients")
@Tag(name = "GatewayClientsController",description = "Gateway Clients")
@Slf4j
public class GatewayClientsController {
@Autowired
private GatewayClientsService gatewayClientsService;
@Operation(summary = "Get Gateway clients list by param", description = "")
@PostMapping(path = "/getListPage")
public PageResponse<PageInfo<GatewayClients>> getBuildInFunctionList(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody GatewayClientsQueryParam param){
PageResponse<PageInfo<GatewayClients>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(gatewayClientsService.query(param, UserId, CompanyId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying device list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "add", description = "")
@PostMapping(path = "/add")
public SimpleDataResponse add(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody GatewayClientsAddParam param
){
return gatewayClientsService.add(param, UserId, CompanyId, LanguageType);
}
@Operation(summary = "edit", description = "")
@PostMapping(path = "/edit")
public SimpleDataResponse edit(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody GatewayClientsEditParam param
){
return gatewayClientsService.edit(param, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get built-in function list", description = "Retrieve the list of built-in functions")
@PostMapping(path = "/delete")
public SimpleDataResponse delete(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody GatewayClientsDeleteParam param
){
return gatewayClientsService.delete(param, UserId, CompanyId, LanguageType);
}
@Operation(summary = "MQTT statistical history", description = "")
@PostMapping(path = "/statistics/getListPage")
public PageResponse<PageInfo<GatewayClientsStatisticsVO>> getStatisticsListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody ClientsStatisticsQueryParam param){
PageResponse<PageInfo<GatewayClientsStatisticsVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(gatewayClientsService.getStatisticsListPage(param, UserId, CompanyId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying device list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Aggregation statistics")
@PostMapping(path = "/statistics/getCount")
public SimpleDataResponse<List<GatewayClientsStatisticsCount>> getCount(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody ClientsStatisticsQueryParam param
){
return gatewayClientsService.getCount(param, UserId, CompanyId, LanguageType);
}
@Operation(summary = "MQTT statistical history", description = "")
@PostMapping(path = "/statusHistory/getListPage")
public PageResponse<PageInfo<GatewayStatusHistoryVO>> getStatusHistoryListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody GatewayStatusHistoryQueryParam param){
PageResponse<PageInfo<GatewayStatusHistoryVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(gatewayClientsService.getStatusHistoryListPage(param, UserId, CompanyId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying device list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "MQTT statistical history", description = "")
@PostMapping(path = "/statusHistory/getStatusSwitchHistory")
public PageResponse<PageInfo<GatewayStatusSwitchHistoryVO>> getStatusSwitchHistory(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody GatewayStatusSwitchHistoryQueryParam param){
PageResponse<PageInfo<GatewayStatusSwitchHistoryVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(gatewayClientsService.getStatusSwitchHistory(param, UserId, CompanyId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying device list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
}

38
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/HealthController.java

@ -0,0 +1,38 @@
package com.techsor.datacenter.business.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Properties;
@RestController
@Tag(name = "HealthController",description = "Health")
public class HealthController {
@GetMapping("/healthcheck")
public String health(){
return "ok";
}
@GetMapping("/version")
public String getVersion() throws IOException {
Properties properties = new Properties();
Reader in = new InputStreamReader(this.getClass().getResourceAsStream("/config/version.properties"),"utf-8");
BufferedReader bufferedReader = new BufferedReader(in);
properties.load(bufferedReader);
String version=properties.getProperty("project.latest.version");
String content = properties.getProperty(version);
JSONObject jsonObject = new JSONObject();
jsonObject.put("version", version);
jsonObject.put("content", content);
return jsonObject.toString();
}
}

50
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MailController.java

@ -0,0 +1,50 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.dto.floor.OptFloorParams;
import com.techsor.datacenter.business.dto.mail.EmailConfig;
import com.techsor.datacenter.business.service.mail.MailEditService;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
@RestController
@RequestMapping("/mail")
@Tag(name = "MailController",description = "Mail manage")
public class MailController {
@Resource
private MailEditService mailEditService;
@Operation(summary = "Edit email configuration")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody EmailConfig emailConfig,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
this.mailEditService.edit(emailConfig);
return SimpleDataResponse.success();
}
@Operation(summary = "Get email configuration")
@RequestMapping(value = "/get", method = RequestMethod.GET)
public SimpleDataResponse get(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return SimpleDataResponse.success(this.mailEditService.get());
}
}

71
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MonitorInfoController.java

@ -0,0 +1,71 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.monitor.MonitorSearchParams;
import com.techsor.datacenter.business.service.MonitoringService;
import com.techsor.datacenter.business.vo.building.BuildingPageVO;
import com.techsor.datacenter.business.vo.monitor.MonitorVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
@Slf4j
@RestController
@RequestMapping("/monitor")
@Tag(name = "MonitorInfoController",description = "Monitor info related api")
public class MonitorInfoController {
@Resource
private MonitoringService monitoringService;
// @AccessRequired
@Operation(summary = "Time range query for SLA information. If front-end time is not provided, defaults to the last week.")
@RequestMapping(value = "/queryByPage", method = RequestMethod.POST)
public PageResponse<PageInfo<MonitorVO>> queryByList(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="UTC offset in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@RequestBody MonitorSearchParams monitorSearchParams
){
monitorSearchParams.setUserId(UserId);
PageResponse<PageInfo<MonitorVO>> pageResponse = new PageResponse<>();
try{
pageResponse.setData(monitoringService.getListPage(monitorSearchParams, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
}catch (Exception e){
log.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@AccessRequired
@Operation(summary = "Export: time range query for SLA information. If front-end time is not provided, defaults to the last week.")
@RequestMapping(value = "/downloadByCSV", method = RequestMethod.GET)
public void download(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="UTC offset in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@RequestBody MonitorSearchParams monitorSearchParams
){
monitorSearchParams.setUserId(UserId);
this.monitoringService.downloadAllMonitorInfo(monitorSearchParams, CompanyId, UserId, LanguageType, UTCOffset);
}
}

332
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MonitoringAssetController.java

@ -0,0 +1,332 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.asset.AssetThirdParams;
import com.techsor.datacenter.business.dto.asset.FileNameList;
import com.techsor.datacenter.business.dto.asset.GetAssetFileTemporaryParams;
import com.techsor.datacenter.business.dto.asset.DeleteMonitoringAssetParams;
import com.techsor.datacenter.business.dto.asset.MonitoringAssetSearchParams;
import com.techsor.datacenter.business.dto.asset.OptMonitoringAssetParams;
import com.techsor.datacenter.business.dto.space.ModifyImageDescriptionParams;
import com.techsor.datacenter.business.service.MonitoringAssetService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.asset.AssetThirdVO;
import com.techsor.datacenter.business.vo.asset.MonitoringAssetPageVO;
/**
*
* @author jwy-style
*
*/
@RestController
@AccessRequired
@RequestMapping("/monitoringAsset")
@Tag(name = "MonitoringAssetController",description = "Monitoring asset related API")
@SuppressWarnings("unchecked")
public class MonitoringAssetController {
private static Logger logger = LoggerFactory.getLogger(MonitoringAssetController.class);
@Autowired
private MonitoringAssetService monitoringAssetService;
@Operation(summary = "Add monitoring asset")
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse add(
OptMonitoringAssetParams optMonitoringAssetParams,
@RequestPart(name = "pdfUserManual", required = false) List<MultipartFile> pdfUserManual,
@RequestPart(name = "pdfDeviceImage", required = false) List<MultipartFile> pdfDeviceImage,
@RequestPart(name = "imagesIntroduction", required = false) List<MultipartFile> imagesIntroduction,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.add(optMonitoringAssetParams, pdfUserManual, pdfDeviceImage, imagesIntroduction, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit monitoring asset")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptMonitoringAssetParams optMonitoringAssetParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.edit(optMonitoringAssetParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete specified asset information file")
@RequestMapping(value = "/edit/deleteInfoFile/{assetId}", method = RequestMethod.POST)
public SimpleDataResponse deleteInfoFile(
@Parameter(name="assetId", description ="Asset primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long assetId,
@RequestBody FileNameList deleteInfoFile,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.deleteInfoFile(deleteInfoFile, assetId, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit image description")
@RequestMapping(value = "/edit/modifyImageDescription/{assetId}", method = RequestMethod.POST)
public SimpleDataResponse modifyImageDescription(
@Parameter(name="assetId", description ="Asset primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long assetId,
@RequestBody ModifyImageDescriptionParams modifyImageDescriptionParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return monitoringAssetService.modifyImageDescription(modifyImageDescriptionParams, assetId, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Upload additional files for specified asset")
@RequestMapping(value = "/edit/uploadInfoFile/{assetId}", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse modifyUploadInfoFile(
String fileDescription,
@Parameter(name="assetId", description="Asset primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long assetId,
@RequestPart("files") List<MultipartFile> detailFiles,
@Parameter(name="fileType", description="file type, 1=user manual,2=device image,3=introduction", required=true, schema = @Schema(defaultValue = "1")) @RequestParam Integer fileType,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.modifyUploadInfoFile(detailFiles, assetId, fileType, fileDescription, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download asset information files", description = "Download asset information files")
@RequestMapping(value = "/downloadDetailFile/{assetId}", method = RequestMethod.POST)
public void downloadDetailFile(
@Parameter(name="assetId", description ="Asset primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long assetId,
@RequestBody FileNameList fileNameList,
HttpServletResponse response,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Difference between GMT and local time in minutes, e.g., +480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset){
monitoringAssetService.downloadDetailFile(assetId, fileNameList, response, CompanyId, UserId, LanguageType, UTCOffset);
}
@Operation(summary = "Batch delete monitoring assets")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteMonitoringAssetParams deleteMonitoringAssetParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.batchDelete(deleteMonitoringAssetParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Batch import buildings from Excel file")
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public SimpleDataResponse batchImport(
@RequestParam MultipartFile excelFile,
@Parameter(name = "assetDuplicateOptType", description = "Asset duplicate handling type: 1 - remind, 2 - update", required = true, schema = @Schema(defaultValue = "1")) @RequestParam Integer assetDuplicateOptType,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return monitoringAssetService.batchImport(excelFile, assetDuplicateOptType, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get monitoring asset list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<MonitoringAssetPageVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Difference between GMT and local time in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
MonitoringAssetSearchParams pageSearchParam
) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<MonitoringAssetPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(monitoringAssetService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Get asset field dropdown list")
@RequestMapping(value = "/getAssetFieldList", method = RequestMethod.GET)
public SimpleDataResponse<AssetThirdVO> getAssetFieldList(
AssetThirdParams assetThirdParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return monitoringAssetService.getAssetFieldList(assetThirdParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download asset information", description = "Download asset information")
@PostMapping(path = "/downloadAsset")
public ResponseEntity downloadAsset(
@RequestBody MonitoringAssetSearchParams pageSearchParam,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Difference between GMT and local time in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws UnsupportedEncodingException {
return monitoringAssetService.downloadAsset(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset);
}
@Operation(summary = "Download file template for the delete")
@RequestMapping(value = "/downloadDeleteTemplate", method = RequestMethod.GET)
public void downloadDeleteTemplate(HttpServletResponse res,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) throws FileNotFoundException {
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/delete_asset_template_jp.xlsx"), "資産削除.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/delete_asset_template_en.xlsx"), "delete_asset_template.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/delete_asset_template_zh.xlsx"), "设备删除模板.xlsx");
}
}
@Operation(summary = "Batch delete asset from Excel file")
@RequestMapping(value = "/batchImportDelete", method = RequestMethod.POST)
public SimpleDataResponse batchImportDelete(
@RequestParam MultipartFile excelFile,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return monitoringAssetService.batchImportDelete(excelFile, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get temporary link")
@RequestMapping(value = "/getTemporaryLink", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse getTemporaryLink(
GetAssetFileTemporaryParams getAssetFileTemporaryParams,
// @RequestParam("detailFiles") MultipartFile[] detailFiles,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.getTemporaryLink(getAssetFileTemporaryParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Upload file for specified asset")
@RequestMapping(value = "/edit/uploadEditedAssetFile", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse uploadEditedAssetFile(
@Parameter(name="assetId", description ="Asset primary key ID", required=true, schema = @Schema(defaultValue = "1")) @RequestParam Long assetId,
@Parameter(name="fileType", description ="file type, 1=userManual,2=deviceImage", required=true, schema = @Schema(defaultValue = "1")) @RequestParam Integer fileType,
@Parameter(name="fileName", description ="file name", required=true, schema = @Schema(defaultValue = "SuprSet JWT.pdf")) @RequestParam String fileName,
@RequestParam("editedFile") MultipartFile editedFile,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.uploadEditedAssetFile(assetId, fileType, fileName, editedFile, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get file")
@RequestMapping(value = "/getAssetFile", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<byte[]> getAssetFile(
GetAssetFileTemporaryParams getAssetFileTemporaryParams,
// @RequestParam("detailFiles") MultipartFile[] detailFiles,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return monitoringAssetService.getAssetFile(getAssetFileTemporaryParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download template file (pdfs/images)")
@RequestMapping(value = "/downloadTemplate", method = RequestMethod.GET)
public void downloadTemplate(HttpServletResponse res,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) throws FileNotFoundException {
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/asset_pdf_jp.zip"), "asset_pdf.zip");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/asset_pdf_en.xlsx"), "asset_pdf.zip");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/asset_pdf_zh.zip"), "asset_pdf.zip");
}
}
@Operation(summary = "import pdfs and images")
@RequestMapping(value = "/edit/importBarFiles", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse uploadBarFiles(
@RequestPart("files") MultipartFile detailFile,
@Parameter(name="wsClientId", description = "websocket client id", required = false) @RequestParam(required = true) String wsClientId,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return monitoringAssetService.importBarFiles(wsClientId, detailFile, UserId, CompanyId, LanguageType);
}
}

134
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/MqttController.java

@ -0,0 +1,134 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.mqtt.MqttSearchParams;
import com.techsor.datacenter.business.dto.mqtt.BindDeviceParams;
import com.techsor.datacenter.business.dto.mqtt.DeleteMqttParams;
import com.techsor.datacenter.business.dto.mqtt.OptMqttParams;
import com.techsor.datacenter.business.service.MqttService;
import com.techsor.datacenter.business.vo.mqtt.MqttPageVO;
import java.util.List;
/**
*
* @author jwy-style
*
*/
@RestController
@AccessRequired
@RequestMapping("/mqtt")
@Tag(name = "MqttController",description = "Mqtt manage")
@SuppressWarnings("unchecked")
public class MqttController {
private static Logger logger = LoggerFactory.getLogger(MqttController.class);
@Autowired
private MqttService mqttService;
@Operation(summary = "Add Mqtt")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptMqttParams optMqttParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return mqttService.add(optMqttParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit Mqtt")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptMqttParams optMqttParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return mqttService.edit(optMqttParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete Mqtts in Batch")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteMqttParams deleteMqttParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return mqttService.batchDelete(deleteMqttParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get Mqtt List")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<MqttPageVO>> getListPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Time difference in minutes from UTC, e.g., East 8 is -480", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset,
MqttSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<MqttPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(mqttService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Bind device")
@RequestMapping(value = "/bindDevice", method = RequestMethod.POST)
public SimpleDataResponse bindDevice(
@RequestBody BindDeviceParams bindDeviceParams,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return mqttService.bindDevice(bindDeviceParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get Binded information")
@RequestMapping(value = "/getBinded/{deviceId}", method = RequestMethod.GET)
public SimpleDataResponse<List<MqttPageVO>> getBinded(
@PathVariable Long deviceId,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return mqttService.getBinded(deviceId, UserId, CompanyId, LanguageType);
}
}

173
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/NotificationConfigController.java

@ -0,0 +1,173 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.notificationconfig.DeleteSlackParams;
import com.techsor.datacenter.business.dto.notificationconfig.DeleteTeamsParams;
import com.techsor.datacenter.business.dto.notificationconfig.OptSlackParams;
import com.techsor.datacenter.business.dto.notificationconfig.OptTeamsParams;
import com.techsor.datacenter.business.dto.notificationconfig.SlackSearchParams;
import com.techsor.datacenter.business.dto.notificationconfig.TeamsSearchParams;
import com.techsor.datacenter.business.service.NotificationConfigService;
import com.techsor.datacenter.business.vo.notificationconfig.SlackPageVO;
import com.techsor.datacenter.business.vo.notificationconfig.TeamsPageVO;
import java.util.List;
/**
*
* @author jwy-style
*
*/
@RestController
@AccessRequired
@RequestMapping("/notificationConfig")
@Tag(name = "slack/teams等通知管理",description = "NotificationConfig manage API")
@SuppressWarnings("unchecked")
public class NotificationConfigController {
private static Logger logger = LoggerFactory.getLogger(NotificationConfigController.class);
@Autowired
private NotificationConfigService notificationConfigService;
@Operation(summary = "Add slack")
@RequestMapping(value = "/slack/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptSlackParams optSlackParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return notificationConfigService.add(optSlackParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit notificationConfig")
@RequestMapping(value = "/slack/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptSlackParams optSlackParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return notificationConfigService.edit(optSlackParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete notificationConfig")
@RequestMapping(value = "/slack/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteSlackParams deleteSlackParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return notificationConfigService.batchDelete(deleteSlackParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get slack list")
@RequestMapping(value = "/slack/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<SlackPageVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
SlackSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<SlackPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(notificationConfigService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Add teams")
@RequestMapping(value = "/teams/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptTeamsParams optTeamsParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return notificationConfigService.add(optTeamsParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit notificationConfig")
@RequestMapping(value = "/teams/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptTeamsParams optTeamsParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return notificationConfigService.edit(optTeamsParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete notificationConfig")
@RequestMapping(value = "/teams/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteTeamsParams deleteTeamsParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return notificationConfigService.batchDelete(deleteTeamsParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get teams list")
@RequestMapping(value = "/teams/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<TeamsPageVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
TeamsSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<TeamsPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(notificationConfigService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
}

43
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/Oidc.java

@ -0,0 +1,43 @@
package com.techsor.datacenter.business.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSONObject;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.HashMap;
@RestController
@RequestMapping("/userinfo")
public class Oidc {
private static Logger logger = LoggerFactory.getLogger(Oidc.class);
@GetMapping
public Map<String, Object> userInfo(@AuthenticationPrincipal JwtAuthenticationToken principal) {
Map<String, Object> resMap = Map.of(
"sub", principal.getName(),
"email", principal.getToken().getClaim("email"),
"given_name", principal.getToken().getClaim("given_name"),
"family_name", principal.getToken().getClaim("family_name")
);
logger.info("userinfo_result: {}", JSONObject.toJSONString(resMap));
return resMap;
}
}

56
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/OpenApiController.java

@ -0,0 +1,56 @@
package com.techsor.datacenter.business.controller;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dao.ex.CompanyMapperExt;
import com.techsor.datacenter.business.dto.account.CacheUserData;
import com.techsor.datacenter.business.dto.account.LoginParam;
import com.techsor.datacenter.business.dto.device.alert.DeviceAlertConfigNextParams;
import com.techsor.datacenter.business.dto.openapi.OpenApiAddMultiAlarmParams;
import com.techsor.datacenter.business.service.AccountService;
import com.techsor.datacenter.business.service.captcha.CaptchaService;
import com.techsor.datacenter.business.service.captcha.CaptchaVO;
import com.techsor.datacenter.business.service.impl.OpenApiServiceImpl;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
/**
* open api
* @author zhc
*
*/
@RestController
@RequestMapping("/openApi")
@Tag(name = "OpenApiController",description = "open api,verified by apikey")
public class OpenApiController {
@Autowired
OpenApiServiceImpl openApiService;
@Operation(summary = "Set multiple alarm parameters")
@RequestMapping(value = "/setMultiAlarmParams", method = RequestMethod.POST)
public SimpleDataResponse<CacheUserData> setMultiAlarmParams(
@Parameter(name="ApiKey", description = "API key", required=true, schema = @Schema(defaultValue = ""))
@RequestHeader String ApiKey,
@RequestBody List<OpenApiAddMultiAlarmParams> deviceAlertConfigParams
) {
return openApiService.setMultiAlarmParams(ApiKey, deviceAlertConfigParams, 2);
}
}

124
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/ProjectController.java

@ -0,0 +1,124 @@
package com.techsor.datacenter.business.controller;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.project.DeleteProjectParams;
import com.techsor.datacenter.business.dto.project.OptProjectParams;
import com.techsor.datacenter.business.dto.project.ProjectSearchParams;
import com.techsor.datacenter.business.service.ProjectService;
import com.techsor.datacenter.business.vo.project.ProjectPageVO;
import java.util.List;
/**
*
* @author jwy-style
*
*/
@RestController
@AccessRequired
@RequestMapping("/project")
@Tag(name = "ProjectController",description = "Project manage API")
@SuppressWarnings("unchecked")
public class ProjectController {
private static Logger logger = LoggerFactory.getLogger(ProjectController.class);
@Autowired
private ProjectService projectService;
@Operation(summary = "Add project")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptProjectParams optProjectParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return projectService.add(optProjectParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit project")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptProjectParams optProjectParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return projectService.edit(optProjectParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete project")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteProjectParams deleteProjectParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return projectService.batchDelete(deleteProjectParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get project list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<ProjectPageVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
ProjectSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<ProjectPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(projectService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "获取所有项目")
@RequestMapping(value = "/getAll",method = RequestMethod.GET)
public SimpleDataResponse<List<ProjectPageVO>> getAll(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(projectService.getAll(CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
}

182
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/RiliPersonnasController.java

@ -0,0 +1,182 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.dto.rilipersonnas.DeleteRiliPersonnasParams;
import com.techsor.datacenter.business.dto.rilipersonnas.OptRiliPersonnasParams;
import com.techsor.datacenter.business.dto.rilipersonnas.RiliPersonnasHistorySearchParams;
import com.techsor.datacenter.business.dto.rilipersonnas.RiliPersonnasSearchParams;
import com.techsor.datacenter.business.dto.tenant.DeleteTenantParams;
import com.techsor.datacenter.business.dto.tenant.OptTenantParams;
import com.techsor.datacenter.business.dto.tenant.TenantGetAllParams;
import com.techsor.datacenter.business.dto.tenant.TenantSearchParams;
import com.techsor.datacenter.business.model.RiliPersonnasHistory;
import com.techsor.datacenter.business.model.RiliPersonnasLatest;
import com.techsor.datacenter.business.service.RiliPersonnasService;
import com.techsor.datacenter.business.service.TenantService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.tenant.TenantPageVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
*
* @author zhc
*
*/
@RestController
//@AccessRequired
@RequestMapping("/rilipersonnas")
@Tag(name = "rilipersonnas",description = "rilipersonnas API")
@SuppressWarnings("unchecked")
public class RiliPersonnasController {
private static Logger logger = LoggerFactory.getLogger(RiliPersonnasController.class);
@Autowired
private RiliPersonnasService riliPersonnasService;
@Operation(summary = "Add RiliPersonnasLatest")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptRiliPersonnasParams optRiliPersonnasParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return riliPersonnasService.add(optRiliPersonnasParams,
UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit RiliPersonnasLatest")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptRiliPersonnasParams optRiliPersonnasParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return riliPersonnasService.edit(optRiliPersonnasParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete RiliPersonnasLatest")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteRiliPersonnasParams deleteRiliPersonnasParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return riliPersonnasService.batchDelete(deleteRiliPersonnasParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get RiliPersonnasLatest list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<RiliPersonnasLatest>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
RiliPersonnasSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<RiliPersonnasLatest>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(riliPersonnasService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Get RiliPersonnasHistory list")
@RequestMapping(value = "/getHistoryListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<RiliPersonnasHistory>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
RiliPersonnasHistorySearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<RiliPersonnasHistory>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(riliPersonnasService.getHistoryList(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "Batch import ")
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public SimpleDataResponse batchImport(
@RequestParam MultipartFile excelFile,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return riliPersonnasService.batchImport(excelFile, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download Excel import template")
@GetMapping(path = "/template")
public void downloadExcelImportTemplate(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
HttpServletResponse response) {
// Determine the appropriate template based on LanguageType
if (LanguageType == 2) {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/jp/personnas_template_jp.xlsx"), "personnas_template.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/en/deviceInfo_en.xlsx"), "personnas_template.xlsx");
} else {
FileUtil.downloadExcelFile(response, this.getClass().getResourceAsStream("/template/deviceInfo_zh.xlsx"), "personnas_template.xlsx");
}
}
}

271
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/SpaceController.java

@ -0,0 +1,271 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.dto.asset.MonitoringAssetSearchParams;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.space.SpaceSearchParams;
import com.techsor.datacenter.business.dto.space.SpaceFileNameList;
import com.techsor.datacenter.business.dto.common.FileDescription;
import com.techsor.datacenter.business.dto.space.DeleteSpaceParams;
import com.techsor.datacenter.business.dto.space.ModifyImageDescriptionParams;
import com.techsor.datacenter.business.dto.space.OptSpaceParams;
import com.techsor.datacenter.business.service.SpaceService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.space.SpacePageVO;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
*
* @author jwy-style
*
*/
@RestController
@AccessRequired
@RequestMapping("/space")
@Tag(name = "SpaceController",description = "Space && room API")
@SuppressWarnings("unchecked")
public class SpaceController {
private static Logger logger = LoggerFactory.getLogger(SpaceController.class);
@Autowired
private SpaceService spaceService;
@Operation(summary = "Add room")
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse add(
OptSpaceParams optSpaceParams,
@RequestPart(name = "pdfUserManual", required = false) List<MultipartFile> pdfUserManual,
@RequestPart(name = "pdfDeviceImage", required = false) List<MultipartFile> pdfDeviceImage,
@RequestPart(name = "imagesIntroduction", required = false) List<MultipartFile> imagesIntroduction,
@RequestPart(name = "pdfConstructionEquipment", required = false) List<MultipartFile> pdfConstructionEquipment,
@RequestPart(name = "pdfElectricalEquipment", required = false) List<MultipartFile> pdfElectricalEquipment,
@RequestPart(name = "pdfVentilationEquipment", required = false) List<MultipartFile> pdfVentilationEquipment,
@RequestPart(name = "pdfSanitaryEquipment", required = false) List<MultipartFile> pdfSanitaryEquipment,
@RequestPart(name = "pdfFireProtectionEquipment", required = false) List<MultipartFile> pdfFireProtectionEquipment,
@RequestPart(name = "pdfOtherEquipment", required = false) List<MultipartFile> pdfOtherEquipment,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.add(optSpaceParams, pdfUserManual, pdfDeviceImage, imagesIntroduction,
pdfConstructionEquipment,
pdfElectricalEquipment,
pdfVentilationEquipment,
pdfSanitaryEquipment,
pdfFireProtectionEquipment,
pdfOtherEquipment,
UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit room")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptSpaceParams optSpaceParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.edit(optSpaceParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete room")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteSpaceParams deleteSpaceParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.batchDelete(deleteSpaceParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Batch import buildings from Excel file")
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public SimpleDataResponse batchImport(
@RequestParam MultipartFile excelFile,
@Parameter(name = "assetDuplicateOptType", description = "Asset duplicate handling type: 1 - remind, 2 - update", required = true, schema = @Schema(defaultValue = "1")) @RequestParam Integer assetDuplicateOptType,
@Parameter(name = "dumpMode", description = "Asset duplicate base key, [name]:base by name, [udfId]: base by udfId", required = false, schema = @Schema(defaultValue = "udfId")) @RequestParam String dumpMode,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return spaceService.batchImport(excelFile, assetDuplicateOptType,dumpMode, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get room list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<SpacePageVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
SpaceSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<SpacePageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(spaceService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "获取所有")
@RequestMapping(value = "/getAll",method = RequestMethod.GET)
public SimpleDataResponse<List<SpacePageVO>> getAll(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(spaceService.getAll(CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
@Operation(summary = "Delete specified asset information file")
@RequestMapping(value = "/edit/deleteInfoFile/{spaceId}", method = RequestMethod.POST)
public SimpleDataResponse deleteInfoFile(
@Parameter(name="spaceId", description="Space primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long spaceId,
@RequestBody SpaceFileNameList deleteInfoFile,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.deleteInfoFile(deleteInfoFile, spaceId, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit image description")
@RequestMapping(value = "/edit/modifyImageDescription/{spaceId}", method = RequestMethod.POST)
public SimpleDataResponse modifyImageDescription(
@Parameter(name="spaceId", description="Space primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long spaceId,
@RequestBody ModifyImageDescriptionParams modifyImageDescriptionParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.modifyImageDescription(modifyImageDescriptionParams, spaceId, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Upload additional files for specified asset")
@RequestMapping(value = "/edit/uploadInfoFile/{spaceId}", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse modifyUploadInfoFile(
String fileDescription,
@Parameter(name="spaceId", description="Space primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long spaceId,
@RequestPart("files") List<MultipartFile> detailFiles,
@Parameter(name="fileType", description="file type, 1=user manual,2=device image,3=introduction, 4=construction equipment, 5=electrical equipment, 6=ventilation equipment, 7=sanitary equipment, 8=fire protection equipment, 9=other equipment", required=true, schema = @Schema(defaultValue = "1")) @RequestParam Integer fileType,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.modifyUploadInfoFile(detailFiles, spaceId, fileType, fileDescription, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download asset information files", description = "Download asset information files")
@RequestMapping(value = "/downloadDetailFile/{spaceId}", method = RequestMethod.POST)
public void downloadDetailFile(
@Parameter(name="spaceId", description="Space primary key ID", required=true, schema = @Schema(defaultValue = "1")) @PathVariable Long spaceId,
@RequestBody SpaceFileNameList fileNameList,
HttpServletResponse response,
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset){
spaceService.downloadDetailFile(spaceId, fileNameList, response, CompanyId, UserId, LanguageType, UTCOffset);
}
@Operation(summary = "Download template file (pdfs/images)")
@RequestMapping(value = "/downloadTemplate", method = RequestMethod.GET)
public void downloadTemplate(HttpServletResponse res,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) throws FileNotFoundException {
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/space_pdf_jp.zip"), "space_pdf.zip");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/space_pdf_en.xlsx"), "space_pdf.zip");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/space_pdf_zh.zip"), "space_pdf.zip");
}
}
@Operation(summary = "import pdfs and images")
@RequestMapping(value = "/edit/importBarFiles", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SimpleDataResponse importBarFiles(
@RequestPart("files") MultipartFile detailFile,
@Parameter(name="wsClientId", description = "websocket client id", required = false) @RequestParam(required = true) String wsClientId,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return spaceService.importBarFiles(wsClientId, detailFile, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download space information", description = "Download space information")
@PostMapping(path = "/downloadSpace")
public ResponseEntity downloadSpace(
@RequestBody SpaceSearchParams pageSearchParam,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Difference between GMT and local time in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws UnsupportedEncodingException {
return spaceService.downloadSpace(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset);
}
}

64
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/SysEnvController.java

@ -0,0 +1,64 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.gateway.GatewayClientsAddParam;
import com.techsor.datacenter.business.dto.gateway.GatewayClientsDeleteParam;
import com.techsor.datacenter.business.dto.gateway.GatewayClientsEditParam;
import com.techsor.datacenter.business.dto.gateway.GatewayClientsQueryParam;
import com.techsor.datacenter.business.dto.sysenv.SysEnvEditParam;
import com.techsor.datacenter.business.dto.sysenv.SysEnvQueryParam;
import com.techsor.datacenter.business.model.GatewayClients;
import com.techsor.datacenter.business.service.GatewayClientsService;
import com.techsor.datacenter.business.service.SysEnvService;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@AccessRequired
@RequestMapping("/sys/env")
@Tag(name = "SysEnvController",description = "Sys Env config")
@Slf4j
public class SysEnvController {
@Autowired
private SysEnvService sysEnvService;
@Operation(summary = "edit", description = "")
@PostMapping(path = "/edit")
public SimpleDataResponse edit(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody SysEnvEditParam param
){
return sysEnvService.edit(param, UserId, CompanyId, LanguageType);
}
@Operation(summary = "query", description = "")
@PostMapping(path = "/query")
public SimpleDataResponse query(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody SysEnvQueryParam param
){
return SimpleDataResponse.success(sysEnvService.getValueByKey(param.getEnvKey(), CompanyId));
}
}

151
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/TargetConfigController.java

@ -0,0 +1,151 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.targetforward.QueryAlertForwardConfigByAlarmTmplIds;
import com.techsor.datacenter.business.dto.targetforward.QueryAlertForwardConfigByDeviceIdV2Param;
import com.techsor.datacenter.business.dto.targetforward.TargetForwardAddParams;
import com.techsor.datacenter.business.dto.targetforward.TargetForwardConfigQueryParams;
import com.techsor.datacenter.business.dto.targetforward.TargetForwardUpdateParams;
import com.techsor.datacenter.business.service.ITargetForwardConfigService;
import com.techsor.datacenter.business.vo.targetconfig.TargetForwardConfigVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.util.Map;
@RestController
@RequestMapping("/targetConfig/config")
@Tag(name = "TargetConfigController",description = "Target Forward manage API")
@Slf4j
public class TargetConfigController {
@Resource
ITargetForwardConfigService targetForwardConfigService;
@AccessRequired
@Operation(summary = "Get target forward configuration information", description = "Get target forward configuration information")
@PostMapping(path = "/getListPage")
public PageResponse<PageInfo<TargetForwardConfigVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@RequestBody TargetForwardConfigQueryParams pageSearchParam) throws BusinessException {
PageResponse<PageInfo<TargetForwardConfigVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(targetForwardConfigService.getPageList(pageSearchParam, CompanyId));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
log.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@AccessRequired
@Operation(summary = "Mock target forward configuration", description = "Mock target forward configuration")
@PostMapping(path = "/mockTargetForwardConfig")
public SimpleDataResponse<Object> mock(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@Parameter(name="id", description ="ID returned by backend after saving on frontend", required=true) @RequestParam(name = "id", required = true) Long id,
@RequestBody Map<String, Object> mockBody) {
return targetForwardConfigService.mock(id, mockBody, LanguageType);
}
@AccessRequired
@Operation(summary = "Add target forward data configuration", description = "Add target forward data configuration")
@PostMapping(path = "/add")
public SimpleDataResponse<Object> configTargetForwardParams(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@RequestBody TargetForwardAddParams targetForwardAddParams) {
return this.targetForwardConfigService.configData(targetForwardAddParams, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "Update target forward data configuration", description = "Update target forward data configuration")
@PostMapping(path = "/edit")
public SimpleDataResponse<Object> updateTargetForwardParams(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@RequestBody TargetForwardUpdateParams targetForwardUpdateParams) {
return this.targetForwardConfigService.editConfigData(targetForwardUpdateParams, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "Remove target forward data configuration", description = "Remove target forward data configuration")
@GetMapping(path = "/remove")
public SimpleDataResponse<Object> removeTargetForwardParams(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
@RequestParam(name="id") Long id) {
return this.targetForwardConfigService.remove(id, CompanyId, UserId, LanguageType);
}
@Operation(summary = "Retrieve target forward configuration information by deviceId")
@GetMapping("/queryByDeviceId")
public SimpleDataResponse queryFowardDeviceIdList(@RequestParam("deviceId") String deviceId) {
return this.targetForwardConfigService.queryTargetForwardConfigById(deviceId);
}
@Operation(summary = "Retrieve target forward configuration information by deviceId")
@GetMapping("/v2/queryByDeviceId")
public SimpleDataResponse queryFowardDeviceIdListNext(@RequestParam("deviceId") String deviceId) {
return this.targetForwardConfigService.queryTargetForwardConfigByIdNext(deviceId);
}
@Operation(summary = "Retrieve alarm forward configuration information by deviceId")
@GetMapping("/v1/queryAlertForwardConfigByDeviceId")
public SimpleDataResponse queryAlertForwardConfigByDeviceId(@RequestParam("deviceId") String deviceId) {
return this.targetForwardConfigService.queryAlertForwardConfigByDeviceId(deviceId);
}
@Operation(summary = "Retrieve alarm forward configuration information by deviceId with variable replacement in alertContent")
@PostMapping("/v2/queryAlertForwardConfigByDeviceId")
public SimpleDataResponse queryAlertForwardConfigByDeviceIdV2(@RequestBody QueryAlertForwardConfigByDeviceIdV2Param param) {
return this.targetForwardConfigService.queryAlertForwardConfigByDeviceIdV2(param.getDeviceId(), param.getAlertContent(), param.getAlertTitle());
}
@Operation(summary = "Retrieve alarm forward configuration information by alarm template IDs with variable replacement in alertContent")
@PostMapping("/v1/queryAlertForwardConfigByAlarmTmplIds")
public SimpleDataResponse queryAlertForwardConfigByAlarmTmplIds(@RequestBody QueryAlertForwardConfigByAlarmTmplIds param) {
return this.targetForwardConfigService.queryAlertForwardConfigByAlarmTmplIds(param);
}
}

178
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/TenantController.java

@ -0,0 +1,178 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.exception.BusinessException;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.space.*;
import com.techsor.datacenter.business.dto.tenant.DeleteTenantParams;
import com.techsor.datacenter.business.dto.tenant.OptTenantParams;
import com.techsor.datacenter.business.dto.tenant.TenantGetAllParams;
import com.techsor.datacenter.business.dto.tenant.TenantSearchParams;
import com.techsor.datacenter.business.service.SpaceService;
import com.techsor.datacenter.business.service.TenantService;
import com.techsor.datacenter.business.util.FileUtil;
import com.techsor.datacenter.business.vo.space.SpacePageVO;
import com.techsor.datacenter.business.vo.tenant.TenantPageVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
*
* @author zhc
*
*/
@RestController
@AccessRequired
@RequestMapping("/tenant")
@Tag(name = "TenantController",description = "tenant API")
@SuppressWarnings("unchecked")
public class TenantController {
private static Logger logger = LoggerFactory.getLogger(TenantController.class);
@Autowired
private TenantService tenantService;
@Operation(summary = "Add Tenant")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody OptTenantParams optTenantParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return tenantService.add(optTenantParams,
UserId, CompanyId, LanguageType);
}
@Operation(summary = "Edit Tenant")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody OptTenantParams optTenantParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return tenantService.edit(optTenantParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Delete Tenant")
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody DeleteTenantParams deleteTenantParams,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return tenantService.batchDelete(deleteTenantParams, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Get Tenant list")
@RequestMapping(value = "/getListPage", method = RequestMethod.GET)
public PageResponse<PageInfo<TenantPageVO>> getListPage(
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="User's company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type: 0 - Chinese, 1 - English, 2 - Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
TenantSearchParams pageSearchParam) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<PageInfo<TenantPageVO>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(tenantService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "获取所有")
@RequestMapping(value = "/getAll",method = RequestMethod.GET)
public SimpleDataResponse<List<TenantPageVO>> getAll(
@Parameter(name="LoginName",description ="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description ="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description ="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description ="用户所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType",description ="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description ="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
TenantGetAllParams getallParams
) throws BusinessException {
SimpleDataResponse dataResponse =SimpleDataResponse.success(tenantService.getAll(getallParams,CompanyId, UserId, LanguageType, UTCOffset));
return dataResponse;
}
@Operation(summary = "Download template file ")
@RequestMapping(value = "/downloadTemplate", method = RequestMethod.GET)
public void downloadTemplate(HttpServletResponse res,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) throws FileNotFoundException {
if (LanguageType == 2) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/jp/tenantInfo_jp.xlsx"), "tenantInfo.xlsx");
} else if (LanguageType == 1) {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/en/tenantInfo_en.xlsx"), "tenantInfo.xlsx");
} else {
FileUtil.downloadExcelFile(res, this.getClass().getResourceAsStream("/template/tenantInfo_zh.xlsx"), "tenantInfo.xlsx");
}
}
@Operation(summary = "Batch import buildings from Excel file")
@RequestMapping(value = "/batchImport", method = RequestMethod.POST)
public SimpleDataResponse batchImport(
@RequestParam MultipartFile excelFile,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return tenantService.batchImport(excelFile, UserId, CompanyId, LanguageType);
}
@Operation(summary = "Download Tenant information", description = "Download Tenant information")
@PostMapping(path = "/downloadTenant")
public ResponseEntity downloadSpace(
@RequestBody TenantSearchParams pageSearchParam,
@Parameter(name="LoginName", description ="Login name", required=true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken", description ="Authentication token", required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId", description ="User ID", required=true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId", description ="Company ID", required=false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId,
@Parameter(name="LanguageType", description ="Language type 0: Chinese 1: English 2: Japanese", required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset", description ="Difference between GMT and local time in minutes, e.g., -480 for GMT+8", required=true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset
) throws UnsupportedEncodingException {
return tenantService.downloadTenant(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset);
}
}

75
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/UserOperationLogsController.java

@ -0,0 +1,75 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.PageInfo;
import com.techsor.datacenter.business.common.response.PageResponse;
import com.techsor.datacenter.business.common.response.ResponseCode;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.useroperationlog.UserOperationLogsResParams;
import com.techsor.datacenter.business.dto.useroperationlog.UserOperationLogsSearchParams;
import com.techsor.datacenter.business.dto.versioninfo.VersionInfoSearchParams;
import com.techsor.datacenter.business.service.UserOperationLogsService;
import com.techsor.datacenter.business.service.VersionInfoService;
import com.techsor.datacenter.business.service.impl.FloorServiceImpl;
import com.techsor.datacenter.business.vo.floor.FloorPageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@AccessRequired
@RequestMapping("/operation/logs")
@Tag(name = "UserOperationLogsController",description = "用户操作日志记录")
@Slf4j
public class UserOperationLogsController {
@Autowired
private UserOperationLogsService userOperationLogsService;
private static Logger logger = LoggerFactory.getLogger(UserOperationLogsController.class);
@Operation(summary = "getPage", description = "")
@PostMapping(path = "/getPage")
public PageResponse<PageInfo<UserOperationLogsResParams>> getPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody UserOperationLogsSearchParams param
){
PageResponse<PageInfo<UserOperationLogsResParams>> pageResponse = new PageResponse<>();
try {
pageResponse.setData(userOperationLogsService.getListPage(param,UserId,CompanyId,LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
} catch (Exception e) {
logger.error("Error querying list", e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg("service error");
}
return pageResponse;
}
@Operation(summary = "getUserList", description = "")
@PostMapping(path = "/getUserList")
public SimpleDataResponse getUserList(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset
){
return SimpleDataResponse.success(userOperationLogsService.getUserList(UserId,CompanyId,LanguageType));
}
}

43
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/VersionInfoController.java

@ -0,0 +1,43 @@
package com.techsor.datacenter.business.controller;
import com.techsor.datacenter.business.common.response.SimpleDataResponse;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.dto.sysenv.SysEnvEditParam;
import com.techsor.datacenter.business.dto.sysenv.SysEnvQueryParam;
import com.techsor.datacenter.business.dto.versioninfo.VersionInfoSearchParams;
import com.techsor.datacenter.business.service.SysEnvService;
import com.techsor.datacenter.business.service.VersionInfoService;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@AccessRequired
@RequestMapping("/version/info")
@Tag(name = "VersionInfoController",description = "Version manage")
@Slf4j
public class VersionInfoController {
@Autowired
private VersionInfoService versionInfoService;
@Operation(summary = "getPage", description = "")
@PostMapping(path = "/getPage")
public SimpleDataResponse getPage(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody VersionInfoSearchParams param
){
return SimpleDataResponse.success(versionInfoService.getListPage(param,UserId,CompanyId,LanguageType));
}
}

116
data-center-business-controller/src/main/java/com/techsor/datacenter/business/oidc/AutoLoginFilter.java

@ -0,0 +1,116 @@
package com.techsor.datacenter.business.oidc;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
import org.springframework.web.filter.OncePerRequestFilter;
import com.techsor.datacenter.business.util.redis.RedisUtil;
import java.io.IOException;
public class AutoLoginFilter extends OncePerRequestFilter {
private static final Logger logger = LoggerFactory.getLogger(AutoLoginFilter.class);
private String oidc_issuser;
private final RedisUtil redisUtil;
private final AuthenticationManager authenticationManager;
public AutoLoginFilter(String oidc_issuser, AuthenticationManager authenticationManager, RedisUtil redisUtil) {
this.authenticationManager = authenticationManager;
this.redisUtil = redisUtil;
this.oidc_issuser = oidc_issuser;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String uri = request.getRequestURI();
if (uri.contains("/oauth2/") && SecurityContextHolder.getContext().getAuthentication() == null) {
String loginToken = getCookieValue(request, "auth_token");
if (loginToken == null || !validateLoginToken(loginToken)) {
logger.info("Main site login required, reject OIDC auto-login.....");
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Please login first");
return;
}
String username = SecurityConfig.USERDETAILS_USERNAME;
String password = SecurityConfig.USERDETAILS_PASSWORD;
UsernamePasswordAuthenticationToken authRequest =
new UsernamePasswordAuthenticationToken(username, password);
try {
Authentication authentication = authenticationManager.authenticate(authRequest);
SecurityContext context = SecurityContextHolder.createEmptyContext();
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context);
HttpSession session = request.getSession(true);
session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, context);
logger.info("Auto login success for user: {}", username);
// 认证成功后重定向,避免 SavedRequest 失效问题
// String redirectUri = uri +
// (request.getQueryString() != null ? "?" + request.getQueryString() : "");
//上面的代码,在多个域名指向同一服务时,会改变域名
String redirectUri = oidc_issuser.replace("/api", "") +
uri + (request.getQueryString() != null ? "?" + request.getQueryString() : "");
logger.info("Set redirectUri: {}", redirectUri);
response.sendRedirect(redirectUri);
return;
} catch (AuthenticationException ex) {
logger.error("Auto login failed", ex);
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
}
chain.doFilter(request, response);
}
private boolean validateLoginToken(String loginToken) {
Object userDataStr = redisUtil.get(loginToken);
if (null != userDataStr) {
return true;
}
return false;
}
private String getCookieValue(HttpServletRequest request, String name) {
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
if (name.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
}

26
data-center-business-controller/src/main/java/com/techsor/datacenter/business/oidc/Jwks.java

@ -0,0 +1,26 @@
package com.techsor.datacenter.business.oidc;
import com.nimbusds.jose.jwk.RSAKey;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.util.UUID;
public class Jwks {
public static RSAKey generateRsa() {
try {
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048);
KeyPair keyPair = generator.generateKeyPair();
return new RSAKey.Builder((RSAPublicKey) keyPair.getPublic())
.privateKey((RSAPrivateKey) keyPair.getPrivate())
.keyID(UUID.randomUUID().toString())
.build();
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}

162
data-center-business-controller/src/main/java/com/techsor/datacenter/business/oidc/SecurityConfig.java

@ -0,0 +1,162 @@
package com.techsor.datacenter.business.oidc;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.Customizer;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import org.springframework.security.oauth2.core.oidc.OidcScopes;
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import com.nimbusds.jose.jwk.JWKSet;
import com.nimbusds.jose.jwk.RSAKey;
import com.nimbusds.jose.jwk.source.ImmutableJWKSet;
import com.nimbusds.jose.jwk.source.JWKSource;
import com.nimbusds.jose.proc.SecurityContext;
import com.techsor.datacenter.business.util.redis.RedisUtil;
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private static Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
@Value("${oidc.issuer}")
private String oidc_issuser;
@Value("${oidc.bimviewer-url}")
private String oidc_bimviewer_url;
@Value("${oidc.bimviewer-cognito-auth-host}")
private String oidc_bimviewer_cognito_auth_host;
@Autowired
private RedisUtil redisUtil;
public static final String USERDETAILS_USERNAME = "admin";
public static final String USERDETAILS_PASSWORD = "pass";
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
@Order(1)
public SecurityFilterChain authServerSecurityFilterChain(HttpSecurity http, AuthenticationManager authenticationManager) throws Exception {
// 默认授权服务器配置
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
// 开启 OpenID Connect 支持
http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)
.oidc(Customizer.withDefaults());
// 添加自动登录过滤器(放在认证过滤器之前)
http.addFilterBefore(new AutoLoginFilter(oidc_issuser, authenticationManager, redisUtil), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
@Bean
@Order(2)
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.anyRequest().permitAll() //放行所有请求
)
.formLogin(Customizer.withDefaults()) // 可有可无,决定是否提供登录页
.csrf(csrf -> csrf.disable()); // 如果是前后端分离接口建议关闭 CSRF
return http.build();
}
@Bean
public AuthorizationServerSettings authorizationServerSettings() {
return AuthorizationServerSettings.builder()
.issuer(oidc_issuser) // 替换为真实的域名
.build();
}
@Bean
public RegisteredClientRepository registeredClientRepository() {
RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
.clientId("at04vt84q43nq00ueuf2l4k8b")
.clientSecret("{noop}2ih0h9h6mlt18bumiv36v0jjqfkoidlqckdcfu02mesr31d2ojia")
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST)
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
.redirectUri(oidc_bimviewer_url)
.redirectUri(oidc_bimviewer_cognito_auth_host + "/oauth2/idpresponse")
.scope(OidcScopes.OPENID)
.scope(OidcScopes.EMAIL)
.scope(OidcScopes.PHONE)
.scope(OidcScopes.PROFILE)
.build();
return new InMemoryRegisteredClientRepository(registeredClient);
}
@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> tokenCustomizer() {
return context -> {
Authentication principal = context.getPrincipal();
// 只对 id_token 添加 claim
if ("id_token".equals(context.getTokenType().getValue())) {
if (principal != null && principal.getPrincipal() instanceof UserDetails userDetails) {
context.getClaims().claim("email", userDetails.getUsername() + "@example.com");
context.getClaims().claim("given_name", "Test");
context.getClaims().claim("family_name", "User");
}
}
};
}
@Bean
public JWKSource<SecurityContext> jwkSource() {
RSAKey rsaKey = Jwks.generateRsa();
JWKSet jwkSet = new JWKSet(rsaKey);
return new ImmutableJWKSet<>(jwkSet);
}
@Bean
public UserDetailsService users() {
UserDetails user = User.builder()
.username(USERDETAILS_USERNAME)
.password("{noop}" + USERDETAILS_PASSWORD)
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}

49
data-center-business-controller/src/main/java/com/techsor/datacenter/business/swagger/SwaggerConfig.java

@ -0,0 +1,49 @@
//package com.techsor.datacenter.business.swagger;
//
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Profile;
//import springfox.documentation.builders.ApiInfoBuilder;
//import springfox.documentation.builders.PathSelectors;
//import springfox.documentation.service.ApiInfo;
//import springfox.documentation.service.Contact;
//import springfox.documentation.spi.DocumentationType;
//import springfox.documentation.spring.web.plugins.Docket;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;
//
///**
// * http://127.0.0.1:20002/swagger-ui.html
//* @author 江武元
// */
//@Configuration
//@EnableSwagger2
//public class SwaggerConfig {
//
// @Value("${api.enable:false}")
// private boolean enable;
//
//// @Profile({"dev","stg"})
// @Bean
// public Docket webApiConfig(){
// return new Docket(DocumentationType.SWAGGER_2)
// .groupName("webApi")
// .apiInfo(webApiInfo())
// .select()
// .paths(PathSelectors.any())
// .build()
// .enable(enable);
// }
//
// private ApiInfo webApiInfo() {
// return new ApiInfoBuilder()
// // Document title
// .title("Document title")
// // Document description
// .description("Document description")
// // Document version
// .version("1.0")
// .build();
// }
//}
//

59
data-center-business-controller/src/main/resources/assembly.xml

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<!-- 最终打包文件的后缀,格式为 ${fileName}-bin -->
<id>data-center-business</id>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<!-- 文件配置 -->
<fileSets>
<!-- 把项目自己编译出来根目录下的jar文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把项目自己编译出来的jar文件夹下的jar文件,去除第三方jar,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}/jar</directory>
<outputDirectory>/</outputDirectory>
<excludes>
<exclude>lib/*.jar</exclude>
</excludes>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把项目自己编译出来的lib文件夹下的jar文件,打包进zip文件的lib目录 -->
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>/lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把编译出来的config文件夹,去除application.properties,打包进zip文件的config目录 -->
<fileSet>
<directory>${project.build.directory}/config</directory>
<outputDirectory>/config</outputDirectory>
<excludes>
<exclude>application.properties</exclude>
</excludes>
</fileSet>
<!-- 把编译出来的template文件夹,打包进zip文件的template目录 -->
<fileSet>
<directory>${project.build.directory}/template</directory>
<outputDirectory>/template</outputDirectory>
</fileSet>
</fileSets>
</assembly>

BIN
data-center-business-controller/src/main/resources/config/NotoSansJP-Regular.ttf

Binary file not shown.

BIN
data-center-business-controller/src/main/resources/config/VLGothicregular.ttf

Binary file not shown.

170
data-center-business-controller/src/main/resources/config/application.properties

@ -0,0 +1,170 @@
server.port=20008
api.enable=${apiEnable}
spring.mvc.pathmatch.matching-strategy= ANT_PATH_MATCHER
mybatis.mapperLocations=classpath:mappers/**/*.xml
spring.datasource.admin.name=data_center_new
spring.datasource.admin.url=jdbc:mysql://${datasourceDNS}/data_center_new?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=${datasourceTimeZone}
spring.datasource.admin.username=${datasourceUsername}
spring.datasource.admin.password=${datasourcePassword}
#使用druid数据源
spring.datasource.admin.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.admin.driverClassName=com.mysql.jdbc.Driver
spring.datasource.admin.hikari.driverClassName=com.mysql.jdbc.Driver
spring.datasource.admin.hikari.schema=data_center_new
spring.datasource.admin.hikari.minimum-idle: 5
spring.datasource.admin.hikari.maximum-pool-size: ${rdsMaxPool:40}
spring.datasource.admin.hikari.connection-timeout:10000
dynamic.jdbc.url=jdbc:mysql://${datasourceDNS:rm-bp11k2zm2fr7864428o.mysql.rds.aliyuncs.com:3306}/%s?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=${datasourceTimeZone}
spring.datasource.url=jdbc:mysql://${datasourceDNS:rm-bp11k2zm2fr7864428o.mysql.rds.aliyuncs.com:3306}/data_center_new?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=${datasourceTimeZone}
#配置log日志
logging.config=classpath:config/logback-boot.xml
logging_level=${loggingLevel:DEBUG}
logging_path=${loggingPath:E:/logDemo}
#部署时使用SYSLOG
logging_appender=${loggingAppender:STDOUT}
logging_maxHistory=30
logging_maxFileSize=100MB
user.login.keytimeout=3600
#集群模式cluster
spring.redis.cluster.nodes=192.168.0.30:7000,192.168.0.30:7001
#跨集群执行命令时要遵循的最大重定向数量
spring.redis.cluster.max-redirects=3
#哨兵模式sentinel
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.0.30:16379,192.168.0.30:16379
#单机模式standalone
spring.redis.host=${redisHost}
spring.redis.port=6379
spring.redis.password=${redisPassword}
spring.redis.timeout=5000
#Redis数据库索引(默认为0)
spring.redis.database=0
#配置启动模式cluster、sentinel、standalone
spring.redis.mode=standalone
# Lettuce
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=100
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# 关闭超时时间
spring.redis.lettuce.shutdown-timeout=100
#邮件发送信息
mail.smtp.host=email-smtp.ap-northeast-1.amazonaws.com
mail.smtp.port=465
mail.smtp.auth=true
mail.smtp.ssl=true
mail.sender.username=AKIAVRXFMB43Z4Q6WGZN
mail.sender.password_encrypted=true
mail.sender.password=a/52R0rao7ksRMvl1j17fVEmPCw7gC9OreHDqWOE+S7sgmoQT0YgoLRJqOlJqX7e
mail.sender.sendername=datacenter-info
mail.sender.from=alert@ttkdatatechbuild.com
#邮件通知服务开关
mail.send.switch=true
Spring.mvc.hiddenmethod.filter.enabled=true
#单个文件上传发大小
spring.servlet.multipart.max-file-size=200MB
#多个文件上传的共大小不得超过100M
spring.servlet.multipart.max-request-size=500MB
amazon.aws.accesskey=${awsAccesskey}
amazon.aws.secretkey=${awsSecretkey}
amazon.aws.bucket=${awsBucket}
amazon.aws.bucket.asset=${awsBucketAsset}
amazon.aws.bucket.old.file=${awsBucketOldFile:operation-records}
amazon.aws.athena.database=${athenaDatabase:tokyotatemoenergydb}
amazon.aws.athena.table=${athenaTable:rawdatalake}
amazon.aws.athena.out-location=${athenaOutLocation:s3://s3-athena-data-923770123186}
# log4j.properties
log4j.logger.org.apache.ibatis.logging.Log=${ibatisLoggingLog}
log4j.logger.org.apache.ibatis.logging.LogFactory=${ibatisLoggingLogFactory}
datacenter.v1.query.url=${datacenterV1QueryUrl}
mybatis.configuration.map-underscore-to-camel-case=true
server.servlet.context-path=/api
monitor.sender.url=${monitorSenderUrl:http://localhost:8201/health}
monitor.receiver.url=${monitorReceiverUrl:http://localhost:8200/health}
monitor.interval=${monitorInterval:50000}
# enable or disable the api
switch.stats.status=${switchStatsStatus:true}
#auro.apikey
auro.apikey=${auroApiKey:8IBeyF6le9yjvXAW}
schedule.cron.expression=${stats.cron:0 3 * * * ? }
spring.flyway.enabled=true
spring.flyway.url=jdbc:mysql://${datasourceDNS}/data_center_new?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=${datasourceTimeZone}
spring.flyway.user=${datasourceUsername}
spring.flyway.password=${datasourcePassword}
spring.flyway.locations=classpath:db/migration
spring.flyway.baseline-on-migrate=true
spring.flyway.driver-class-name=com.mysql.cj.jdbc.Driver
third.problem.reports.url=${thirdProblemReportsHost:https://api-sec.test-public-api.kanri-roid.app}
third.problem.reports.token=${thirdProblemReportsToken:Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIzIiwianRpIjoiOWJjNmM2MGFkMTVmZjllYWI4NmM4MGZhMDA1ZmVjMTM5YjQ1MTk4MDU1Njg4NjhlNzEzYTU1MzllNzJmZmE1YTM5N2NlMTM4ZDUxMGJlMmIiLCJpYXQiOjE3MTAxMTE5NzkuMDMxODE3LCJuYmYiOjE3MTAxMTE5NzkuMDMxODIxLCJleHAiOjQ4NjU3ODU1NzkuMDIxOTI3LCJzdWIiOiIyODU5MCIsInNjb3BlcyI6W119.INAgMv1A8DEcci5t9r2472pSWBeHZI7HrYKFVO2vqYGe63m2cDDHux9oV_SnRLEHj0Fm3oozC1zBKe1AJU45LHx6Gpe4n6E19TFbSVl0RrvhGVVL_qn8BkxAvcaNafzV0vwhq2o1cxxUt4rrc4wB7fXMsY72IH7ci2fJsUHdZoxccMkLE-n4L7hJ8napOBxG-aoOG68nKZXYejMKTfMzAsITU4-4n7s7gyv-YXWGlmuB46Fb-LrSpqYElr1TiaVUUGOeQ8CdgwJUP6ta-kH4BmmRp5LBNgCGz0vfZ4T8zI33CCX52DDG598WIUxi2KHMxrvFJFY1hroio-l3_4D-T2typpqhM9YxxDvfDpP5BscE-Q06tq0utZjMlwnCD0l4vPmBYmsZO-qgTK6nAYIBJIH6M5a2e6O12S_eqk0oI6ebXAOYik163E-8GjynupCwrnszQ6jEuBg0C8UBRAn5fbKd_C2hd6bhq3QQbpsui3QksuTqv04yu40hGf1jCWTPDzJAvpGZDkCs_QKIfb5iDUfRpq1uNIr-r72MveWfBjtBI7C6v7Lp0hWYoiXHNf0yxft85akNfJnIU6XIqtxVPd5nUd4neVjttmb8ikasC3ZBBjA62AvJRNqnfPz58t05GXyIpShWappi8mrel_qDcabhCcnotixC845GlCo21Nc}
#EMQX API
emqx.api.baseUrl = ${emqxApiBaseUrl:http://49.235.129.192:18083}
emqx.api.username = ${emqxApiUsername:1c6b5ecabe169009}
emqx.api.password = ${emqxApiPassword:gDXXRdgRMolBqoCVyhITwikuFWhOkmd6UC8LSxEx8KC}
# API Mock switch
open.api.mock = ${openApiMock:false}
#启用 NoHandlerFoundException
spring.mvc.throw-exception-if-no-handler-found=true
#禁用 Spring Boot 默认的静态资源映射,避免 404 错误被静态资源处理覆盖。
spring.web.resources.add-mappings=false
server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.secure=true
springdoc.swagger-ui.doc-expansion=none
springdoc.swagger-ui.operations-sorter=alpha
springdoc.swagger-ui.tags-sorter=alpha
response.access.control.allow.origin = ${accessControlAllowOrigin:*}
# Clouddog API
clouddog.api.url = ${cloudApiUrl:https://manager.clouddog.jp/api/common/uploadServerAlarmInfo}
clouddog.api.apikey = ${cloudApiApiKey:cbff30e083e24208b373faa705202906}
clouddog.api.notificationObj = ${notificationObj:https://hooks.slack.com/services/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}
oidc.issuer = ${oidcIssuer:https://dongjian.southwave.tech/api}
oidc.bimviewer-url = ${oidcBimviewerUrl:https://bimviewer-stg.ttkdatatechbuild.com/TTNB}
oidc.bimviewer-cognito-auth-host = ${oidcBimviewerCognitoAuthHost:https://bimviewer-stg.auth.ap-northeast-1.amazoncognito.com}
# Rili Realted info
rili.personnas.authUrl=${riliAuthUrl:https://bitlock.bitkey.cloud/v1/personas/{persona_id}/auth}
rili.personnas.apiUrl=${riliApiUrl:https://api.workhub.site/v1/organizations/{organizationId}/spaces/{spaceId}/people-count}
rili.personnas.personaId=${riliPersonaId:4f8d785b-5eb8-4c4e-8374-6637bc499538}
rili.personnas.password=${riliPassword:demodemo}
rili.personnas.organizationId=${riliOrganizationId:3a37eff2-2cec-474c-af15-163e4286e47e}

4
data-center-business-controller/src/main/resources/config/log4j.properties

@ -0,0 +1,4 @@
# log4j.properties
log4j.logger.org.apache.ibatis.logging.Log=DEBUG
log4j.logger.org.apache.ibatis.logging.LogFactory=DEBUG

61
data-center-business-controller/src/main/resources/config/logback-boot.xml

@ -0,0 +1,61 @@
<configuration>
<springProperty scop="context" name="logging_level" source="logging_level" defaultValue="debug"/>
<springProperty scop="context" name="logging_path" source="logging_path"/>
<springProperty scop="context" name="logging_appender" source="logging_appender"/>
<springProperty scop="context" name="logging_maxHistory" source="logging_maxHistory"/>
<springProperty scop="context" name="logging_maxFileSize" source="logging_maxFileSize"/>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
<!-- appender是configuration的子节点,是负责写日志的组件。 -->
<!-- ConsoleAppender:把日志输出到控制台 -->
<appender name="CONSOLELOG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{requestId}] - %msg%n</pattern>
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %c (%file:%line\)- %m%n</pattern> -->
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n-->
<!-- </pattern>-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{requestId}] - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="SYSLOG"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logging_path}/spring.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/spring.2019-05-27.0.log -->
<fileNamePattern>${logging_path}/spring.%d.%i.gz</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为15天 -->
<maxHistory>${logging_maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB-->
<maxFileSize>${logging_maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t] %c %m%n
</pattern>
<!-- 记录日志的编码 -->
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- project default level -->
<logger name="com.techsor.datacenter.business" level="${logging_level}"/>
<logger name="org.mybatis" level="${logging_level}"/>
<!-- 控制台输出日志级别 -->
<root level="INFO">
<appender-ref ref="${logging_appender}" />
</root>
</configuration>

4
data-center-business-controller/src/main/resources/config/version.properties

@ -0,0 +1,4 @@
project.latest.version=v0.2.2.20240228
v0.2.2.20240228=1.告警模板接口开发 2.增加deviceIdPosition的JSON支持 3.导入的资产已存在时,区分提醒和更新 4.转发目标代码相关处理
v0.0.1.20240101=1.历史

13
data-center-business-controller/src/main/resources/db/migration/V10__gateway_clients.sql

@ -0,0 +1,13 @@
USE `data_center_new`;
CREATE TABLE IF NOT EXISTS `gateway_clients` (
`id` int NOT NULL AUTO_INCREMENT,
`client_id` varchar(100) DEFAULT NULL,
`client_name` varchar(45) DEFAULT NULL,
`address` varchar(512) DEFAULT NULL COMMENT '安装地址',
`online_status` int DEFAULT '-1' COMMENT '在线状态\n-1:未知,0:离线,1:在线\n30分钟未收到数据认为离线\n',
`last_updata_ts` bigint DEFAULT NULL,
`create_ts` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '是否删除\n0:正常\n1:删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

7
data-center-business-controller/src/main/resources/db/migration/V11__sys_env.sql

@ -0,0 +1,7 @@
USE `data_center_new`;
CREATE TABLE IF NOT EXISTS `sys_env` (
`env_key` varchar(45) NOT NULL DEFAULT 'default',
`env_value` varchar(1024) DEFAULT NULL,
PRIMARY KEY (`env_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

141
data-center-business-controller/src/main/resources/db/migration/V12__asset_class.sql

@ -0,0 +1,141 @@
USE `data_center_new`;
DROP procedure IF EXISTS `add_column`;
DELIMITER $$
CREATE PROCEDURE add_column()
BEGIN
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'basic_monitoring_asset'
AND column_name = 'class_big_id'
) THEN
ALTER TABLE basic_monitoring_asset
ADD COLUMN `class_big_id` bigint DEFAULT NULL AFTER `class_big`;
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'basic_monitoring_asset'
AND column_name = 'class_medium_id'
) THEN
ALTER TABLE basic_monitoring_asset
ADD COLUMN `class_medium_id` bigint DEFAULT NULL AFTER `class_medium`;
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'basic_monitoring_asset'
AND column_name = 'class_small_id'
) THEN
ALTER TABLE basic_monitoring_asset
ADD COLUMN `class_small_id` bigint DEFAULT NULL AFTER `class_small`;
END IF;
END$$
DELIMITER ;
CALL add_column();
DROP procedure IF EXISTS `add_column`;
CREATE TABLE IF NOT EXISTS `basic_asset_class_big` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
CREATE TABLE IF NOT EXISTS `basic_asset_class_medium` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`class_big_id` bigint DEFAULT NULL,
`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
CREATE TABLE IF NOT EXISTS `basic_asset_class_small` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`class_medium_id` bigint DEFAULT NULL,
`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
-- 插入class_big到basic_asset_class_big
INSERT INTO basic_asset_class_big (company_id, class_name)
SELECT DISTINCT company_id, class_big
FROM basic_monitoring_asset WHERE class_big != '' AND class_big IS NOT NULL
ON DUPLICATE KEY UPDATE class_name=VALUES(class_name); -- 如果已存在则跳过
-- 更新basic_monitoring_asset的class_big_id
UPDATE basic_monitoring_asset bma
JOIN basic_asset_class_big bacb
ON bma.company_id = bacb.company_id AND bma.class_big = bacb.class_name
SET bma.class_big_id = bacb.id;
-- 插入class_medium到basic_asset_class_medium
INSERT INTO basic_asset_class_medium (company_id, class_big_id, class_name)
SELECT DISTINCT bma.company_id, bacb.id, bma.class_medium
FROM basic_monitoring_asset bma
JOIN basic_asset_class_big bacb
ON bma.company_id = bacb.company_id AND bma.class_big = bacb.class_name
WHERE bma.class_medium != '' AND bma.class_medium IS NOT NULL
ON DUPLICATE KEY UPDATE class_name=VALUES(class_name); -- 如果已存在则跳过
-- 更新basic_monitoring_asset的class_medium_id
UPDATE basic_monitoring_asset bma
JOIN basic_asset_class_medium bacm
ON bma.company_id = bacm.company_id AND bma.class_medium = bacm.class_name
SET bma.class_medium_id = bacm.id;
-- 插入class_small到basic_asset_class_small
INSERT INTO basic_asset_class_small (company_id, class_medium_id, class_name)
SELECT DISTINCT bma.company_id, bacm.id, bma.class_small
FROM basic_monitoring_asset bma
JOIN basic_asset_class_medium bacm
ON bma.company_id = bacm.company_id AND bma.class_medium = bacm.class_name
WHERE bma.class_small != '' AND bma.class_small IS NOT NULL
ON DUPLICATE KEY UPDATE class_name=VALUES(class_name); -- 如果已存在则跳过
-- 更新basic_monitoring_asset的class_small_id
UPDATE basic_monitoring_asset bma
JOIN basic_asset_class_small bacs
ON bma.company_id = bacs.company_id AND bma.class_small = bacs.class_name
SET bma.class_small_id = bacs.id;

16
data-center-business-controller/src/main/resources/db/migration/V13_user_operation_logs.sql

@ -0,0 +1,16 @@
USE `data_center_new`;
CREATE TABLE IF NOT EXISTS
`user_operation_logs` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`company_id` bigint DEFAULT NULL,
`operation` varchar(255) NOT NULL,
`description_jp` text,
`detail_log` mediumtext,
`result` varchar(50) NOT NULL,
`ip_address` varchar(45) DEFAULT NULL,
`created_at` bigint NOT NULL,
`description_cn` text,
`description_en` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

50
data-center-business-controller/src/main/resources/db/migration/V14__effective_period.sql

@ -0,0 +1,50 @@
USE `data_center_new`;
DROP procedure IF EXISTS `add_column`;
DELIMITER $$
CREATE PROCEDURE add_column()
BEGIN
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'device_alert_template'
AND column_name = 'effective_period'
) THEN
ALTER TABLE device_alert_template
ADD COLUMN `effective_period` varchar(200) DEFAULT NULL COMMENT '告警有效时间段';
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'mail_sent_result'
AND column_name = 'detail'
) THEN
ALTER TABLE mail_sent_result
ADD COLUMN `detail` text COMMENT '详情';
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'mail_sent_result'
AND column_name = 'log_type'
) THEN
ALTER TABLE mail_sent_result
ADD COLUMN `log_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT 'roid1,roid2,mail' after `device_id`;
END IF;
END$$
DELIMITER ;
CALL add_column();
DROP procedure IF EXISTS `add_column`;

2
data-center-business-controller/src/main/resources/db/migration/V15__gateway_clients_alter.sql

@ -0,0 +1,2 @@
USE `data_center_new`;
ALTER TABLE gateway_clients ADD COLUMN company_id BIGINT;

27
data-center-business-controller/src/main/resources/db/migration/V16__aurora_read_url.sql

@ -0,0 +1,27 @@
USE `data_center_new`;
DROP procedure IF EXISTS `add_column`;
DELIMITER $$
CREATE PROCEDURE add_column()
BEGIN
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'basic_company'
AND column_name = 'aurora_read_url'
) THEN
ALTER TABLE `data_center_new`.`basic_company` ADD COLUMN `aurora_read_url` VARCHAR(255) NULL AFTER `aurora_url`;
END IF;
END$$
DELIMITER ;
CALL add_column();
DROP procedure IF EXISTS `add_column`;

79
data-center-business-controller/src/main/resources/db/migration/V17__mqtt_statistics.sql

@ -0,0 +1,79 @@
USE `data_center_new`;
ALTER TABLE `sys_env` DROP PRIMARY KEY;
DROP procedure IF EXISTS `add_column`;
DELIMITER $$
CREATE PROCEDURE add_column()
BEGIN
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'gateway_clients'
AND column_name = 'data_amount_threshold'
) THEN
ALTER TABLE gateway_clients
ADD COLUMN `data_amount_threshold` int DEFAULT NULL COMMENT '数据量阈值';
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'gateway_clients'
AND column_name = 'data_amount_threshold_alarm'
) THEN
ALTER TABLE gateway_clients
ADD COLUMN `data_amount_threshold_alarm` int DEFAULT '0' COMMENT '数据量阈值告警,0=正常,1=告警';
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'gateway_clients'
AND column_name = 'data_accumulated_totals'
) THEN
ALTER TABLE gateway_clients
ADD COLUMN `data_accumulated_totals` int DEFAULT NULL COMMENT '累计数据量';
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_new'
AND table_name = 'sys_env'
AND column_name = 'company_id'
) THEN
ALTER TABLE sys_env
ADD COLUMN `company_id` bigint DEFAULT NULL;
ALTER TABLE sys_env
ADD UNIQUE INDEX uk_env_key_company (env_key, company_id);
END IF;
END$$
DELIMITER ;
CALL add_column();
DROP procedure IF EXISTS `add_column`;
CREATE TABLE IF NOT EXISTS `gateway_clients_statistics` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`client_id` varchar(100) DEFAULT NULL,
`5_min_count` int DEFAULT NULL,
`ts` bigint DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `client_id` (`client_id`,`ts`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='数据量统计';

30
data-center-business-controller/src/main/resources/db/migration/V18__iotcore.sql

@ -0,0 +1,30 @@
DROP TABLE IF EXISTS `mqtt_config`;
CREATE TABLE `mqtt_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`mqtt_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
`mqtt_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '格式为ip:port',
`mqtt_username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'mqtt用户名',
`mqtt_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'mqtt密码',
`mqtt_client_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`mqtt_topic` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`is_enabled` int DEFAULT '0' COMMENT '0-启动,1-关闭',
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
`apikey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`creator_id` bigint DEFAULT NULL,
`modify_time` bigint DEFAULT NULL,
`modifier_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
DROP TABLE IF EXISTS `mqtt_device_relation`;
CREATE TABLE `mqtt_device_relation` (
`device_id` bigint NOT NULL COMMENT '设备信息ID',
`mqtt_id` bigint DEFAULT NULL COMMENT 'MQTT的ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

7
data-center-business-controller/src/main/resources/db/migration/V19__gateway_client_status_history.sql

@ -0,0 +1,7 @@
CREATE TABLE `gateway_client_status_history` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`company_id` BIGINT NULL DEFAULT NULL,
`client_id` VARCHAR(100) NULL DEFAULT NULL,
`status` INT NULL DEFAULT NULL COMMENT '0:离线\\\\n1:在线\\\\n',
`ts` BIGINT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

5
data-center-business-controller/src/main/resources/db/migration/V1__init_schema.sql

@ -0,0 +1,5 @@
CREATE TABLE initial_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

5
data-center-business-controller/src/main/resources/db/migration/V20__mail_roid_log.sql

@ -0,0 +1,5 @@
ALTER TABLE mail_sent_result ADD `building_name` varchar(255) DEFAULT NULL COMMENT '楼宇名';
ALTER TABLE mail_sent_result ADD `floor_name` varchar(255) DEFAULT NULL COMMENT '楼层名';
ALTER TABLE mail_sent_result ADD `device_name` varchar(255) DEFAULT NULL COMMENT '设备名称';
ALTER TABLE mail_sent_result ADD `device_sn` varchar(255) DEFAULT NULL COMMENT 'sn';
ALTER TABLE mail_sent_result ADD `alert_type` int DEFAULT NULL COMMENT '1-告警,2-恢复告警,3-无效告警';

2
data-center-business-controller/src/main/resources/db/migration/V21__iotcore_type.sql

@ -0,0 +1,2 @@
ALTER TABLE mqtt_config ADD `purpose_type` int DEFAULT '1' COMMENT '1-告警转发,2-全部转发';

2
data-center-business-controller/src/main/resources/db/migration/V22__gateway_clients_modify.sql

@ -0,0 +1,2 @@
ALTER TABLE `gateway_clients`
ADD COLUMN `alert_switch` INT NULL DEFAULT 1 COMMENT '告警开关,1:开,0:关' AFTER `data_accumulated_totals`;

12
data-center-business-controller/src/main/resources/db/migration/V23__file_key.sql

@ -0,0 +1,12 @@
ALTER TABLE basic_monitoring_asset ADD (
`pdf_user_manual` json DEFAULT NULL COMMENT '用户手册pdf,{"s3文件key":"原文件名"}',
`pdf_device_image` json DEFAULT NULL COMMENT '设备图片图片,{"s3文件key":"原文件名"}',
`images_introduction` json DEFAULT NULL COMMENT '图片介绍,{"s3文件key":"原文件名"}'
);
ALTER TABLE basic_space ADD (
`pdf_user_manual` json DEFAULT NULL COMMENT '用户手册pdf,{"s3文件key":"原文件名"}',
`pdf_device_image` json DEFAULT NULL COMMENT '设备图片图片,{"s3文件key":"原文件名"}',
`images_introduction` json DEFAULT NULL COMMENT '图片介绍,{"s3文件key":"原文件名"}'
);

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save