commit
7ab6f9fdea
926 changed files with 146021 additions and 0 deletions
@ -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 |
|||
@ -0,0 +1,15 @@ |
|||
/target/ |
|||
/logs/ |
|||
/.idea/ |
|||
*.iml |
|||
*.bak |
|||
*.log |
|||
/.settings/ |
|||
*.project |
|||
*.classpath |
|||
*.factorypath |
|||
*.springBeans |
|||
/.apt_generated/ |
|||
/.externalToolBuilders/ |
|||
/bin/ |
|||
application-*.properties |
|||
@ -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> |
|||
@ -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"; |
|||
|
|||
|
|||
} |
|||
@ -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(); // 重新加载数据源配置
|
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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(); // 清理数据源键
|
|||
} |
|||
|
|||
|
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
|
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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不能为空 |
|||
@ -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 |
|||
@ -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は空です |
|||
@ -0,0 +1,15 @@ |
|||
/target/ |
|||
/logs/ |
|||
/.idea/ |
|||
*.iml |
|||
*.bak |
|||
*.log |
|||
/.settings/ |
|||
*.project |
|||
*.classpath |
|||
*.factorypath |
|||
*.springBeans |
|||
/.apt_generated/ |
|||
/.externalToolBuilders/ |
|||
/bin/ |
|||
application-*.properties |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
|
|||
|
|||
|
|||
@ -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"] |
|||
|
|||
|
|||
@ -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> |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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() { |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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("<", "<").replaceAll(">", ">"); |
|||
value = value.replaceAll("\"", """).replaceAll("'", "'"); |
|||
} |
|||
return value; |
|||
} |
|||
} |
|||
|
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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 { |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -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)); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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()); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
|
|||
@ -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); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -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"); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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)); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -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)); |
|||
} |
|||
|
|||
} |
|||
@ -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)); |
|||
} |
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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();
|
|||
// }
|
|||
//}
|
|||
//
|
|||
@ -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> |
|||
Binary file not shown.
Binary file not shown.
@ -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} |
|||
@ -0,0 +1,4 @@ |
|||
|
|||
# log4j.properties |
|||
log4j.logger.org.apache.ibatis.logging.Log=DEBUG |
|||
log4j.logger.org.apache.ibatis.logging.LogFactory=DEBUG |
|||
@ -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> |
|||
@ -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.历史 |
|||
@ -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 |
|||
@ -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; |
|||
@ -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; |
|||
|
|||
|
|||
@ -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; |
|||
@ -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`; |
|||
@ -0,0 +1,2 @@ |
|||
USE `data_center_new`; |
|||
ALTER TABLE gateway_clients ADD COLUMN company_id BIGINT; |
|||
@ -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`; |
|||
@ -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='数据量统计'; |
|||
@ -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; |
|||
@ -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`)); |
|||
@ -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 |
|||
); |
|||
@ -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-无效告警'; |
|||
@ -0,0 +1,2 @@ |
|||
|
|||
ALTER TABLE mqtt_config ADD `purpose_type` int DEFAULT '1' COMMENT '1-告警转发,2-全部转发'; |
|||
@ -0,0 +1,2 @@ |
|||
ALTER TABLE `gateway_clients` |
|||
ADD COLUMN `alert_switch` INT NULL DEFAULT 1 COMMENT '告警开关,1:开,0:关' AFTER `data_accumulated_totals`; |
|||
@ -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…
Reference in new issue