Showing
29 changed files
with
3885 additions
and
0 deletions
Too many changes to show.
To preserve performance only 29 of 38 files are displayed.
pom.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | |
3 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
4 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
5 | + <modelVersion>4.0.0</modelVersion> | |
6 | + | |
7 | + <groupId>com.qgutech</groupId> | |
8 | + <artifactId>app-power</artifactId> | |
9 | + <version>1.0-SNAPSHOT</version> | |
10 | + | |
11 | + <parent> | |
12 | + <groupId>org.springframework.boot</groupId> | |
13 | + <artifactId>spring-boot-starter-parent</artifactId> | |
14 | + <version>2.2.4.RELEASE</version> | |
15 | + </parent> | |
16 | + <dependencies> | |
17 | + <dependency> | |
18 | + <groupId>org.springframework.boot</groupId> | |
19 | + <artifactId>spring-boot-starter-web</artifactId> | |
20 | + </dependency> | |
21 | + <!--导入配置文件处理器--> | |
22 | + <dependency> | |
23 | + <groupId>org.springframework.boot</groupId> | |
24 | + <artifactId>spring-boot-configuration-processor</artifactId> | |
25 | + <optional>true</optional> | |
26 | + </dependency> | |
27 | + <dependency> | |
28 | + <groupId>org.webjars</groupId> | |
29 | + <artifactId>jquery</artifactId> | |
30 | + <version>3.3.1</version> | |
31 | + </dependency> | |
32 | + <dependency> | |
33 | + <groupId>org.springframework.boot</groupId> | |
34 | + <artifactId>spring-boot-starter-thymeleaf</artifactId> | |
35 | + </dependency> | |
36 | + <dependency> | |
37 | + <groupId>org.springframework.boot</groupId> | |
38 | + <artifactId>spring-boot-starter-jdbc</artifactId> | |
39 | + </dependency> | |
40 | + <dependency> | |
41 | + <groupId>mysql</groupId> | |
42 | + <artifactId>mysql-connector-java</artifactId> | |
43 | + </dependency> | |
44 | + <dependency> | |
45 | + <groupId>com.alibaba</groupId> | |
46 | + <artifactId>druid</artifactId> | |
47 | + <version>1.2.23</version> | |
48 | + </dependency> | |
49 | + <dependency> | |
50 | + <groupId>org.mybatis.spring.boot</groupId> | |
51 | + <artifactId>mybatis-spring-boot-starter</artifactId> | |
52 | + <version>1.3.1</version> | |
53 | + </dependency> | |
54 | + <dependency> | |
55 | + <groupId>org.projectlombok</groupId> | |
56 | + <artifactId>lombok</artifactId> | |
57 | + </dependency> | |
58 | + <dependency> | |
59 | + <groupId>org.springframework.boot</groupId> | |
60 | + <artifactId>spring-boot-starter-test</artifactId> | |
61 | + <scope>test</scope> | |
62 | + </dependency> | |
63 | + <dependency> | |
64 | + <groupId>org.apache.commons</groupId> | |
65 | + <artifactId>commons-lang3</artifactId> | |
66 | + <version>3.9</version> | |
67 | + </dependency> | |
68 | + <dependency> | |
69 | + <groupId>commons-httpclient</groupId> | |
70 | + <artifactId>commons-httpclient</artifactId> | |
71 | + <version>3.1</version> | |
72 | + </dependency> | |
73 | + <dependency> | |
74 | + <groupId>org.apache.httpcomponents</groupId> | |
75 | + <artifactId>httpclient</artifactId> | |
76 | + <version>4.5.8</version> | |
77 | + </dependency> | |
78 | + <dependency> | |
79 | + <groupId>org.apache.commons</groupId> | |
80 | + <artifactId>commons-collections4</artifactId> | |
81 | + <version>4.2</version> | |
82 | + </dependency> | |
83 | + <dependency> | |
84 | + <groupId>com.alibaba</groupId> | |
85 | + <artifactId>fastjson</artifactId> | |
86 | + <version>2.0.38</version> | |
87 | + </dependency> | |
88 | + <dependency> | |
89 | + <groupId>junit</groupId> | |
90 | + <artifactId>junit</artifactId> | |
91 | + <version>4.12</version> | |
92 | + </dependency> | |
93 | + </dependencies> | |
94 | + | |
95 | + <build> | |
96 | + <finalName>${project.artifactId}</finalName> | |
97 | + <plugins> | |
98 | + <plugin> | |
99 | + <groupId>org.springframework.boot</groupId> | |
100 | + <artifactId>spring-boot-maven-plugin</artifactId> | |
101 | + </plugin> | |
102 | + </plugins> | |
103 | + </build> | |
104 | +</project> | ... | ... |
1 | +package com.qgutech; | |
2 | + | |
3 | +import org.mybatis.spring.annotation.MapperScan; | |
4 | +import org.springframework.boot.SpringApplication; | |
5 | +import org.springframework.boot.autoconfigure.SpringBootApplication; | |
6 | + | |
7 | +/** | |
8 | + * @author xxx | |
9 | + * @date 2024/12/14 21:59 | |
10 | + * @description | |
11 | + */ | |
12 | +@MapperScan(value = "com.qgutech.mapper") | |
13 | +@SpringBootApplication | |
14 | +public class MainApplication { | |
15 | + public static void main(String[] args) { | |
16 | + SpringApplication.run(MainApplication.class, args); | |
17 | + } | |
18 | +} | ... | ... |
1 | +package com.qgutech.common; | |
2 | + | |
3 | +/** | |
4 | + * @author xxx | |
5 | + * @date 2024/12/19 9:58 | |
6 | + * @description | |
7 | + */ | |
8 | +public class JsonResult<T> { | |
9 | + private boolean success = true; | |
10 | + private T data; | |
11 | + private String msg; | |
12 | + private String errCode; | |
13 | + | |
14 | + public JsonResult() { | |
15 | + } | |
16 | + | |
17 | + public JsonResult(boolean success, String msg) { | |
18 | + this.success = success; | |
19 | + this.msg = msg; | |
20 | + } | |
21 | + | |
22 | + public JsonResult(boolean success, String msg, T data) { | |
23 | + this.success = success; | |
24 | + this.msg = msg; | |
25 | + this.data = data; | |
26 | + } | |
27 | + | |
28 | + public JsonResult(boolean success, String errCode, String msg, T data) { | |
29 | + this.success = success; | |
30 | + this.errCode = errCode; | |
31 | + this.msg = msg; | |
32 | + this.data = data; | |
33 | + } | |
34 | + | |
35 | + public static JsonResult ok() { | |
36 | + return new JsonResult(); | |
37 | + } | |
38 | + | |
39 | + public static JsonResult ok(String msg) { | |
40 | + return new JsonResult(true, msg); | |
41 | + } | |
42 | + | |
43 | + public static <T> JsonResult ok(String msg, T data) { | |
44 | + return new JsonResult(true, msg, data); | |
45 | + } | |
46 | + | |
47 | + public static JsonResult error() { | |
48 | + return new JsonResult(false, (String)null); | |
49 | + } | |
50 | + | |
51 | + public static JsonResult error(String msg) { | |
52 | + return new JsonResult(false, msg); | |
53 | + } | |
54 | + | |
55 | + public static <T> JsonResult error(String errCode, String msg) { | |
56 | + return new JsonResult(false, errCode, msg); | |
57 | + } | |
58 | + | |
59 | + public boolean isSuccess() { | |
60 | + return this.success; | |
61 | + } | |
62 | + | |
63 | + public T getData() { | |
64 | + return this.data; | |
65 | + } | |
66 | + | |
67 | + public String getMsg() { | |
68 | + return this.msg; | |
69 | + } | |
70 | + | |
71 | + public String getErrCode() { | |
72 | + return this.errCode; | |
73 | + } | |
74 | + | |
75 | + public void setSuccess(final boolean success) { | |
76 | + this.success = success; | |
77 | + } | |
78 | + | |
79 | + public void setData(final T data) { | |
80 | + this.data = data; | |
81 | + } | |
82 | + | |
83 | + public void setMsg(final String msg) { | |
84 | + this.msg = msg; | |
85 | + } | |
86 | + | |
87 | + public void setErrCode(final String errCode) { | |
88 | + this.errCode = errCode; | |
89 | + } | |
90 | + | |
91 | + public boolean equals(final Object o) { | |
92 | + if (o == this) { | |
93 | + return true; | |
94 | + } else if (!(o instanceof JsonResult)) { | |
95 | + return false; | |
96 | + } else { | |
97 | + JsonResult<?> other = (JsonResult)o; | |
98 | + if (!other.canEqual(this)) { | |
99 | + return false; | |
100 | + } else if (this.isSuccess() != other.isSuccess()) { | |
101 | + return false; | |
102 | + } else { | |
103 | + label49: { | |
104 | + Object this$data = this.getData(); | |
105 | + Object other$data = other.getData(); | |
106 | + if (this$data == null) { | |
107 | + if (other$data == null) { | |
108 | + break label49; | |
109 | + } | |
110 | + } else if (this$data.equals(other$data)) { | |
111 | + break label49; | |
112 | + } | |
113 | + | |
114 | + return false; | |
115 | + } | |
116 | + | |
117 | + Object this$msg = this.getMsg(); | |
118 | + Object other$msg = other.getMsg(); | |
119 | + if (this$msg == null) { | |
120 | + if (other$msg != null) { | |
121 | + return false; | |
122 | + } | |
123 | + } else if (!this$msg.equals(other$msg)) { | |
124 | + return false; | |
125 | + } | |
126 | + | |
127 | + Object this$errCode = this.getErrCode(); | |
128 | + Object other$errCode = other.getErrCode(); | |
129 | + if (this$errCode == null) { | |
130 | + if (other$errCode != null) { | |
131 | + return false; | |
132 | + } | |
133 | + } else if (!this$errCode.equals(other$errCode)) { | |
134 | + return false; | |
135 | + } | |
136 | + | |
137 | + return true; | |
138 | + } | |
139 | + } | |
140 | + } | |
141 | + | |
142 | + protected boolean canEqual(final Object other) { | |
143 | + return other instanceof JsonResult; | |
144 | + } | |
145 | + | |
146 | + public int hashCode() { | |
147 | + int result = 1; | |
148 | + result = result * 59 + (this.isSuccess() ? 79 : 97); | |
149 | + Object $data = this.getData(); | |
150 | + result = result * 59 + ($data == null ? 43 : $data.hashCode()); | |
151 | + Object $msg = this.getMsg(); | |
152 | + result = result * 59 + ($msg == null ? 43 : $msg.hashCode()); | |
153 | + Object $errCode = this.getErrCode(); | |
154 | + result = result * 59 + ($errCode == null ? 43 : $errCode.hashCode()); | |
155 | + return result; | |
156 | + } | |
157 | + | |
158 | + public String toString() { | |
159 | + return "JsonResult(success=" + this.isSuccess() + ", data=" + this.getData() + ", msg=" + this.getMsg() + ", errCode=" + this.getErrCode() + ")"; | |
160 | + } | |
161 | +} | ... | ... |
1 | +package com.qgutech.config; | |
2 | + | |
3 | +import com.alibaba.druid.pool.DruidDataSource; | |
4 | +import com.alibaba.druid.support.http.StatViewServlet; | |
5 | +import com.alibaba.druid.support.http.WebStatFilter; | |
6 | +import org.springframework.boot.context.properties.ConfigurationProperties; | |
7 | +import org.springframework.boot.web.servlet.FilterRegistrationBean; | |
8 | +import org.springframework.boot.web.servlet.ServletRegistrationBean; | |
9 | +import org.springframework.context.annotation.Bean; | |
10 | +import org.springframework.context.annotation.Configuration; | |
11 | + | |
12 | +import javax.servlet.Filter; | |
13 | +import javax.sql.DataSource; | |
14 | +import java.util.Arrays; | |
15 | +import java.util.HashMap; | |
16 | +import java.util.Map; | |
17 | + | |
18 | +/** | |
19 | + * @author xxx | |
20 | + * @date 2024/12/17 11:16 | |
21 | + * @description | |
22 | + */ | |
23 | +@Configuration | |
24 | +public class DruidConfig { | |
25 | + @ConfigurationProperties(prefix = "spring.datasource") | |
26 | + @Bean | |
27 | + public DataSource druid() { | |
28 | + return new DruidDataSource(); | |
29 | + } | |
30 | + | |
31 | + // 配置Druid监控 | |
32 | + // 1.配置管理后台的servlet | |
33 | + @Bean | |
34 | + public ServletRegistrationBean statViewServlet() { | |
35 | + ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); | |
36 | + Map<String, String> initParams = new HashMap<>(); | |
37 | + initParams.put("loginUsername", "admin"); | |
38 | + initParams.put("loginPassword", "admin123"); | |
39 | + bean.setInitParameters(initParams); | |
40 | + return bean; | |
41 | + } | |
42 | + | |
43 | + // 配置一个监控的filter | |
44 | + @Bean | |
45 | + public FilterRegistrationBean webStatFilter() { | |
46 | + FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); | |
47 | + bean.setFilter(new WebStatFilter()); | |
48 | + Map<String, String> initParams = new HashMap<>(); | |
49 | + initParams.put("exclusions", "*.js,*.css,*.jpg,/druid/*"); | |
50 | + bean.setInitParameters(initParams); | |
51 | + bean.setUrlPatterns(Arrays.asList("/*")); | |
52 | + return bean; | |
53 | + } | |
54 | +} | ... | ... |
1 | +package com.qgutech.config; | |
2 | + | |
3 | +import com.qgutech.filter.LoginFilter; | |
4 | +import org.springframework.context.annotation.Bean; | |
5 | +import org.springframework.context.annotation.Configuration; | |
6 | +import org.springframework.web.servlet.config.annotation.*; | |
7 | + | |
8 | +/** | |
9 | + * @author xxx | |
10 | + * @date 2024/12/17 16:33 | |
11 | + * @description | |
12 | + */ | |
13 | +@Configuration | |
14 | +public class MvcConfig implements WebMvcConfigurer { | |
15 | + | |
16 | + @Override | |
17 | + public void addViewControllers(ViewControllerRegistry registry) { | |
18 | +// super.addViewControllers(registry); | |
19 | + registry.addViewController("/user/addUser").setViewName("addUser"); | |
20 | + } | |
21 | + @Bean | |
22 | + public WebMvcConfigurer webMvcConfigurer(){ | |
23 | + WebMvcConfigurer adapter = new WebMvcConfigurer() { | |
24 | + @Override | |
25 | + public void addViewControllers(ViewControllerRegistry registry) { | |
26 | + registry.addViewController("/").setViewName("login"); | |
27 | + registry.addViewController("/login").setViewName("login"); | |
28 | + } | |
29 | + // 注册拦截器 | |
30 | + @Override | |
31 | + public void addInterceptors(InterceptorRegistry registry) { | |
32 | + InterceptorRegistration interceptorRegistration = registry.addInterceptor(new LoginFilter()); | |
33 | + interceptorRegistration.addPathPatterns("/**"); | |
34 | + interceptorRegistration.excludePathPatterns("/","/login","/user/userLogin","/img/**","/css/**","/js/**"); | |
35 | + interceptorRegistration.excludePathPatterns("/user/login","/user/userLogout","/user/img/**","/user/css/**","/user/js/**"); | |
36 | + } | |
37 | + }; | |
38 | + return adapter; | |
39 | + } | |
40 | + | |
41 | + @Override | |
42 | + public void addResourceHandlers(ResourceHandlerRegistry registry) { | |
43 | + /**资源路径映射**/ | |
44 | + registry.addResourceHandler("/img/**").addResourceLocations("classpath:/static/img/"); | |
45 | + registry.addResourceHandler("/user/img/**").addResourceLocations("classpath:/static/img/"); | |
46 | + registry.addResourceHandler("/user/css/**").addResourceLocations("classpath:/static/css/"); | |
47 | + registry.addResourceHandler("/user/js/**").addResourceLocations("classpath:/static/js/"); | |
48 | + } | |
49 | +} | ... | ... |
1 | +package com.qgutech.config; | |
2 | + | |
3 | +import org.apache.ibatis.session.Configuration; | |
4 | +import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer; | |
5 | +import org.springframework.context.annotation.Bean; | |
6 | + | |
7 | +/** | |
8 | + * @author xxx | |
9 | + * @date 2024/12/17 14:09 | |
10 | + * @description | |
11 | + */ | |
12 | +@org.springframework.context.annotation.Configuration | |
13 | +public class MybatisConfig { | |
14 | + @Bean | |
15 | + public ConfigurationCustomizer configurationCustomizer(){ | |
16 | + return new ConfigurationCustomizer() { | |
17 | + @Override | |
18 | + public void customize(Configuration configuration) { | |
19 | + configuration.setMapUnderscoreToCamelCase(true); | |
20 | + } | |
21 | + }; | |
22 | + } | |
23 | +} | ... | ... |
1 | +package com.qgutech.controller; | |
2 | + | |
3 | +import com.qgutech.common.JsonResult; | |
4 | +import com.qgutech.model.PowerModel; | |
5 | +import com.qgutech.service.PowerService; | |
6 | +import lombok.extern.slf4j.Slf4j; | |
7 | +import org.springframework.web.bind.annotation.PostMapping; | |
8 | +import org.springframework.web.bind.annotation.RequestBody; | |
9 | +import org.springframework.web.bind.annotation.RequestMapping; | |
10 | +import org.springframework.web.bind.annotation.RestController; | |
11 | + | |
12 | +import javax.annotation.Resource; | |
13 | + | |
14 | +/** | |
15 | + * @author xxx | |
16 | + * @date 2024/12/15 12:08 | |
17 | + * @description | |
18 | + */ | |
19 | + | |
20 | +/** | |
21 | + * 徽辰智电公司相关接口 | |
22 | + */ | |
23 | +@Slf4j | |
24 | +@RestController | |
25 | +@RequestMapping(value = "/hczd") | |
26 | +public class PowerController { | |
27 | + | |
28 | + @Resource | |
29 | + private PowerService powerService; | |
30 | + | |
31 | + /** | |
32 | + * 设备统计 | |
33 | + */ | |
34 | + @PostMapping("/index") | |
35 | + public JsonResult<?> index(@RequestBody PowerModel powerModel) { | |
36 | + JsonResult<Object> result = new JsonResult<>(true, "操作成功"); | |
37 | + result.setData(powerService.getIndex(powerModel)); | |
38 | + return result; | |
39 | + } | |
40 | + | |
41 | + /** | |
42 | + * BMS日期滚动数据 | |
43 | + */ | |
44 | + @PostMapping("/getDate") | |
45 | + public JsonResult<?> getDate(@RequestBody PowerModel powerModel) { | |
46 | + JsonResult<Object> result = new JsonResult<>(true, "操作成功"); | |
47 | + String type = powerModel.getType(); | |
48 | + result.setData(powerService.getDateMap(type)); | |
49 | + return result; | |
50 | + } | |
51 | + | |
52 | +} | ... | ... |
1 | +package com.qgutech.controller; | |
2 | + | |
3 | +import com.qgutech.common.JsonResult; | |
4 | +import com.qgutech.model.Page; | |
5 | +import com.qgutech.model.User; | |
6 | +import com.qgutech.service.UserService; | |
7 | +import com.qgutech.util.CookieUtil; | |
8 | +import com.qgutech.util.LoginCookieUtil; | |
9 | +import com.qgutech.util.PowerUtil; | |
10 | +import lombok.extern.slf4j.Slf4j; | |
11 | +import org.apache.commons.collections4.CollectionUtils; | |
12 | +import org.apache.commons.lang3.StringUtils; | |
13 | +import org.springframework.beans.factory.annotation.Value; | |
14 | +import org.springframework.stereotype.Controller; | |
15 | +import org.springframework.ui.Model; | |
16 | +import org.springframework.util.DigestUtils; | |
17 | +import org.springframework.web.bind.annotation.*; | |
18 | +import org.springframework.web.multipart.MultipartFile; | |
19 | + | |
20 | +import javax.annotation.Resource; | |
21 | +import javax.servlet.ServletOutputStream; | |
22 | +import javax.servlet.http.Cookie; | |
23 | +import javax.servlet.http.HttpServletRequest; | |
24 | +import javax.servlet.http.HttpServletResponse; | |
25 | +import javax.servlet.http.HttpSession; | |
26 | +import java.io.File; | |
27 | +import java.io.IOException; | |
28 | +import java.nio.charset.StandardCharsets; | |
29 | +import java.util.HashMap; | |
30 | +import java.util.List; | |
31 | +import java.util.Map; | |
32 | +import java.util.UUID; | |
33 | + | |
34 | +/** | |
35 | + * @author xxx | |
36 | + * @date 2024/12/17 12:10 | |
37 | + * @description | |
38 | + */ | |
39 | +@Slf4j | |
40 | +@Controller | |
41 | +@RequestMapping(value = "/user") | |
42 | +public class UserController { | |
43 | + | |
44 | + private final String POWER_SESSION_ID = "power_session_id"; | |
45 | + @Resource | |
46 | + private UserService userService; | |
47 | + @Value("${power.user.dir}") | |
48 | + private String USER_DIR; | |
49 | + | |
50 | + @RequestMapping("/page") | |
51 | + public String page(String searchName, Map<String, Object> map, @RequestParam(required = false, defaultValue = "1") Integer pageNo) { | |
52 | + Page<User> page = new Page<>(); | |
53 | + if (null != pageNo) { | |
54 | + page.setPageNo(pageNo); | |
55 | + } | |
56 | + List<User> users = userService.getUserList(searchName, page); | |
57 | + if (CollectionUtils.isNotEmpty(users)) { | |
58 | + for (User user : users) { | |
59 | + String photo = user.getPhoto(); | |
60 | + if (StringUtils.isBlank(photo)) { | |
61 | + user.setPhoto("default.jpg"); | |
62 | + } | |
63 | + } | |
64 | + } | |
65 | + map.put("list", users); | |
66 | + map.put("current", pageNo); | |
67 | + map.put("total", page.getTotal()); | |
68 | + map.put("pages", page.getPages()); | |
69 | + map.put("searchName", searchName); | |
70 | + return "indexUser"; | |
71 | + } | |
72 | + | |
73 | + /** | |
74 | + * 用户登录 | |
75 | + */ | |
76 | + @PostMapping(value = "/login") | |
77 | + public String login(String loginName, String password, HttpSession session, HttpServletRequest request, HttpServletResponse response) { | |
78 | +// String loginName = paramUser.getLoginName(); | |
79 | +// String password = paramUser.getPassword(); | |
80 | + log.debug("接收到的用户名:{},密码:{}", loginName, password); | |
81 | + if (StringUtils.isBlank(loginName) || StringUtils.isBlank(password)) { | |
82 | + request.setAttribute("msg", "用户名或密码不能为空!"); | |
83 | + return "login";//登录失败回到登录页面 | |
84 | + } | |
85 | + try { | |
86 | + //执行登录业务逻辑 | |
87 | + User user = userService.login(loginName, password); | |
88 | + //登录成功,保存用户登录记录 | |
89 | + session.setAttribute("user", user); | |
90 | + String powerSessionId = UUID.randomUUID().toString().replaceAll("-", ""); | |
91 | + setCookie(powerSessionId, request, response); | |
92 | + } catch (RuntimeException e) { | |
93 | + e.printStackTrace(); | |
94 | + request.setAttribute("msg", e.getMessage()); | |
95 | + return "login";//登录失败回到登录页面 | |
96 | + } catch (Exception e) { | |
97 | + e.printStackTrace(); | |
98 | + } | |
99 | + return "redirect:/user/page";//登录成功,跳转到查询员工信息控制器 | |
100 | +// return "indexUser";//登录成功,跳转到查询员工信息控制器 | |
101 | + } | |
102 | + | |
103 | + /** | |
104 | + * 用户登录H5 | |
105 | + */ | |
106 | + @PostMapping(value = "/userLogin") | |
107 | + @ResponseBody | |
108 | + public JsonResult<?> userLogin(@RequestBody User param, HttpServletRequest request, HttpServletResponse response) { | |
109 | + String msg = "成功"; | |
110 | + String powerSessionId = UUID.randomUUID().toString().replaceAll("-", ""); | |
111 | + Map<String, Object> resultMap = new HashMap<>(); | |
112 | + resultMap.put(POWER_SESSION_ID, powerSessionId); | |
113 | + try { | |
114 | + //执行登录业务逻辑 | |
115 | + String loginName = param.getLoginName(); | |
116 | + String password = param.getPassword(); | |
117 | + if (StringUtils.isBlank(loginName) || StringUtils.isBlank(password)) { | |
118 | + msg = "用户名或密码不能为空!"; | |
119 | + return new JsonResult<>(false, msg, ""); | |
120 | + } | |
121 | + User user = userService.login(loginName, password); | |
122 | + if (user != null) { | |
123 | + String photo = user.getPhoto(); | |
124 | + if (StringUtils.isBlank(photo)) { | |
125 | + user.setPhoto("default.jpg"); | |
126 | + } | |
127 | + } | |
128 | + resultMap.put("user", user); | |
129 | + //登录成功,保存用户登录记录 | |
130 | + setCookie(powerSessionId, request, response); | |
131 | + } catch (RuntimeException e) { | |
132 | + e.printStackTrace(); | |
133 | + msg = e.getMessage(); | |
134 | + return new JsonResult<>(false, msg, ""); | |
135 | + } | |
136 | + return new JsonResult<>(true, msg, resultMap); | |
137 | + } | |
138 | + | |
139 | + private void setCookie(String powerSessionId, HttpServletRequest request, HttpServletResponse response) { | |
140 | + String cookieDomain = CookieUtil.getCookieDomain(request); | |
141 | + String scheme = request.getScheme(); | |
142 | + boolean secure = false; | |
143 | + boolean httpOnly = false; | |
144 | + if ("https".equals(scheme)) { | |
145 | + secure = true; | |
146 | + httpOnly = false; | |
147 | + } | |
148 | + LoginCookieUtil.addCookie(response, POWER_SESSION_ID, powerSessionId, | |
149 | + "/", null, cookieDomain, secure, httpOnly); | |
150 | + } | |
151 | + | |
152 | + /** | |
153 | + * 用户注册 | |
154 | + */ | |
155 | + @RequestMapping(value = "/register") | |
156 | + public String register(User user, String code, HttpSession session) { | |
157 | + log.debug("接收到的验证码:{}", code); | |
158 | + try { | |
159 | + //1.比较用户输入的验证码和session中的验证码是否一致 | |
160 | + String sessionCode = session.getAttribute("code").toString(); | |
161 | + //忽略大小写比较 | |
162 | + if (!sessionCode.equalsIgnoreCase(code)) { | |
163 | + throw new RuntimeException("验证码输入错误"); | |
164 | + } | |
165 | + //注册用户 | |
166 | + userService.register(user); | |
167 | + } catch (RuntimeException e) { | |
168 | + e.printStackTrace(); | |
169 | + | |
170 | + return "redirect:/register";//注册失败回到注册页面 | |
171 | + } | |
172 | + return "redirect:/login";//注册成功回到登录页面 | |
173 | + } | |
174 | + | |
175 | + /** | |
176 | + * 添加员工信息 | |
177 | + * 文件上传:表单方式提交必须是post,表单enctype属性必须为 multipart/form-data | |
178 | + * | |
179 | + * @return | |
180 | + */ | |
181 | + @PostMapping("/saveUser") | |
182 | + public String saveUser(User user, Model model, MultipartFile img) { | |
183 | + log.info("=========user==[{}]", user); | |
184 | + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); | |
185 | + user.setUserId(uuid); | |
186 | + String mobile = user.getMobile(); | |
187 | + if (StringUtils.isEmpty(mobile)) { | |
188 | + model.addAttribute("saveMsg", "手机号不能为空"); | |
189 | + return "addUser"; | |
190 | + } | |
191 | + User oldUser = userService.getUserByMobile(mobile); | |
192 | + if (oldUser != null) { | |
193 | + model.addAttribute("saveMsg", "手机号已被使用!"); | |
194 | + return "addUser"; | |
195 | + } | |
196 | + //处理头像的上传 | |
197 | + String fileName = img.getOriginalFilename();//获取文件名以及后缀 | |
198 | + fileName = UUID.randomUUID() + "_" + fileName;//重新生成文件夹名 | |
199 | + //指定上传文件的路径存储,这里是静态资源static的upload | |
200 | + String dirPath = USER_DIR + "/photo"; | |
201 | + File filePath = new File(dirPath); | |
202 | + if (!filePath.exists()) { | |
203 | + filePath.mkdirs(); | |
204 | + } | |
205 | + try { | |
206 | + //2.上传文件 参数:将文件写入到那个目录 | |
207 | + img.transferTo(new File(dirPath, fileName)); | |
208 | + } catch (IOException e) { | |
209 | + e.printStackTrace(); | |
210 | + } | |
211 | + | |
212 | + //保存员工信息 | |
213 | + user.setPhoto(fileName);//保存头像文件名 | |
214 | + user.setLoginName(mobile); | |
215 | + userService.saveUser(user); | |
216 | + return "redirect:/user/page"; | |
217 | + } | |
218 | + | |
219 | + @RequestMapping("/getUser/{userId}") | |
220 | + @ResponseBody | |
221 | + public User getUser(@PathVariable("userId") String id) { | |
222 | + return userService.getUserById(id); | |
223 | + } | |
224 | + | |
225 | + | |
226 | + @RequestMapping("/deleteUser/{userId}") | |
227 | + public String deleteUser(@PathVariable("userId") String userId) { | |
228 | + userService.deleteUserById(userId); | |
229 | + return "redirect:/user/page"; | |
230 | + } | |
231 | + | |
232 | + /** | |
233 | + * 用户退出 | |
234 | + * | |
235 | + * @param request | |
236 | + * @return | |
237 | + */ | |
238 | + @RequestMapping("/logout") | |
239 | + public String logout(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception { | |
240 | + session.invalidate(); | |
241 | + Cookie sessionIdCookie = CookieUtil.getCookie(request, POWER_SESSION_ID); | |
242 | + if (sessionIdCookie != null) { | |
243 | + String powerSessionId = sessionIdCookie.getValue(); | |
244 | + if (powerSessionId != null) { | |
245 | + CookieUtil.setCookie(response, POWER_SESSION_ID, null, | |
246 | + "/", "0", CookieUtil.getCookieDomain(request)); | |
247 | + request.removeAttribute(powerSessionId); | |
248 | + } | |
249 | + } | |
250 | + return "redirect:/login"; | |
251 | + } | |
252 | + | |
253 | + /** | |
254 | + * 用户退出H5 | |
255 | + * | |
256 | + * @param request | |
257 | + * @return | |
258 | + */ | |
259 | + @RequestMapping("/userLogout") | |
260 | + @ResponseBody | |
261 | + public JsonResult<?> userLogout(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception { | |
262 | + session.invalidate(); | |
263 | + Cookie sessionIdCookie = CookieUtil.getCookie(request, POWER_SESSION_ID); | |
264 | + if (sessionIdCookie != null) { | |
265 | + String powerSessionId = sessionIdCookie.getValue(); | |
266 | + if (powerSessionId != null) { | |
267 | + CookieUtil.setCookie(response, POWER_SESSION_ID, null, | |
268 | + "/", "0", CookieUtil.getCookieDomain(request)); | |
269 | + request.removeAttribute(powerSessionId); | |
270 | + } | |
271 | + } | |
272 | + return new JsonResult<>(true, "退出成功!", ""); | |
273 | + } | |
274 | + | |
275 | + /** | |
276 | + * 生成验证码 | |
277 | + */ | |
278 | + @RequestMapping("/generateImageCode") | |
279 | + public void generateImageCode(HttpSession session, HttpServletResponse response) throws IOException { | |
280 | + | |
281 | + //1.生成4位随机字符串 | |
282 | + String code = PowerUtil.generateVerifyCode(4); | |
283 | + //2.保存随机字符串到session中 | |
284 | + session.setAttribute("code", code); | |
285 | + //3.将随机字符串生成图片 | |
286 | + //4.response响应图片 | |
287 | + response.setContentType("image/png");//指定响应类型 | |
288 | + ServletOutputStream outputStream = response.getOutputStream(); | |
289 | + //参数 宽,高,输出流,生成验证码 | |
290 | + PowerUtil.outputImage(100, 60, outputStream, code); | |
291 | + } | |
292 | + | |
293 | + @RequestMapping("/toUpdateUser/{userId}") | |
294 | + public String toUpdateUser(@PathVariable("userId") String userId, Model model) { | |
295 | + User user = userService.getUserById(userId); | |
296 | + model.addAttribute("user", user); | |
297 | + return "updateUser"; | |
298 | + } | |
299 | + | |
300 | + /** | |
301 | + * 更新员工信息 | |
302 | + * | |
303 | + * @param user | |
304 | + * @return | |
305 | + */ | |
306 | + @RequestMapping("/updateUser") | |
307 | + public String updateUser(User user, Model model) { | |
308 | + String userName = user.getUserName(); | |
309 | + if (StringUtils.isBlank(userName)) { | |
310 | + model.addAttribute("updateMsg", "姓名不能为空"); | |
311 | + return "updateUser"; | |
312 | + } | |
313 | + String mobile = user.getMobile(); | |
314 | + if (StringUtils.isEmpty(mobile)) { | |
315 | + model.addAttribute("updateMsg", "手机号不能为空"); | |
316 | + return "updateUser"; | |
317 | + } | |
318 | + User oldUser = userService.getUserById(user.getUserId()); | |
319 | + String loginName = oldUser.getLoginName(); | |
320 | + Boolean isExistMobile = userService.isExistMobile(mobile, loginName); | |
321 | + if (isExistMobile) { | |
322 | + model.addAttribute("updateMsg", "手机号已被使用!"); | |
323 | + return "updateUser"; | |
324 | + } | |
325 | + if ("admin".equals(loginName)) { | |
326 | + user.setLoginName("admin"); | |
327 | + } else { | |
328 | + user.setLoginName(mobile); | |
329 | + } | |
330 | + | |
331 | + userService.updateUser(user); | |
332 | + //跳转员工列表 | |
333 | + return "redirect:/user/page";//更新成功跳转到查询所有员工列表 | |
334 | + } | |
335 | + | |
336 | + @RequestMapping("/toUpdatePasswd/{userId}") | |
337 | + public String toUpdatePassword(@PathVariable("userId") String userId, Model model) { | |
338 | + User user = userService.getUserById(userId); | |
339 | + model.addAttribute("user", user); | |
340 | + return "updatePasswd"; | |
341 | + } | |
342 | + | |
343 | + /** | |
344 | + * 更新员工信息 | |
345 | + * | |
346 | + * @param user | |
347 | + * @return | |
348 | + */ | |
349 | + @RequestMapping("/updatePassword") | |
350 | + public String updatePassword(User user, Model model) { | |
351 | + String oldPassword = user.getOldPassword(); | |
352 | + if (StringUtils.isBlank(oldPassword)) { | |
353 | + model.addAttribute("pdMsg", "原密码不能为空"); | |
354 | + return "updatePasswd"; | |
355 | + } | |
356 | + String password = user.getPassword(); | |
357 | + if (StringUtils.isBlank(password)) { | |
358 | + model.addAttribute("pdMsg", "新密码不能为空"); | |
359 | + return "updatePasswd"; | |
360 | + } | |
361 | + User oldUser = userService.getUserById(user.getUserId()); | |
362 | + String dbPassword = oldUser.getPassword(); | |
363 | + String paramPassword = DigestUtils.md5DigestAsHex(oldPassword.getBytes(StandardCharsets.UTF_8)); | |
364 | + if (!paramPassword.equals(dbPassword)) { | |
365 | + model.addAttribute("pdMsg", "原密码不正确"); | |
366 | + return "updatePasswd"; | |
367 | + } | |
368 | + String newPassword = DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8)); | |
369 | + userService.updatePassword(user.getUserId(), newPassword); | |
370 | + //跳转员工列表 | |
371 | + return "redirect:/user/page";//更新成功跳转到查询所有员工列表 | |
372 | + } | |
373 | + | |
374 | + @RequestMapping("/resertPasswd/{userId}") | |
375 | + public String resertPasswd(@PathVariable("userId") String userId, Model model) { | |
376 | + String newPassword = DigestUtils.md5DigestAsHex("hczd".getBytes(StandardCharsets.UTF_8)); | |
377 | + userService.updatePassword(userId, newPassword); | |
378 | + //跳转员工列表 | |
379 | + return "redirect:/user/page";//更新成功跳转到查询所有员工列表 | |
380 | + } | |
381 | + | |
382 | +} | ... | ... |
1 | +package com.qgutech.filter; | |
2 | + | |
3 | +import com.qgutech.util.CookieUtil; | |
4 | +import org.apache.commons.lang3.StringUtils; | |
5 | +import org.springframework.lang.Nullable; | |
6 | +import org.springframework.web.servlet.HandlerInterceptor; | |
7 | +import org.springframework.web.servlet.ModelAndView; | |
8 | + | |
9 | +import javax.servlet.http.HttpServletRequest; | |
10 | +import javax.servlet.http.HttpServletResponse; | |
11 | + | |
12 | +/** | |
13 | + * @author xxx | |
14 | + * @date 2024/12/18 14:12 | |
15 | + * @description 登录检查 | |
16 | + */ | |
17 | +public class LoginFilter implements HandlerInterceptor { | |
18 | + | |
19 | + @Override | |
20 | + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |
21 | +// Object user = request.getSession().getAttribute("user"); | |
22 | + String powerSessionId = null; | |
23 | + String type = request.getParameter("type"); | |
24 | + if ("mobile".equals(type)) { | |
25 | + powerSessionId = CookieUtil.getCookieValue(request, "power_session_id"); | |
26 | + if (StringUtils.isBlank(powerSessionId)) { | |
27 | + powerSessionId = request.getParameter("power_session_id"); | |
28 | + } | |
29 | + if (StringUtils.isBlank(powerSessionId)) { | |
30 | + //未登录 | |
31 | + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); | |
32 | + response.setContentType("text/plain;charset=UTF-8"); | |
33 | + // 写入响应内容 | |
34 | + response.getWriter().write("{\"success\":false,\"data\":\"loginOut\",\"msg\":\"登录过期,请重新登录!\",\"errCode\":\"loginOut\"}"); | |
35 | + return false; | |
36 | + } else { | |
37 | + return true; | |
38 | + } | |
39 | + } else { | |
40 | + powerSessionId = CookieUtil.getCookieValue(request, "power_session_id"); | |
41 | + if (StringUtils.isBlank(powerSessionId)) { | |
42 | + powerSessionId = request.getParameter("power_session_id"); | |
43 | + } | |
44 | + if (StringUtils.isBlank(powerSessionId)) { | |
45 | + //未登录 | |
46 | +// request.getRequestDispatcher("/login").forward(request, response); | |
47 | + response.sendRedirect("/power/login"); | |
48 | + return false; | |
49 | + } else { | |
50 | + request.setAttribute("power_session_id", powerSessionId); | |
51 | + return true; | |
52 | + } | |
53 | + } | |
54 | + } | |
55 | + | |
56 | + @Override | |
57 | + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { | |
58 | + } | |
59 | + | |
60 | + @Override | |
61 | + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { | |
62 | + } | |
63 | +} | ... | ... |
1 | +package com.qgutech.mapper; | |
2 | + | |
3 | +import com.qgutech.model.Page; | |
4 | +import com.qgutech.model.User; | |
5 | +import org.apache.ibatis.annotations.Param; | |
6 | +import org.apache.ibatis.annotations.Select; | |
7 | + | |
8 | +import java.util.List; | |
9 | + | |
10 | +/** | |
11 | + * @author xxx | |
12 | + * @date 2024/12/17 9:23 | |
13 | + * @description | |
14 | + */ | |
15 | +public interface UserMapper { | |
16 | + //根据用户名查询用户 | |
17 | + User findByLoginName(@Param("loginName")String loginName); | |
18 | + | |
19 | + User getUserById(@Param("userId") String userId); | |
20 | + | |
21 | + List<User> getUserList(@Param("searchName") String searchName, @Param("page")Page<User> page); | |
22 | + | |
23 | + Integer getTotal(@Param("searchName") String searchName); | |
24 | + | |
25 | + //注册用户 | |
26 | + void save(@Param("user") User user); | |
27 | + | |
28 | + // 更新用户 | |
29 | + void updateUser (@Param("user") User user); | |
30 | + | |
31 | + void deleteUser (@Param("userId") String userId); | |
32 | + | |
33 | + User getUserByMobile(@Param("mobile") String mobile); | |
34 | + | |
35 | + User getUserExcludeLoginName(@Param("mobile")String mobile, @Param("loginName")String loginName); | |
36 | + | |
37 | + void updatePassword(@Param("userId") String userId, @Param("password") String password); | |
38 | +} | ... | ... |
src/main/java/com/qgutech/model/Page.java
0 → 100644
1 | +package com.qgutech.model; | |
2 | + | |
3 | +import org.springframework.context.ApplicationContext; | |
4 | +import org.springframework.web.context.ContextLoader; | |
5 | + | |
6 | +import java.lang.reflect.Method; | |
7 | +import java.util.ArrayList; | |
8 | +import java.util.List; | |
9 | + | |
10 | +/** | |
11 | + * @author xxx | |
12 | + * @date 2024/12/26 15:21 | |
13 | + * @description | |
14 | + */ | |
15 | + | |
16 | + | |
17 | +public class Page<T> { | |
18 | + public static final String ASC = "asc"; | |
19 | + public static final String DESC = "desc"; | |
20 | + protected String id; | |
21 | + protected int pageNo = 1; | |
22 | + protected int pageSize = 10; | |
23 | + protected int pages = 1; | |
24 | + protected boolean autoCount = true; | |
25 | + protected boolean autoPaging = true; | |
26 | + private String sortName; | |
27 | + private String sortOrder; | |
28 | + protected List<T> rows = new ArrayList(); | |
29 | + protected long total = 0L; | |
30 | + | |
31 | + public int getPages() { | |
32 | + return pages; | |
33 | + } | |
34 | + | |
35 | + public void setPages(int pages) { | |
36 | + this.pages = pages; | |
37 | + } | |
38 | + | |
39 | + public String getId() { | |
40 | + return this.id; | |
41 | + } | |
42 | + | |
43 | + public void setId(String id) { | |
44 | + this.id = id; | |
45 | + } | |
46 | + | |
47 | + public Page() { | |
48 | + } | |
49 | + | |
50 | + public Page(int pageSize) { | |
51 | + this.pageSize = pageSize; | |
52 | + } | |
53 | + | |
54 | + public int getPageNo() { | |
55 | + return this.pageNo; | |
56 | + } | |
57 | + | |
58 | + public void setPageNo(final int pageNo) { | |
59 | + this.pageNo = pageNo; | |
60 | + if (pageNo < 1) { | |
61 | + this.pageNo = 1; | |
62 | + } | |
63 | + | |
64 | + } | |
65 | + | |
66 | + public int getPageSize() { | |
67 | + return this.pageSize; | |
68 | + } | |
69 | + | |
70 | + public void setPageSize(final int pageSize) { | |
71 | + this.pageSize = pageSize; | |
72 | + } | |
73 | + | |
74 | + public int getFirst() { | |
75 | + return (this.pageNo - 1) * this.pageSize + 1; | |
76 | + } | |
77 | + | |
78 | + public boolean isAutoCount() { | |
79 | + return this.autoCount; | |
80 | + } | |
81 | + | |
82 | + public void setAutoCount(final boolean autoCount) { | |
83 | + this.autoCount = autoCount; | |
84 | + } | |
85 | + | |
86 | + public Page<T> autoCount(final boolean theAutoCount) { | |
87 | + this.setAutoCount(theAutoCount); | |
88 | + return this; | |
89 | + } | |
90 | + | |
91 | + public List<T> getRows() { | |
92 | + return this.rows; | |
93 | + } | |
94 | + | |
95 | + public void setRows(final List<T> result) { | |
96 | + this.rows = result; | |
97 | + } | |
98 | + | |
99 | + public long getTotal() { | |
100 | + return this.total; | |
101 | + } | |
102 | + | |
103 | + public void setTotal(final long totalCount) { | |
104 | + this.total = totalCount; | |
105 | + } | |
106 | + | |
107 | + public long getTotalPages() { | |
108 | + long count = this.total / (long) this.pageSize; | |
109 | + if (this.total % (long) this.pageSize > 0L) { | |
110 | + ++count; | |
111 | + } | |
112 | + | |
113 | + return count; | |
114 | + } | |
115 | + | |
116 | + public boolean isHasNext() { | |
117 | + return (long) (this.pageNo + 1) <= this.getTotalPages(); | |
118 | + } | |
119 | + | |
120 | + public int getNextPage() { | |
121 | + return this.isHasNext() ? this.pageNo + 1 : this.pageNo; | |
122 | + } | |
123 | + | |
124 | + public boolean isHasPre() { | |
125 | + return this.pageNo - 1 >= 1; | |
126 | + } | |
127 | + | |
128 | + public int getPrePage() { | |
129 | + return this.isHasPre() ? this.pageNo - 1 : this.pageNo; | |
130 | + } | |
131 | + | |
132 | + public String getSortName() { | |
133 | + return this.sortName; | |
134 | + } | |
135 | + | |
136 | + public void setSortName(String sortName) { | |
137 | + this.sortName = sortName; | |
138 | + } | |
139 | + | |
140 | + public String getSortOrder() { | |
141 | + return this.sortOrder; | |
142 | + } | |
143 | + | |
144 | + public void setSortOrder(String sortOrder) { | |
145 | + this.sortOrder = sortOrder; | |
146 | + } | |
147 | + | |
148 | + public boolean isAutoPaging() { | |
149 | + return this.autoPaging; | |
150 | + } | |
151 | + | |
152 | + public void setAutoPaging(boolean autoPaging) { | |
153 | + this.autoPaging = autoPaging; | |
154 | + } | |
155 | + | |
156 | + public String toString() { | |
157 | + return "Page{total=" + this.total + ", pageNo=" + this.pageNo + ", pageSize=" + this.pageSize + ", autoCount=" + this.autoCount + ", sortName='" + this.sortName + '\'' + ", sortOrder='" + this.sortOrder + '\'' + '}'; | |
158 | + } | |
159 | + | |
160 | + public String toTwitterStylePager() { | |
161 | + Object redisI18nService = null; | |
162 | + | |
163 | + try { | |
164 | + ApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext(); | |
165 | + redisI18nService = applicationContext.getBean("redisI18nService"); | |
166 | + } catch (Exception var14) { | |
167 | + } | |
168 | + | |
169 | + String firstPage = "首页"; | |
170 | + String pageUp = "上一页"; | |
171 | + String pageDown = "下一页"; | |
172 | + String lastPage = "末页"; | |
173 | + if (redisI18nService != null) { | |
174 | + try { | |
175 | + Method method = redisI18nService.getClass().getMethod("getI18nValue", String.class); | |
176 | + method.setAccessible(true); | |
177 | + firstPage = method.invoke(redisI18nService, "common.firstPage").toString(); | |
178 | + pageUp = method.invoke(redisI18nService, "common.pageUp").toString(); | |
179 | + pageDown = method.invoke(redisI18nService, "common.pageDown").toString(); | |
180 | + lastPage = method.invoke(redisI18nService, "common.lastPage").toString(); | |
181 | + } catch (Exception var13) { | |
182 | + } | |
183 | + } | |
184 | + | |
185 | + StringBuilder pager = new StringBuilder(); | |
186 | + boolean isFirstRightDot = false; | |
187 | + boolean isFirstLefttDot = false; | |
188 | + boolean isShow = false; | |
189 | + long totalPageNum = this.getTotalPages(); | |
190 | + pager.append("<ul>"); | |
191 | + pager.append("<li"); | |
192 | + if (this.pageNo == 1) { | |
193 | + pager.append(" class=\"active\""); | |
194 | + } | |
195 | + | |
196 | + pager.append("><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\""); | |
197 | + if (this.pageNo != 1) { | |
198 | + pager.append(" onclick=\"T.jump('").append(this.id).append("',1)\""); | |
199 | + } | |
200 | + | |
201 | + pager.append(">").append(firstPage).append("</a></li>"); | |
202 | + pager.append("<li"); | |
203 | + if (this.pageNo == 1) { | |
204 | + pager.append(" class=\"active\""); | |
205 | + } | |
206 | + | |
207 | + pager.append("><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\""); | |
208 | + if (this.pageNo != 1) { | |
209 | + pager.append(" onclick=\"T.jump('").append(this.id).append("','").append(this.pageNo - 1).append("')\""); | |
210 | + } | |
211 | + | |
212 | + pager.append(">").append(pageUp).append("</a></li>"); | |
213 | + | |
214 | + for (int i = 1; (long) i <= totalPageNum; ++i) { | |
215 | + if (i == 1 || i == 2 || (long) i == totalPageNum || (long) i == totalPageNum - 1L || i == this.pageNo - 1 || i == this.pageNo - 2 || i == this.pageNo + 1 || i == this.pageNo + 2) { | |
216 | + isShow = true; | |
217 | + } | |
218 | + | |
219 | + if (this.pageNo == i) { | |
220 | + pager.append("<li class=\"active\"><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\">"); | |
221 | + pager.append(this.pageNo).append("</a></li>"); | |
222 | + } else if (isShow) { | |
223 | + pager.append("<li><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\" onclick=\"T.jump('").append(this.id).append("','").append(i).append("')\">"); | |
224 | + pager.append(i).append("</a></li>"); | |
225 | + } else { | |
226 | + if (!isFirstLefttDot && i == this.pageNo - 3) { | |
227 | + pager.append("<li class=\"disabled\"><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\">"); | |
228 | + pager.append("...").append("</a></li>"); | |
229 | + isFirstLefttDot = true; | |
230 | + } | |
231 | + | |
232 | + if (!isFirstRightDot && i > this.pageNo) { | |
233 | + pager.append("<li class=\"disabled\"><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\">"); | |
234 | + pager.append("...").append("</a></li>"); | |
235 | + isFirstRightDot = true; | |
236 | + } | |
237 | + } | |
238 | + | |
239 | + isShow = false; | |
240 | + } | |
241 | + | |
242 | + pager.append("<li"); | |
243 | + if ((long) this.pageNo == this.getTotalPages() || this.getTotalPages() == 0L) { | |
244 | + pager.append(" class=\"active\""); | |
245 | + } | |
246 | + | |
247 | + pager.append("><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\""); | |
248 | + if ((long) this.pageNo != this.getTotalPages() && this.getTotalPages() > 0L) { | |
249 | + pager.append(" onclick=\"T.jump('").append(this.id).append("','").append(this.pageNo + 1).append("')\""); | |
250 | + } | |
251 | + | |
252 | + pager.append(">").append(pageDown).append("</a></li>"); | |
253 | + pager.append("<li"); | |
254 | + if ((long) this.pageNo == this.getTotalPages() || this.getTotalPages() == 0L) { | |
255 | + pager.append(" class=\"active\""); | |
256 | + } | |
257 | + | |
258 | + pager.append("><a style=\"padding: 0 11px;line-height: 26px;\" href=\"javascript:void(0);\""); | |
259 | + if ((long) this.pageNo != this.getTotalPages() && this.getTotalPages() > 0L) { | |
260 | + pager.append(" onclick=\"T.jump('").append(this.id).append("','").append(this.getTotalPages()).append("')\""); | |
261 | + } | |
262 | + | |
263 | + pager.append(">").append(lastPage).append("</a></li>"); | |
264 | + pager.append("</ul>"); | |
265 | + return pager.toString(); | |
266 | + } | |
267 | +} | |
268 | + | ... | ... |
1 | +package com.qgutech.model; | |
2 | + | |
3 | +import lombok.Data; | |
4 | + | |
5 | +import java.io.Serializable; | |
6 | + | |
7 | +/** | |
8 | + * @author oo | |
9 | + * @since 2024/11/08 | |
10 | + */ | |
11 | +@Data | |
12 | +public class PowerModel implements Serializable { | |
13 | + private String id; | |
14 | + private String type; | |
15 | + // BMS-允许充电电流 | |
16 | + private String BMS05; | |
17 | + private String BMS16; | |
18 | + private String BMS29; | |
19 | + // PCS-交流B相电流 | |
20 | + private String PCS22; | |
21 | + // PCS-交流C相电流 | |
22 | + private String PCS23; | |
23 | + // PCS-交流A相电流 | |
24 | + private String PCS21; | |
25 | + // CP-B枪需求功率 | |
26 | + private String CP27; | |
27 | + // CP-B枪需求电流 | |
28 | + private String CP28; | |
29 | + // CP-A枪需求电流 | |
30 | + private String CP16; | |
31 | + // PV-总电网取电电量 | |
32 | + private String PV24; | |
33 | + // PV-绝缘阻抗 | |
34 | + private String PV06; | |
35 | + // PV-电网频率 | |
36 | + private String PV04; | |
37 | + // EM-A相电流 | |
38 | + private String EM04; | |
39 | + // EM-C相电流 | |
40 | + private String EM06; | |
41 | + // EM-B相电流 | |
42 | + private String EM05; | |
43 | + // PV-总功直流功率 | |
44 | + private String PV03; | |
45 | + // BMS-总电流 | |
46 | + private String BMS02; | |
47 | + // BMS-总电压 | |
48 | + private String BMS01; | |
49 | + // BMS-SOC | |
50 | + private String BMS03; | |
51 | + // CP-当前功率 | |
52 | + private String CP02; | |
53 | + // PCS-最大放电电流 | |
54 | + private String PCS26; | |
55 | + // PV-A相电流 | |
56 | + private String PV10; | |
57 | + // PV-B相电流 | |
58 | + private String PV11; | |
59 | + // PV-C相电流 | |
60 | + private String PV12; | |
61 | + // EM-AB线电压 | |
62 | + private String EM01; | |
63 | + // EM-BC线电压 | |
64 | + private String EM02; | |
65 | + // EM-CA线电压 | |
66 | + private String EM03; | |
67 | + // EM-电流变比 | |
68 | + private String EM30; | |
69 | + // 日期 | |
70 | + private String date; | |
71 | +} | ... | ... |
src/main/java/com/qgutech/model/User.java
0 → 100644
1 | +package com.qgutech.model; | |
2 | + | |
3 | +import lombok.Data; | |
4 | + | |
5 | +import java.io.Serializable; | |
6 | +import java.util.Date; | |
7 | + | |
8 | +/** | |
9 | + * @author xxx | |
10 | + * @date 2024/12/17 12:21 | |
11 | + * @description | |
12 | + */ | |
13 | +@Data | |
14 | +public class User implements Serializable { | |
15 | + | |
16 | + private static final long serialVersionUID = -8665937807336805076L; | |
17 | + /** | |
18 | + * 主键 | |
19 | + */ | |
20 | + private String userId; | |
21 | + | |
22 | + /** | |
23 | + * 姓名 | |
24 | + */ | |
25 | + private String userName; | |
26 | + | |
27 | + /** | |
28 | + * 工号 | |
29 | + */ | |
30 | + private String employeeCode; | |
31 | + | |
32 | + /** | |
33 | + * 部门Id | |
34 | + */ | |
35 | + private String organizeId; | |
36 | + | |
37 | + /** | |
38 | + * 部门名称 | |
39 | + */ | |
40 | + private String organizeName; | |
41 | + /** | |
42 | + * 用户名 | |
43 | + */ | |
44 | + private String loginName; | |
45 | + /** | |
46 | + * 密码 | |
47 | + */ | |
48 | + private String password; | |
49 | + /** | |
50 | + * 原密码 | |
51 | + */ | |
52 | + private String oldPassword; | |
53 | + /** | |
54 | + * 账号状态 | |
55 | + */ | |
56 | + private String accountStatus; | |
57 | + /** | |
58 | + * 身份证 | |
59 | + */ | |
60 | + private String idCard; | |
61 | + /** | |
62 | + * 电话 | |
63 | + */ | |
64 | + private String mobile; | |
65 | + /** | |
66 | + * 邮箱 | |
67 | + */ | |
68 | + private String email; | |
69 | + /** | |
70 | + * 性别 | |
71 | + */ | |
72 | + private String gender; | |
73 | + /** | |
74 | + * 头像 | |
75 | + */ | |
76 | + private String photo; | |
77 | + /** | |
78 | + * 创建时间 | |
79 | + */ | |
80 | + private Date createTime; | |
81 | + /** | |
82 | + * 创建人 | |
83 | + */ | |
84 | + private String createBy; | |
85 | + /** | |
86 | + * 最后修改时间 | |
87 | + */ | |
88 | + private Date lastModifyTime; | |
89 | + /** | |
90 | + * 最后修改人 | |
91 | + */ | |
92 | + private String lastModifyBy; | |
93 | + | |
94 | +} | ... | ... |
1 | +package com.qgutech.service; | |
2 | + | |
3 | +import com.alibaba.fastjson.JSONObject; | |
4 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
5 | +import com.qgutech.model.PowerModel; | |
6 | +import com.qgutech.util.HttpClientUtils; | |
7 | +import lombok.extern.slf4j.Slf4j; | |
8 | +import org.apache.commons.collections4.CollectionUtils; | |
9 | +import org.apache.commons.collections4.MapUtils; | |
10 | +import org.apache.commons.lang3.StringUtils; | |
11 | +import org.junit.Test; | |
12 | +import org.springframework.beans.factory.annotation.Value; | |
13 | +import org.springframework.stereotype.Service; | |
14 | + | |
15 | +import java.io.IOException; | |
16 | +import java.text.SimpleDateFormat; | |
17 | +import java.time.Instant; | |
18 | +import java.time.LocalDateTime; | |
19 | +import java.time.ZoneId; | |
20 | +import java.time.format.DateTimeFormatter; | |
21 | +import java.util.*; | |
22 | + | |
23 | +/** | |
24 | + * 徽辰智电 | |
25 | + * | |
26 | + * @author oo | |
27 | + * @since 2024-11-09 | |
28 | + */ | |
29 | +@Slf4j | |
30 | +@Service | |
31 | +public class PowerService { | |
32 | + | |
33 | + @Value("${power.panelUrl}") | |
34 | + private String PANEL_URL; | |
35 | + | |
36 | + @Value("${power.detailUrl}") | |
37 | + private String DETAIL_URL; | |
38 | + | |
39 | + @Value("${power.dateUrl}") | |
40 | + private String DATE_URL; | |
41 | + | |
42 | + @Value("${power.token}") | |
43 | + private String TOKEN; | |
44 | + | |
45 | + public Map<String, Object> getIndex(PowerModel powerModel) { | |
46 | + Map<String, Object> resultMap = new HashMap<>(); | |
47 | + // Todo 累计发电量,累计经济发电量客户接口开发中 | |
48 | + resultMap.put("allPower", "1001.55"); | |
49 | + resultMap.put("allAmount", "9246.76"); | |
50 | + // 设备统计 | |
51 | + deviceCount(resultMap); | |
52 | + Map<String, Object> detail = getPowerDetail(); | |
53 | + // BMS监视、PCS监视、充电桩监视、光伏监视、电能表监视 | |
54 | + addPowerData(resultMap, detail); | |
55 | + ObjectMapper mapper = new ObjectMapper(); | |
56 | + try { | |
57 | + String jsonString = mapper.writeValueAsString(resultMap); | |
58 | + System.out.println(jsonString); | |
59 | + log.info("=============resultMap======[{}]", jsonString); | |
60 | + } catch (IOException e) { | |
61 | + e.printStackTrace(); | |
62 | + } | |
63 | + return resultMap; | |
64 | + } | |
65 | + | |
66 | + private Map<String, Object> getPowerDetail() { | |
67 | + Map<String, String> header = new HashMap<>(); | |
68 | + header.put("X-Token", TOKEN); | |
69 | + String jsonStr = HttpClientUtils.doGetRequest(DETAIL_URL, header, null); | |
70 | + if (StringUtils.isBlank(jsonStr)) { | |
71 | + return new HashMap<>(); | |
72 | + } | |
73 | + Map<String, Object> result = JSONObject.parseObject(jsonStr); | |
74 | + return result; | |
75 | + } | |
76 | + | |
77 | + public List<PowerModel> getDateMap(String type) { | |
78 | + Map<String, Map<String, String>> resultMap = new HashMap<>(); | |
79 | + if ("BMS".equalsIgnoreCase(type)) { | |
80 | + // BMS-最高电压模块 | |
81 | + Map<String, String> BMS29 = getDateDetail("BMS29", "10"); | |
82 | + if (MapUtils.isNotEmpty(BMS29)) { | |
83 | + for (Map.Entry<String, String> BMS29Entry : BMS29.entrySet()) { | |
84 | + Map<String, String> subMap = new HashMap<>(); | |
85 | + subMap.put("BMS29", ""); | |
86 | + subMap.put("BMS16", ""); | |
87 | + subMap.put("BMS05", ""); | |
88 | + String key = BMS29Entry.getKey(); | |
89 | + String value = BMS29Entry.getValue(); | |
90 | + subMap.put("BMS29", value); | |
91 | + resultMap.put(key, subMap); | |
92 | + } | |
93 | + } | |
94 | + // BMS-单体最低温度 | |
95 | + Map<String, String> BMS16 = getDateDetail("BMS16", "10"); | |
96 | + if (MapUtils.isNotEmpty(BMS16)) { | |
97 | + for (Map.Entry<String, String> BMS16Entry : BMS16.entrySet()) { | |
98 | + String key = BMS16Entry.getKey(); | |
99 | + String value = BMS16Entry.getValue(); | |
100 | + if (resultMap.containsKey(key)) { | |
101 | + resultMap.get(key).put("BMS16", value); | |
102 | + } | |
103 | + } | |
104 | + } | |
105 | + // BMS-允许充电电流 | |
106 | + Map<String, String> BMS05 = getDateDetail("BMS05", "10"); | |
107 | + if (MapUtils.isNotEmpty(BMS05)) { | |
108 | + for (Map.Entry<String, String> BMS05Entry : BMS05.entrySet()) { | |
109 | + String key = BMS05Entry.getKey(); | |
110 | + String value = BMS05Entry.getValue(); | |
111 | + if (resultMap.containsKey(key)) { | |
112 | + resultMap.get(key).put("BMS05", value); | |
113 | + } | |
114 | + } | |
115 | + } | |
116 | + } | |
117 | + | |
118 | + if ("PCS".equalsIgnoreCase(type)) { | |
119 | + // PCS-交流B相电流 | |
120 | + Map<String, String> PCS22 = getDateDetail("PCS22", "10"); | |
121 | + if (MapUtils.isNotEmpty(PCS22)) { | |
122 | + for (Map.Entry<String, String> PCS22Entry : PCS22.entrySet()) { | |
123 | + Map<String, String> subMap = new HashMap<>(); | |
124 | + subMap.put("PCS22", ""); | |
125 | + subMap.put("PCS23", ""); | |
126 | + subMap.put("PCS21", ""); | |
127 | + String key = PCS22Entry.getKey(); | |
128 | + String value = PCS22Entry.getValue(); | |
129 | + subMap.put("PCS22", value); | |
130 | + resultMap.put(key, subMap); | |
131 | + } | |
132 | + } | |
133 | + // PCS-交流C相电流 | |
134 | + Map<String, String> PCS23 = getDateDetail("PCS23", "10"); | |
135 | + if (MapUtils.isNotEmpty(PCS23)) { | |
136 | + for (Map.Entry<String, String> PCS23Entry : PCS23.entrySet()) { | |
137 | + String key = PCS23Entry.getKey(); | |
138 | + String value = PCS23Entry.getValue(); | |
139 | + if (resultMap.containsKey(key)) { | |
140 | + resultMap.get(key).put("PCS23", value); | |
141 | + } | |
142 | + } | |
143 | + } | |
144 | + // PCS-交流A相电流 | |
145 | + Map<String, String> PCS21 = getDateDetail("PCS21", "10"); | |
146 | + if (MapUtils.isNotEmpty(PCS21)) { | |
147 | + for (Map.Entry<String, String> PCS21Entry : PCS21.entrySet()) { | |
148 | + String key = PCS21Entry.getKey(); | |
149 | + String value = PCS21Entry.getValue(); | |
150 | + if (resultMap.containsKey(key)) { | |
151 | + resultMap.get(key).put("PCS21", value); | |
152 | + } | |
153 | + } | |
154 | + } | |
155 | + } | |
156 | + // 充电桩 | |
157 | + if ("CP".equalsIgnoreCase(type)) { | |
158 | + // CP-B枪需求功率 | |
159 | + Map<String, String> CP27 = getDateDetail("CP27", "10"); | |
160 | + if (MapUtils.isNotEmpty(CP27)) { | |
161 | + for (Map.Entry<String, String> CP27Entry : CP27.entrySet()) { | |
162 | + Map<String, String> subMap = new HashMap<>(); | |
163 | + subMap.put("CP27", ""); | |
164 | + subMap.put("CP28", ""); | |
165 | + subMap.put("CP16", ""); | |
166 | + String key = CP27Entry.getKey(); | |
167 | + String value = CP27Entry.getValue(); | |
168 | + subMap.put("CP27", value); | |
169 | + resultMap.put(key, subMap); | |
170 | + } | |
171 | + } | |
172 | + // CP-B枪需求电流 | |
173 | + Map<String, String> CP28 = getDateDetail("CP28", "10"); | |
174 | + if (MapUtils.isNotEmpty(CP28)) { | |
175 | + for (Map.Entry<String, String> CP28Entry : CP28.entrySet()) { | |
176 | + String key = CP28Entry.getKey(); | |
177 | + String value = CP28Entry.getValue(); | |
178 | + if (resultMap.containsKey(key)) { | |
179 | + resultMap.get(key).put("CP28", value); | |
180 | + } | |
181 | + } | |
182 | + } | |
183 | + // CP-A枪需求电流 | |
184 | + Map<String, String> CP16 = getDateDetail("CP16", "10"); | |
185 | + if (MapUtils.isNotEmpty(CP16)) { | |
186 | + for (Map.Entry<String, String> CP16Entry : CP16.entrySet()) { | |
187 | + String key = CP16Entry.getKey(); | |
188 | + String value = CP16Entry.getValue(); | |
189 | + if (resultMap.containsKey(key)) { | |
190 | + resultMap.get(key).put("CP16", value); | |
191 | + } | |
192 | + } | |
193 | + } | |
194 | + } | |
195 | + // 光伏 | |
196 | + if ("PV".equalsIgnoreCase(type)) { | |
197 | + // PV-总电网取电电量 | |
198 | + Map<String, String> PV24 = getDateDetail("PV24", "10"); | |
199 | + if (MapUtils.isNotEmpty(PV24)) { | |
200 | + for (Map.Entry<String, String> PV24Entry : PV24.entrySet()) { | |
201 | + Map<String, String> subMap = new HashMap<>(); | |
202 | + subMap.put("PV24", ""); | |
203 | + subMap.put("PV06", ""); | |
204 | + subMap.put("PV04", ""); | |
205 | + String key = PV24Entry.getKey(); | |
206 | + String value = PV24Entry.getValue(); | |
207 | + subMap.put("PV24", value); | |
208 | + resultMap.put(key, subMap); | |
209 | + } | |
210 | + } | |
211 | + // PV-绝缘阻抗 | |
212 | + Map<String, String> PV06 = getDateDetail("PV06", "10"); | |
213 | + if (MapUtils.isNotEmpty(PV06)) { | |
214 | + for (Map.Entry<String, String> PV06Entry : PV06.entrySet()) { | |
215 | + String key = PV06Entry.getKey(); | |
216 | + String value = PV06Entry.getValue(); | |
217 | + if (resultMap.containsKey(key)) { | |
218 | + resultMap.get(key).put("PV06", value); | |
219 | + } | |
220 | + } | |
221 | + } | |
222 | + // PV-电网频率 | |
223 | + Map<String, String> PV04 = getDateDetail("PV04", "10"); | |
224 | + if (MapUtils.isNotEmpty(PV04)) { | |
225 | + for (Map.Entry<String, String> PV04Entry : PV04.entrySet()) { | |
226 | + String key = PV04Entry.getKey(); | |
227 | + String value = PV04Entry.getValue(); | |
228 | + if (resultMap.containsKey(key)) { | |
229 | + resultMap.get(key).put("PV04", value); | |
230 | + } | |
231 | + } | |
232 | + } | |
233 | + } | |
234 | + // 电能 | |
235 | + if ("EM".equalsIgnoreCase(type)) { | |
236 | + // EM-A相电流 | |
237 | + Map<String, String> EM04 = getDateDetail("EM04", "10"); | |
238 | + if (MapUtils.isNotEmpty(EM04)) { | |
239 | + for (Map.Entry<String, String> EM04Entry : EM04.entrySet()) { | |
240 | + Map<String, String> subMap = new HashMap<>(); | |
241 | + subMap.put("EM04", ""); | |
242 | + subMap.put("EM06", ""); | |
243 | + subMap.put("EM05", ""); | |
244 | + String key = EM04Entry.getKey(); | |
245 | + String value = EM04Entry.getValue(); | |
246 | + subMap.put("EM04", value); | |
247 | + resultMap.put(key, subMap); | |
248 | + } | |
249 | + } | |
250 | + // EM-C相电流 | |
251 | + Map<String, String> EM06 = getDateDetail("EM06", "10"); | |
252 | + if (MapUtils.isNotEmpty(EM06)) { | |
253 | + for (Map.Entry<String, String> EM06Entry : EM06.entrySet()) { | |
254 | + String key = EM06Entry.getKey(); | |
255 | + String value = EM06Entry.getValue(); | |
256 | + if (resultMap.containsKey(key)) { | |
257 | + resultMap.get(key).put("EM06", value); | |
258 | + } | |
259 | + } | |
260 | + } | |
261 | + // EM-B相电流 | |
262 | + Map<String, String> EM05 = getDateDetail("EM05", "10"); | |
263 | + if (MapUtils.isNotEmpty(EM05)) { | |
264 | + for (Map.Entry<String, String> EM05Entry : EM05.entrySet()) { | |
265 | + String key = EM05Entry.getKey(); | |
266 | + String value = EM05Entry.getValue(); | |
267 | + if (resultMap.containsKey(key)) { | |
268 | + resultMap.get(key).put("EM05", value); | |
269 | + } | |
270 | + } | |
271 | + } | |
272 | + } | |
273 | + if ("INDEX_MAP".equals(type)) { | |
274 | + // PV-总功直流功率 | |
275 | + Map<String, String> PV03 = getDateDetail("PV03", "50"); | |
276 | + if (MapUtils.isNotEmpty(PV03)) { | |
277 | + for (Map.Entry<String, String> PV03Entry : PV03.entrySet()) { | |
278 | + Map<String, String> subMap = new HashMap<>(); | |
279 | + subMap.put("PV03", ""); | |
280 | + subMap.put("BMS02", ""); | |
281 | + subMap.put("CP02", ""); | |
282 | + subMap.put("EM30", ""); | |
283 | + String key = PV03Entry.getKey(); | |
284 | + String value = PV03Entry.getValue(); | |
285 | + subMap.put("PV03", value); | |
286 | + resultMap.put(key, subMap); | |
287 | + } | |
288 | + } | |
289 | + // BMS-总电流 | |
290 | + Map<String, String> BMS02 = getDateDetail("BMS02", "50"); | |
291 | + if (MapUtils.isNotEmpty(BMS02)) { | |
292 | + for (Map.Entry<String, String> BMS02Entry : BMS02.entrySet()) { | |
293 | + String key = BMS02Entry.getKey(); | |
294 | + String value = BMS02Entry.getValue(); | |
295 | + if (resultMap.containsKey(key)) { | |
296 | + resultMap.get(key).put("BMS02", value); | |
297 | + } | |
298 | + } | |
299 | + } | |
300 | + // CP-当前功率 | |
301 | + Map<String, String> CP02 = getDateDetail("CP02", "50"); | |
302 | + if (MapUtils.isNotEmpty(CP02)) { | |
303 | + for (Map.Entry<String, String> CP02Entry : CP02.entrySet()) { | |
304 | + String key = CP02Entry.getKey(); | |
305 | + String value = CP02Entry.getValue(); | |
306 | + if (resultMap.containsKey(key)) { | |
307 | + resultMap.get(key).put("CP02", value); | |
308 | + } | |
309 | + } | |
310 | + } | |
311 | + // EM-电流变比 | |
312 | + Map<String, String> EM30 = getDateDetail("EM30", "50"); | |
313 | + if (MapUtils.isNotEmpty(EM30)) { | |
314 | + for (Map.Entry<String, String> EM30Entry : EM30.entrySet()) { | |
315 | + String key = EM30Entry.getKey(); | |
316 | + String value = EM30Entry.getValue(); | |
317 | + if (resultMap.containsKey(key)) { | |
318 | + resultMap.get(key).put("EM30", value); | |
319 | + } | |
320 | + } | |
321 | + } | |
322 | + } | |
323 | + if ("BMS_MAP".equals(type)) { | |
324 | + // BMS-允许放电电流 | |
325 | + Map<String, String> BMS05 = getDateDetail("BMS05", "50"); | |
326 | + if (MapUtils.isNotEmpty(BMS05)) { | |
327 | + for (Map.Entry<String, String> BMS05Entry : BMS05.entrySet()) { | |
328 | + Map<String, String> subMap = new HashMap<>(); | |
329 | + subMap.put("BMS05", ""); | |
330 | + subMap.put("BMS02", ""); | |
331 | + subMap.put("BMS01", ""); | |
332 | + subMap.put("BMS03", ""); | |
333 | + String key = BMS05Entry.getKey(); | |
334 | + String value = BMS05Entry.getValue(); | |
335 | + subMap.put("BMS05", value); | |
336 | + resultMap.put(key, subMap); | |
337 | + } | |
338 | + } | |
339 | + // BMS-总电流 | |
340 | + Map<String, String> BMS02 = getDateDetail("BMS02", "50"); | |
341 | + if (MapUtils.isNotEmpty(BMS02)) { | |
342 | + for (Map.Entry<String, String> BMS02Entry : BMS02.entrySet()) { | |
343 | + String key = BMS02Entry.getKey(); | |
344 | + String value = BMS02Entry.getValue(); | |
345 | + if (resultMap.containsKey(key)) { | |
346 | + resultMap.get(key).put("BMS02", value); | |
347 | + } | |
348 | + } | |
349 | + } | |
350 | + // BMS-总电压 | |
351 | + Map<String, String> BMS01 = getDateDetail("BMS01", "50"); | |
352 | + if (MapUtils.isNotEmpty(BMS01)) { | |
353 | + for (Map.Entry<String, String> BMS01Entry : BMS01.entrySet()) { | |
354 | + String key = BMS01Entry.getKey(); | |
355 | + String value = BMS01Entry.getValue(); | |
356 | + if (resultMap.containsKey(key)) { | |
357 | + resultMap.get(key).put("BMS01", value); | |
358 | + } | |
359 | + } | |
360 | + } | |
361 | + // BMS-SOC | |
362 | + Map<String, String> BMS03 = getDateDetail("BMS03", "50"); | |
363 | + if (MapUtils.isNotEmpty(BMS03)) { | |
364 | + for (Map.Entry<String, String> BMS03Entry : BMS03.entrySet()) { | |
365 | + String key = BMS03Entry.getKey(); | |
366 | + String value = BMS03Entry.getValue(); | |
367 | + if (resultMap.containsKey(key)) { | |
368 | + resultMap.get(key).put("BMS03", value); | |
369 | + } | |
370 | + } | |
371 | + } | |
372 | + } | |
373 | + if ("PCS_MAP".equals(type)) { | |
374 | + // PCS-交流A相电流 | |
375 | + Map<String, String> PCS21 = getDateDetail("PCS21", "50"); | |
376 | + if (MapUtils.isNotEmpty(PCS21)) { | |
377 | + for (Map.Entry<String, String> PCS21Entry : PCS21.entrySet()) { | |
378 | + Map<String, String> subMap = new HashMap<>(); | |
379 | + subMap.put("PCS21", ""); | |
380 | + subMap.put("PCS26", ""); | |
381 | + subMap.put("PCS23", ""); | |
382 | + String key = PCS21Entry.getKey(); | |
383 | + String value = PCS21Entry.getValue(); | |
384 | + subMap.put("PCS21", value); | |
385 | + resultMap.put(key, subMap); | |
386 | + } | |
387 | + } | |
388 | + | |
389 | + // PCS-最大放电电流 | |
390 | + Map<String, String> PCS26 = getDateDetail("PCS26", "50"); | |
391 | + if (MapUtils.isNotEmpty(PCS26)) { | |
392 | + for (Map.Entry<String, String> PCS26Entry : PCS26.entrySet()) { | |
393 | + String key = PCS26Entry.getKey(); | |
394 | + String value = PCS26Entry.getValue(); | |
395 | + if (resultMap.containsKey(key)) { | |
396 | + resultMap.get(key).put("PCS26", value); | |
397 | + } | |
398 | + } | |
399 | + } | |
400 | + | |
401 | + // PCS-交流C相电流 | |
402 | + Map<String, String> PCS23 = getDateDetail("PCS23", "50"); | |
403 | + if (MapUtils.isNotEmpty(PCS23)) { | |
404 | + for (Map.Entry<String, String> PCS23Entry : PCS23.entrySet()) { | |
405 | + String key = PCS23Entry.getKey(); | |
406 | + String value = PCS23Entry.getValue(); | |
407 | + if (resultMap.containsKey(key)) { | |
408 | + resultMap.get(key).put("PCS23", value); | |
409 | + } | |
410 | + } | |
411 | + } | |
412 | + } | |
413 | + if ("CP_MAP".equals(type)) { | |
414 | + // PCS-交流A相电流 | |
415 | + Map<String, String> PCS21 = getDateDetail("PCS21", "50"); | |
416 | + if (MapUtils.isNotEmpty(PCS21)) { | |
417 | + for (Map.Entry<String, String> PCS21Entry : PCS21.entrySet()) { | |
418 | + Map<String, String> subMap = new HashMap<>(); | |
419 | + subMap.put("PCS21", ""); | |
420 | + subMap.put("PCS22", ""); | |
421 | + subMap.put("PCS23", ""); | |
422 | + String key = PCS21Entry.getKey(); | |
423 | + String value = PCS21Entry.getValue(); | |
424 | + subMap.put("PCS21", value); | |
425 | + resultMap.put(key, subMap); | |
426 | + } | |
427 | + } | |
428 | + | |
429 | + // PCS-交流B相电流 | |
430 | + Map<String, String> PCS22 = getDateDetail("PCS22", "50"); | |
431 | + if (MapUtils.isNotEmpty(PCS22)) { | |
432 | + for (Map.Entry<String, String> PCS22Entry : PCS22.entrySet()) { | |
433 | + String key = PCS22Entry.getKey(); | |
434 | + String value = PCS22Entry.getValue(); | |
435 | + if (resultMap.containsKey(key)) { | |
436 | + resultMap.get(key).put("PCS22", value); | |
437 | + } | |
438 | + } | |
439 | + } | |
440 | + | |
441 | + // PCS-交流C相电流 | |
442 | + Map<String, String> PCS23 = getDateDetail("PCS23", "50"); | |
443 | + if (MapUtils.isNotEmpty(PCS23)) { | |
444 | + for (Map.Entry<String, String> PCS23Entry : PCS23.entrySet()) { | |
445 | + String key = PCS23Entry.getKey(); | |
446 | + String value = PCS23Entry.getValue(); | |
447 | + if (resultMap.containsKey(key)) { | |
448 | + resultMap.get(key).put("PCS23", value); | |
449 | + } | |
450 | + } | |
451 | + } | |
452 | + } | |
453 | + if ("PV_MAP".equals(type)) { | |
454 | + // PV-A相电流 | |
455 | + Map<String, String> PV10 = getDateDetail("PV10", "50"); | |
456 | + if (MapUtils.isNotEmpty(PV10)) { | |
457 | + for (Map.Entry<String, String> PV10Entry : PV10.entrySet()) { | |
458 | + Map<String, String> subMap = new HashMap<>(); | |
459 | + subMap.put("PV10", ""); | |
460 | + subMap.put("PV11", ""); | |
461 | + subMap.put("PV12", ""); | |
462 | + String key = PV10Entry.getKey(); | |
463 | + String value = PV10Entry.getValue(); | |
464 | + subMap.put("PV10", value); | |
465 | + resultMap.put(key, subMap); | |
466 | + } | |
467 | + } | |
468 | + | |
469 | + // PV-B相电流 | |
470 | + Map<String, String> PV11 = getDateDetail("PV11", "50"); | |
471 | + if (MapUtils.isNotEmpty(PV11)) { | |
472 | + for (Map.Entry<String, String> PV11Entry : PV11.entrySet()) { | |
473 | + String key = PV11Entry.getKey(); | |
474 | + String value = PV11Entry.getValue(); | |
475 | + if (resultMap.containsKey(key)) { | |
476 | + resultMap.get(key).put("PV11", value); | |
477 | + } | |
478 | + } | |
479 | + } | |
480 | + | |
481 | + // PV-C相电流 | |
482 | + Map<String, String> PV12 = getDateDetail("PV12", "50"); | |
483 | + if (MapUtils.isNotEmpty(PV12)) { | |
484 | + for (Map.Entry<String, String> PV12Entry : PV12.entrySet()) { | |
485 | + String key = PV12Entry.getKey(); | |
486 | + String value = PV12Entry.getValue(); | |
487 | + if (resultMap.containsKey(key)) { | |
488 | + resultMap.get(key).put("PV12", value); | |
489 | + } | |
490 | + } | |
491 | + } | |
492 | + } | |
493 | + if ("EM_MAP".equals(type)) { | |
494 | + // EM-CA线电压 | |
495 | + Map<String, String> EM03 = getDateDetail("EM03", "50"); | |
496 | + if (MapUtils.isNotEmpty(EM03)) { | |
497 | + for (Map.Entry<String, String> EM03Entry : EM03.entrySet()) { | |
498 | + Map<String, String> subMap = new HashMap<>(); | |
499 | + subMap.put("EM03", ""); | |
500 | + subMap.put("EM02", ""); | |
501 | + subMap.put("EM01", ""); | |
502 | + String key = EM03Entry.getKey(); | |
503 | + String value = EM03Entry.getValue(); | |
504 | + subMap.put("EM03", value); | |
505 | + resultMap.put(key, subMap); | |
506 | + } | |
507 | + } | |
508 | + | |
509 | + // EM-BC线电压 | |
510 | + Map<String, String> EM02 = getDateDetail("EM02", "50"); | |
511 | + if (MapUtils.isNotEmpty(EM02)) { | |
512 | + for (Map.Entry<String, String> EM02Entry : EM02.entrySet()) { | |
513 | + String key = EM02Entry.getKey(); | |
514 | + String value = EM02Entry.getValue(); | |
515 | + if (resultMap.containsKey(key)) { | |
516 | + resultMap.get(key).put("EM02", value); | |
517 | + } | |
518 | + } | |
519 | + } | |
520 | + | |
521 | + // EM-AB线电压 | |
522 | + Map<String, String> EM01 = getDateDetail("EM01", "50"); | |
523 | + if (MapUtils.isNotEmpty(EM01)) { | |
524 | + for (Map.Entry<String, String> EM01Entry : EM01.entrySet()) { | |
525 | + String key = EM01Entry.getKey(); | |
526 | + String value = EM01Entry.getValue(); | |
527 | + if (resultMap.containsKey(key)) { | |
528 | + resultMap.get(key).put("EM01", value); | |
529 | + } | |
530 | + } | |
531 | + } | |
532 | + } | |
533 | +// log.info("=========result========[{}]==========", resultMap); | |
534 | + List<PowerModel> resultList = new ArrayList<>(); | |
535 | + if (MapUtils.isNotEmpty(resultMap)) { | |
536 | + for (Map.Entry<String, Map<String, String>> stringMapEntry : resultMap.entrySet()) { | |
537 | + PowerModel powerModel = new PowerModel(); | |
538 | + String date = stringMapEntry.getKey(); | |
539 | + Map<String, String> subMap = stringMapEntry.getValue(); | |
540 | + powerModel.setDate(date); | |
541 | + powerModel.setBMS05(subMap.get("BMS05")); | |
542 | + powerModel.setBMS16(subMap.get("BMS16")); | |
543 | + powerModel.setBMS29(subMap.get("BMS29")); | |
544 | + powerModel.setPCS21(subMap.get("PCS21")); | |
545 | + powerModel.setPCS22(subMap.get("PCS22")); | |
546 | + powerModel.setPCS23(subMap.get("PCS23")); | |
547 | + powerModel.setCP16(subMap.get("CP16")); | |
548 | + powerModel.setCP27(subMap.get("CP27")); | |
549 | + powerModel.setCP28(subMap.get("CP28")); | |
550 | + powerModel.setPV04(subMap.get("PV04")); | |
551 | + powerModel.setPV06(subMap.get("PV06")); | |
552 | + powerModel.setPV24(subMap.get("PV24")); | |
553 | + powerModel.setEM04(subMap.get("EM04")); | |
554 | + powerModel.setEM05(subMap.get("EM05")); | |
555 | + powerModel.setEM06(subMap.get("EM06")); | |
556 | + powerModel.setPV03(subMap.get("PV03")); | |
557 | + powerModel.setBMS02(subMap.get("BMS02")); | |
558 | + powerModel.setBMS01(subMap.get("BMS01")); | |
559 | + powerModel.setBMS03(subMap.get("BMS03")); | |
560 | + powerModel.setPCS26(subMap.get("PCS26")); | |
561 | + powerModel.setPV10(subMap.get("PV10")); | |
562 | + powerModel.setPV11(subMap.get("PV11")); | |
563 | + powerModel.setPV12(subMap.get("PV12")); | |
564 | + powerModel.setEM01(subMap.get("EM01")); | |
565 | + powerModel.setEM02(subMap.get("EM02")); | |
566 | + powerModel.setEM03(subMap.get("EM03")); | |
567 | + powerModel.setCP02(subMap.get("CP02")); | |
568 | + powerModel.setEM30(subMap.get("EM30")); | |
569 | + resultList.add(powerModel); | |
570 | + } | |
571 | + } | |
572 | + log.info("=========list========[{}]==========", resultList); | |
573 | + return resultList; | |
574 | + } | |
575 | + | |
576 | + private Map<String, String> getDateDetail(String key, String limit) { | |
577 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
578 | + Date currentDate = new Date(); | |
579 | + String endTime = sdf.format(currentDate); | |
580 | + Calendar calendar = Calendar.getInstance(); | |
581 | + calendar.setTime(currentDate); | |
582 | + calendar.add(Calendar.DATE, -3); | |
583 | + Date startDate = calendar.getTime(); | |
584 | + String startTime = sdf.format(startDate); | |
585 | + Map<String, String> header = new HashMap<>(); | |
586 | + header.put("X-Token", TOKEN); | |
587 | + Map<String, String> params = new HashMap<>(); | |
588 | + params.put("key", key); | |
589 | + params.put("startTime", startTime); | |
590 | + params.put("endTime", endTime); | |
591 | + params.put("limit", limit); | |
592 | + String jsonStr = HttpClientUtils.doGetRequest(DATE_URL, header, params); | |
593 | + if (StringUtils.isBlank(jsonStr)) { | |
594 | + return new HashMap<>(); | |
595 | + } | |
596 | + Map<String, Object> result = JSONObject.parseObject(jsonStr); | |
597 | + Integer code = (Integer) result.get("code"); | |
598 | + Map<String, String> resultMap = new HashMap<>(); | |
599 | + if (code != null && code == 200) { | |
600 | + List<Map<String, Object>> list = (List<Map<String, Object>>) result.get("data"); | |
601 | + if (CollectionUtils.isEmpty(list)) { | |
602 | + return new HashMap<>(); | |
603 | + } | |
604 | + for (Map<String, Object> map : list) { | |
605 | + String value = String.valueOf(map.get(key.toLowerCase())); | |
606 | + String date = (String) map.get("ts"); | |
607 | + String dateStr = formatDate(date); | |
608 | + resultMap.put(dateStr, value); | |
609 | + } | |
610 | + } else { | |
611 | + return new HashMap<>(); | |
612 | + } | |
613 | + return resultMap; | |
614 | + } | |
615 | + | |
616 | + public String formatDate(String date) { | |
617 | + Instant instant = Instant.parse(date); | |
618 | + LocalDateTime localDateTime = instant.atZone(ZoneId.of("Z")).toLocalDateTime(); | |
619 | + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | |
620 | + String formattedString = localDateTime.format(formatter); | |
621 | + return formattedString; | |
622 | + } | |
623 | + | |
624 | + private void addPowerData(Map<String, Object> resultMap, Map<String, Object> detailMap) { | |
625 | + Integer code = (Integer) detailMap.get("code"); | |
626 | + if (code != null && code == 200) { | |
627 | + List<Map<String, Object>> list = (List<Map<String, Object>>) detailMap.get("data"); | |
628 | + Map<String, String> bmsMap = new HashMap<>(); | |
629 | + Map<String, String> pcsMap = new HashMap<>(); | |
630 | + Map<String, String> cpMap = new HashMap<>(); | |
631 | + Map<String, String> emMap = new HashMap<>(); | |
632 | + Map<String, String> pvMap = new HashMap<>(); | |
633 | + for (Map<String, Object> dataMap : list) { | |
634 | + String key = (String) dataMap.get("key"); | |
635 | + String value = String.valueOf(dataMap.get("value")); | |
636 | + if ("BMS01".equals(key)) { | |
637 | + bmsMap.put("BMS01", value); | |
638 | + } | |
639 | + if ("BMS02".equals(key)) { | |
640 | + bmsMap.put("BMS02", value); | |
641 | + } | |
642 | + if ("BMS03".equals(key)) { | |
643 | + bmsMap.put("BMS03", value); | |
644 | + } | |
645 | + if ("BMS04".equals(key)) { | |
646 | + bmsMap.put("BMS04", value); | |
647 | + } | |
648 | + if ("BMS05".equals(key)) { | |
649 | + bmsMap.put("BMS05", value); | |
650 | + } | |
651 | + if ("BMS06".equals(key)) { | |
652 | + bmsMap.put("BMS06", value); | |
653 | + } | |
654 | + if ("BMS07".equals(key)) { | |
655 | + bmsMap.put("BMS07", value); | |
656 | + } | |
657 | + if ("BMS08".equals(key)) { | |
658 | + bmsMap.put("BMS08", value); | |
659 | + } | |
660 | + if ("BMS09".equals(key)) { | |
661 | + bmsMap.put("BMS09", value); | |
662 | + } | |
663 | + if ("BMS10".equals(key)) { | |
664 | + bmsMap.put("BMS10", value); | |
665 | + } | |
666 | + if ("BMS11".equals(key)) { | |
667 | + bmsMap.put("BMS11", value); | |
668 | + } | |
669 | + if ("BMS12".equals(key)) { | |
670 | + bmsMap.put("BMS12", value); | |
671 | + } | |
672 | + if ("BMS13".equals(key)) { | |
673 | + bmsMap.put("BMS13", value); | |
674 | + } | |
675 | + if ("BMS14".equals(key)) { | |
676 | + bmsMap.put("BMS14", value); | |
677 | + } | |
678 | + if ("BMS15".equals(key)) { | |
679 | + bmsMap.put("BMS15", value); | |
680 | + } | |
681 | + if ("BMS16".equals(key)) { | |
682 | + bmsMap.put("BMS16", value); | |
683 | + } | |
684 | + if ("BMS17".equals(key)) { | |
685 | + bmsMap.put("BMS17", value); | |
686 | + } | |
687 | + if ("BMS18".equals(key)) { | |
688 | + bmsMap.put("BMS18", value); | |
689 | + } | |
690 | + if ("BMS19".equals(key)) { | |
691 | + bmsMap.put("BMS19", value); | |
692 | + } | |
693 | + if ("BMS20".equals(key)) { | |
694 | + bmsMap.put("BMS20", value); | |
695 | + } | |
696 | + if ("BMS21".equals(key)) { | |
697 | + bmsMap.put("BMS21", value); | |
698 | + } | |
699 | + if ("BMS22".equals(key)) { | |
700 | + bmsMap.put("BMS22", value); | |
701 | + } | |
702 | + if ("BMS23".equals(key)) { | |
703 | + bmsMap.put("BMS23", value); | |
704 | + } | |
705 | + if ("BMS24".equals(key)) { | |
706 | + bmsMap.put("BMS24", value); | |
707 | + } | |
708 | + if ("BMS25".equals(key)) { | |
709 | + bmsMap.put("BMS25", value); | |
710 | + } | |
711 | + if ("BMS26".equals(key)) { | |
712 | + bmsMap.put("BMS26", value); | |
713 | + } | |
714 | + if ("BMS27".equals(key)) { | |
715 | + bmsMap.put("BMS27", value); | |
716 | + } | |
717 | + if ("BMS28".equals(key)) { | |
718 | + bmsMap.put("BMS28", value); | |
719 | + } | |
720 | + if ("BMS29".equals(key)) { | |
721 | + bmsMap.put("BMS29", value); | |
722 | + } | |
723 | + if ("BMS30".equals(key)) { | |
724 | + bmsMap.put("BMS30", value); | |
725 | + } | |
726 | + if ("BMS31".equals(key)) { | |
727 | + bmsMap.put("BMS31", value); | |
728 | + } | |
729 | + if ("BMS32".equals(key)) { | |
730 | + bmsMap.put("BMS32", value); | |
731 | + } | |
732 | + if ("BMS33".equals(key)) { | |
733 | + bmsMap.put("BMS33", value); | |
734 | + } | |
735 | + if ("BMS34".equals(key)) { | |
736 | + bmsMap.put("BMS34", value); | |
737 | + } | |
738 | + if ("BMS35".equals(key)) { | |
739 | + bmsMap.put("BMS35", value); | |
740 | + } | |
741 | + if ("BMS36".equals(key)) { | |
742 | + bmsMap.put("BMS36", value); | |
743 | + } | |
744 | + | |
745 | + if ("PCS01".equals(key)) { | |
746 | + pcsMap.put("PCS01", value); | |
747 | + } | |
748 | + if ("PCS02".equals(key)) { | |
749 | + pcsMap.put("PCS02", value); | |
750 | + } | |
751 | + if ("PCS03".equals(key)) { | |
752 | + pcsMap.put("PCS03", value); | |
753 | + } | |
754 | + if ("PCS04".equals(key)) { | |
755 | + pcsMap.put("PCS04", value); | |
756 | + } | |
757 | + if ("PCS05".equals(key)) { | |
758 | + pcsMap.put("PCS05", value); | |
759 | + } | |
760 | + if ("PCS06".equals(key)) { | |
761 | + pcsMap.put("PCS06", value); | |
762 | + } | |
763 | + if ("PCS07".equals(key)) { | |
764 | + pcsMap.put("PCS07", value); | |
765 | + } | |
766 | + if ("PCS08".equals(key)) { | |
767 | + pcsMap.put("PCS08", value); | |
768 | + } | |
769 | + if ("PCS09".equals(key)) { | |
770 | + pcsMap.put("PCS09", value); | |
771 | + } | |
772 | + if ("PCS10".equals(key)) { | |
773 | + pcsMap.put("PCS10", value); | |
774 | + } | |
775 | + if ("PCS11".equals(key)) { | |
776 | + pcsMap.put("PCS11", value); | |
777 | + } | |
778 | + if ("PCS12".equals(key)) { | |
779 | + pcsMap.put("PCS12", value); | |
780 | + } | |
781 | + if ("PCS13".equals(key)) { | |
782 | + pcsMap.put("PCS13", value); | |
783 | + } | |
784 | + if ("PCS14".equals(key)) { | |
785 | + pcsMap.put("PCS14", value); | |
786 | + } | |
787 | + if ("PCS15".equals(key)) { | |
788 | + pcsMap.put("PCS15", value); | |
789 | + } | |
790 | + if ("PCS16".equals(key)) { | |
791 | + pcsMap.put("PCS16", value); | |
792 | + } | |
793 | + if ("PCS17".equals(key)) { | |
794 | + pcsMap.put("PCS17", value); | |
795 | + } | |
796 | + if ("PCS18".equals(key)) { | |
797 | + pcsMap.put("PCS18", value); | |
798 | + } | |
799 | + if ("PCS19".equals(key)) { | |
800 | + pcsMap.put("PCS19", value); | |
801 | + } | |
802 | + if ("PCS20".equals(key)) { | |
803 | + pcsMap.put("PCS20", value); | |
804 | + } | |
805 | + if ("PCS21".equals(key)) { | |
806 | + pcsMap.put("PCS21", value); | |
807 | + } | |
808 | + if ("PCS22".equals(key)) { | |
809 | + pcsMap.put("PCS22", value); | |
810 | + } | |
811 | + if ("PCS23".equals(key)) { | |
812 | + pcsMap.put("PCS23", value); | |
813 | + } | |
814 | + if ("PCS24".equals(key)) { | |
815 | + pcsMap.put("PCS24", value); | |
816 | + } | |
817 | + if ("PCS25".equals(key)) { | |
818 | + pcsMap.put("PCS25", value); | |
819 | + } | |
820 | + if ("PCS26".equals(key)) { | |
821 | + pcsMap.put("PCS26", value); | |
822 | + } | |
823 | + if ("PCS27".equals(key)) { | |
824 | + pcsMap.put("PCS27", value); | |
825 | + } | |
826 | + if ("PCS28".equals(key)) { | |
827 | + pcsMap.put("PCS28", value); | |
828 | + } | |
829 | + if ("PCS29".equals(key)) { | |
830 | + pcsMap.put("PCS29", value); | |
831 | + } | |
832 | + | |
833 | + if ("CP01".equals(key)) { | |
834 | + cpMap.put("CP01", value); | |
835 | + } | |
836 | + if ("CP02".equals(key)) { | |
837 | + cpMap.put("CP02", value); | |
838 | + } | |
839 | + if ("CP03".equals(key)) { | |
840 | + cpMap.put("CP03", value); | |
841 | + } | |
842 | + if ("CP04".equals(key)) { | |
843 | + cpMap.put("CP04", value); | |
844 | + } | |
845 | + if ("CP05".equals(key)) { | |
846 | + cpMap.put("CP05", value); | |
847 | + } | |
848 | + if ("CP06".equals(key)) { | |
849 | + cpMap.put("CP06", value); | |
850 | + } | |
851 | + if ("CP07".equals(key)) { | |
852 | + cpMap.put("CP07", value); | |
853 | + } | |
854 | + if ("CP08".equals(key)) { | |
855 | + cpMap.put("CP08", value); | |
856 | + } | |
857 | + if ("CP09".equals(key)) { | |
858 | + cpMap.put("CP09", value); | |
859 | + } | |
860 | + if ("CP10".equals(key)) { | |
861 | + cpMap.put("CP10", value); | |
862 | + } | |
863 | + if ("CP11".equals(key)) { | |
864 | + cpMap.put("CP11", value); | |
865 | + } | |
866 | + if ("CP12".equals(key)) { | |
867 | + cpMap.put("CP12", value); | |
868 | + } | |
869 | + if ("CP13".equals(key)) { | |
870 | + cpMap.put("CP13", value); | |
871 | + } | |
872 | + if ("CP14".equals(key)) { | |
873 | + cpMap.put("CP14", value); | |
874 | + } | |
875 | + if ("CP15".equals(key)) { | |
876 | + cpMap.put("CP15", value); | |
877 | + } | |
878 | + if ("CP16".equals(key)) { | |
879 | + cpMap.put("CP16", value); | |
880 | + } | |
881 | + if ("CP17".equals(key)) { | |
882 | + cpMap.put("CP17", value); | |
883 | + } | |
884 | + if ("CP18".equals(key)) { | |
885 | + cpMap.put("CP18", value); | |
886 | + } | |
887 | + if ("CP19".equals(key)) { | |
888 | + cpMap.put("CP19", value); | |
889 | + } | |
890 | + if ("CP20".equals(key)) { | |
891 | + cpMap.put("CP20", value); | |
892 | + } | |
893 | + if ("CP21".equals(key)) { | |
894 | + cpMap.put("CP21", value); | |
895 | + } | |
896 | + if ("CP22".equals(key)) { | |
897 | + cpMap.put("CP22", value); | |
898 | + } | |
899 | + if ("CP23".equals(key)) { | |
900 | + cpMap.put("CP23", value); | |
901 | + } | |
902 | + if ("CP24".equals(key)) { | |
903 | + cpMap.put("CP24", value); | |
904 | + } | |
905 | + if ("CP25".equals(key)) { | |
906 | + cpMap.put("CP25", value); | |
907 | + } | |
908 | + if ("CP26".equals(key)) { | |
909 | + cpMap.put("CP26", value); | |
910 | + } | |
911 | + if ("CP27".equals(key)) { | |
912 | + cpMap.put("CP27", value); | |
913 | + } | |
914 | + if ("CP28".equals(key)) { | |
915 | + cpMap.put("CP28", value); | |
916 | + } | |
917 | + if ("CP29".equals(key)) { | |
918 | + cpMap.put("CP29", value); | |
919 | + } | |
920 | + if ("CP30".equals(key)) { | |
921 | + cpMap.put("CP30", value); | |
922 | + } | |
923 | + | |
924 | + if ("EM01".equals(key)) { | |
925 | + emMap.put("EM01", value); | |
926 | + } | |
927 | + if ("EM02".equals(key)) { | |
928 | + emMap.put("EM02", value); | |
929 | + } | |
930 | + if ("EM03".equals(key)) { | |
931 | + emMap.put("EM03", value); | |
932 | + } | |
933 | + if ("EM04".equals(key)) { | |
934 | + emMap.put("EM04", value); | |
935 | + } | |
936 | + if ("EM05".equals(key)) { | |
937 | + emMap.put("EM05", value); | |
938 | + } | |
939 | + if ("EM06".equals(key)) { | |
940 | + emMap.put("EM06", value); | |
941 | + } | |
942 | + if ("EM07".equals(key)) { | |
943 | + emMap.put("EM07", value); | |
944 | + } | |
945 | + if ("EM08".equals(key)) { | |
946 | + emMap.put("EM08", value); | |
947 | + } | |
948 | + if ("EM09".equals(key)) { | |
949 | + emMap.put("EM09", value); | |
950 | + } | |
951 | + if ("EM10".equals(key)) { | |
952 | + emMap.put("EM10", value); | |
953 | + } | |
954 | + if ("EM11".equals(key)) { | |
955 | + emMap.put("EM11", value); | |
956 | + } | |
957 | + if ("EM12".equals(key)) { | |
958 | + emMap.put("EM12", value); | |
959 | + } | |
960 | + if ("EM13".equals(key)) { | |
961 | + emMap.put("EM13", value); | |
962 | + } | |
963 | + if ("EM14".equals(key)) { | |
964 | + emMap.put("EM14", value); | |
965 | + } | |
966 | + if ("EM15".equals(key)) { | |
967 | + emMap.put("EM15", value); | |
968 | + } | |
969 | + if ("EM16".equals(key)) { | |
970 | + emMap.put("EM16", value); | |
971 | + } | |
972 | + if ("EM17".equals(key)) { | |
973 | + emMap.put("EM17", value); | |
974 | + } | |
975 | + if ("EM18".equals(key)) { | |
976 | + emMap.put("EM18", value); | |
977 | + } | |
978 | + if ("EM19".equals(key)) { | |
979 | + emMap.put("EM19", value); | |
980 | + } | |
981 | + if ("EM20".equals(key)) { | |
982 | + emMap.put("EM20", value); | |
983 | + } | |
984 | + if ("EM21".equals(key)) { | |
985 | + emMap.put("EM21", value); | |
986 | + } | |
987 | + if ("EM22".equals(key)) { | |
988 | + emMap.put("EM22", value); | |
989 | + } | |
990 | + if ("EM23".equals(key)) { | |
991 | + emMap.put("EM23", value); | |
992 | + } | |
993 | + if ("EM24".equals(key)) { | |
994 | + emMap.put("EM24", value); | |
995 | + } | |
996 | + if ("EM25".equals(key)) { | |
997 | + emMap.put("EM25", value); | |
998 | + } | |
999 | + if ("EM26".equals(key)) { | |
1000 | + emMap.put("EM26", value); | |
1001 | + } | |
1002 | + if ("EM27".equals(key)) { | |
1003 | + emMap.put("EM27", value); | |
1004 | + } | |
1005 | + if ("EM28".equals(key)) { | |
1006 | + emMap.put("EM28", value); | |
1007 | + } | |
1008 | + if ("EM29".equals(key)) { | |
1009 | + emMap.put("EM29", value); | |
1010 | + } | |
1011 | + if ("EM30".equals(key)) { | |
1012 | + emMap.put("EM30", value); | |
1013 | + } | |
1014 | + | |
1015 | + if ("PV01".equals(key)) { | |
1016 | + pvMap.put("PV01", value); | |
1017 | + } | |
1018 | + if ("PV02".equals(key)) { | |
1019 | + pvMap.put("PV02", value); | |
1020 | + } | |
1021 | + if ("PV03".equals(key)) { | |
1022 | + pvMap.put("PV03", value); | |
1023 | + } | |
1024 | + if ("PV04".equals(key)) { | |
1025 | + pvMap.put("PV04", value); | |
1026 | + } | |
1027 | + if ("PV05".equals(key)) { | |
1028 | + pvMap.put("PV05", value); | |
1029 | + } | |
1030 | + if ("PV06".equals(key)) { | |
1031 | + pvMap.put("PV06", value); | |
1032 | + } | |
1033 | + if ("PV07".equals(key)) { | |
1034 | + pvMap.put("PV07", value); | |
1035 | + } | |
1036 | + if ("PV08".equals(key)) { | |
1037 | + pvMap.put("PV08", value); | |
1038 | + } | |
1039 | + if ("PV09".equals(key)) { | |
1040 | + pvMap.put("PV09", value); | |
1041 | + } | |
1042 | + if ("PV10".equals(key)) { | |
1043 | + pvMap.put("PV10", value); | |
1044 | + } | |
1045 | + if ("PV11".equals(key)) { | |
1046 | + pvMap.put("PV11", value); | |
1047 | + } | |
1048 | + if ("PV12".equals(key)) { | |
1049 | + pvMap.put("PV12", value); | |
1050 | + } | |
1051 | + if ("PV13".equals(key)) { | |
1052 | + pvMap.put("PV13", value); | |
1053 | + } | |
1054 | + if ("PV14".equals(key)) { | |
1055 | + pvMap.put("PV14", value); | |
1056 | + } | |
1057 | + if ("PV15".equals(key)) { | |
1058 | + pvMap.put("PV15", value); | |
1059 | + } | |
1060 | + if ("PV16".equals(key)) { | |
1061 | + pvMap.put("PV16", value); | |
1062 | + } | |
1063 | + if ("PV17".equals(key)) { | |
1064 | + pvMap.put("PV17", value); | |
1065 | + } | |
1066 | + if ("PV18".equals(key)) { | |
1067 | + pvMap.put("PV18", value); | |
1068 | + } | |
1069 | + if ("PV19".equals(key)) { | |
1070 | + pvMap.put("PV19", value); | |
1071 | + } | |
1072 | + if ("PV20".equals(key)) { | |
1073 | + pvMap.put("PV20", value); | |
1074 | + } | |
1075 | + if ("PV21".equals(key)) { | |
1076 | + pvMap.put("PV21", value); | |
1077 | + } | |
1078 | + if ("PV22".equals(key)) { | |
1079 | + pvMap.put("PV22", value); | |
1080 | + } | |
1081 | + if ("PV23".equals(key)) { | |
1082 | + pvMap.put("PV23", value); | |
1083 | + } | |
1084 | + if ("PV24".equals(key)) { | |
1085 | + pvMap.put("PV24", value); | |
1086 | + } | |
1087 | + if ("PV25".equals(key)) { | |
1088 | + pvMap.put("PV25", value); | |
1089 | + } | |
1090 | + if ("PV26".equals(key)) { | |
1091 | + pvMap.put("PV26", value); | |
1092 | + } | |
1093 | + if ("PV27".equals(key)) { | |
1094 | + pvMap.put("PV27", value); | |
1095 | + } | |
1096 | + if ("PV28".equals(key)) { | |
1097 | + pvMap.put("PV28", value); | |
1098 | + } | |
1099 | + if ("PV29".equals(key)) { | |
1100 | + pvMap.put("PV29", value); | |
1101 | + } | |
1102 | + if ("PV30".equals(key)) { | |
1103 | + pvMap.put("PV30", value); | |
1104 | + | |
1105 | + } | |
1106 | + } | |
1107 | + | |
1108 | + resultMap.put("BMS", bmsMap); | |
1109 | + resultMap.put("PCS", pcsMap); | |
1110 | + resultMap.put("CP", cpMap); | |
1111 | + resultMap.put("PV", pvMap); | |
1112 | + resultMap.put("EM", emMap); | |
1113 | + } | |
1114 | + } | |
1115 | + | |
1116 | + public void deviceCount(Map<String, Object> resultMap) { | |
1117 | + Map<String, String> header = new HashMap<>(); | |
1118 | + header.put("X-Token", TOKEN); | |
1119 | + String jsonStr = HttpClientUtils.doGetRequest(PANEL_URL, header, null); | |
1120 | + if (StringUtils.isBlank(jsonStr)) { | |
1121 | + return; | |
1122 | + } | |
1123 | + Map<String, Object> result = JSONObject.parseObject(jsonStr); | |
1124 | + Map<String, Object> deviceMap = new HashMap<>(); | |
1125 | + if (MapUtils.isNotEmpty(result)) { | |
1126 | + Integer code = (Integer) result.get("code"); | |
1127 | + if (code != null && code == 200) { | |
1128 | + JSONObject data = (JSONObject) result.get("data"); | |
1129 | + Map<String, Object> deviceInfo = (Map<String, Object>) data.get("deviceInfo"); | |
1130 | + Integer total = (Integer) deviceInfo.get("total"); | |
1131 | + log.info("====设备总数===[{}]", total); | |
1132 | + deviceMap.put("deviceTotal", total); | |
1133 | + List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("deviceLinkStatusInfo"); | |
1134 | + for (Map<String, Object> map : list) { | |
1135 | + String linkStatus = (String) map.get("linkStatus"); | |
1136 | + Integer deviceTotal = (Integer) map.get("deviceTotal"); | |
1137 | + if ("inactive".equals(linkStatus)) { | |
1138 | + log.info("====在线设备数===[{}]", deviceTotal); | |
1139 | + deviceMap.put("inactiveCount", deviceTotal); | |
1140 | + } | |
1141 | + if ("offline".equals(linkStatus)) { | |
1142 | + log.info("====离线设备数===[{}]", deviceTotal); | |
1143 | + deviceMap.put("offlineCount", deviceTotal); | |
1144 | + } | |
1145 | + } | |
1146 | + Map<String, Object> alarmInfo = (Map<String, Object>) data.get("alarmInfo"); | |
1147 | + // 总报警 | |
1148 | + Integer ararmTotalCount = (Integer) alarmInfo.get("total"); | |
1149 | + // 今日新增报警 | |
1150 | + Integer ararmTodayCount = (Integer) alarmInfo.get("todayAdd"); | |
1151 | + log.info("====变量报警===[{}]", ararmTodayCount); | |
1152 | + deviceMap.put("ararmCount", ararmTodayCount); | |
1153 | + } | |
1154 | + } | |
1155 | + resultMap.put("deviceInfo", deviceMap); | |
1156 | + log.info("========resultMap=={}", resultMap); | |
1157 | + } | |
1158 | + | |
1159 | + @Test | |
1160 | + public void test1() { | |
1161 | + Map<String, Object> resultMap = new HashMap<>(); | |
1162 | + deviceCount(resultMap); | |
1163 | + } | |
1164 | + | |
1165 | + @Test | |
1166 | + public void test2() { | |
1167 | + PowerModel powerModel = new PowerModel(); | |
1168 | + getIndex(powerModel); | |
1169 | + } | |
1170 | + | |
1171 | + @Test | |
1172 | + public void testDateDetail() { | |
1173 | +// getDateMap("BMS_MAP"); | |
1174 | +// getDateMap("PCS_MAP"); | |
1175 | +// getDateMap("PV_MAP"); | |
1176 | +// getDateMap("CP_MAP"); | |
1177 | +// getDateMap("EM_MAP"); | |
1178 | +// getDateMap("INDEX_MAP"); | |
1179 | + } | |
1180 | +} | ... | ... |
1 | +package com.qgutech.service; | |
2 | + | |
3 | +import com.qgutech.mapper.UserMapper; | |
4 | +import com.qgutech.model.Page; | |
5 | +import com.qgutech.model.User; | |
6 | +import org.springframework.beans.factory.annotation.Value; | |
7 | +import org.springframework.stereotype.Service; | |
8 | +import org.springframework.util.DigestUtils; | |
9 | +import org.springframework.util.ObjectUtils; | |
10 | +import org.springframework.util.StringUtils; | |
11 | + | |
12 | +import javax.annotation.Resource; | |
13 | +import java.nio.charset.StandardCharsets; | |
14 | +import java.util.Date; | |
15 | +import java.util.List; | |
16 | + | |
17 | +/** | |
18 | + * @author xxx | |
19 | + * @date 2024/12/17 12:11 | |
20 | + * @description | |
21 | + */ | |
22 | +@Service | |
23 | +public class UserService { | |
24 | + @Value("${power.init.password}") | |
25 | + private String INIT_PASSWORD; | |
26 | + @Resource | |
27 | + private UserMapper userMapper; | |
28 | + | |
29 | + public User getUserById(String userId) { | |
30 | + return userMapper.getUserById(userId); | |
31 | + } | |
32 | + | |
33 | + public User getUserByMobile(String mobile) { | |
34 | + return userMapper.getUserByMobile(mobile); | |
35 | + } | |
36 | + | |
37 | + public void register(User user) { | |
38 | + //根据用户名查询数据库是否存在该用户名 | |
39 | + User userDB = userMapper.findByLoginName(user.getUserName()); | |
40 | + //判断用户是否存在 | |
41 | + if (!ObjectUtils.isEmpty(userDB)) {//如果userDB不为空 | |
42 | + throw new RuntimeException("用户名已存在"); | |
43 | + } | |
44 | +// 进行注册之前给明文加密 | |
45 | + String passwordSecret = DigestUtils.md5DigestAsHex(user.getPassword().getBytes(StandardCharsets.UTF_8)); | |
46 | + user.setPassword(passwordSecret); | |
47 | + userMapper.save(user); | |
48 | + } | |
49 | + | |
50 | + public User login(String loginName, String password) { | |
51 | + //根据用户输入的用户名查询数据是否存在 | |
52 | + User userDB = userMapper.findByLoginName(loginName); | |
53 | + //判断对象是否存在 | |
54 | + if (ObjectUtils.isEmpty(userDB)) { | |
55 | + throw new RuntimeException("用户名输入错误"); | |
56 | + } | |
57 | + if (!userDB.getPassword().equals(DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8)))) { | |
58 | + throw new RuntimeException("密码输入错误"); | |
59 | + } | |
60 | + return userDB; | |
61 | + } | |
62 | + | |
63 | + public void updateUser(User user) { | |
64 | + user.setLastModifyTime(new Date()); | |
65 | + userMapper.updateUser(user); | |
66 | + } | |
67 | + | |
68 | + public void saveUser(User user) { | |
69 | + String password = user.getPassword(); | |
70 | + if (StringUtils.isEmpty(password)) { | |
71 | + password = INIT_PASSWORD; | |
72 | + } | |
73 | + String passwordSecret = DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8)); | |
74 | + user.setPassword(passwordSecret); | |
75 | + user.setCreateTime(new Date()); | |
76 | + user.setLastModifyTime(new Date()); | |
77 | + user.setCreateBy("SYSTEM"); | |
78 | + user.setLastModifyBy("SYSTEM"); | |
79 | + userMapper.save(user); | |
80 | + } | |
81 | + | |
82 | + public List<User> getUserList(String searchName, Page<User> page) { | |
83 | + List<User> userList = userMapper.getUserList(searchName, page); | |
84 | + Integer total = userMapper.getTotal(searchName); | |
85 | + page.setTotal(total); | |
86 | + Integer pages = (int) Math.ceil((double) total / page.getPageSize()); | |
87 | + page.setPages(pages); | |
88 | + return userList; | |
89 | + } | |
90 | + | |
91 | + public void deleteUserById(String userId) { | |
92 | + userMapper.deleteUser(userId); | |
93 | + } | |
94 | + | |
95 | + public Boolean isExistMobile(String mobile, String loginName) { | |
96 | + User user = userMapper.getUserExcludeLoginName(mobile, loginName); | |
97 | + if (user == null) { | |
98 | + return false; | |
99 | + } | |
100 | + return true; | |
101 | + } | |
102 | + | |
103 | + public void updatePassword(String userId, String password) { | |
104 | + userMapper.updatePassword(userId, password); | |
105 | + } | |
106 | +} | ... | ... |
src/main/java/com/qgutech/util/AESUtil.java
0 → 100644
1 | +package com.qgutech.util; | |
2 | + | |
3 | +import org.apache.commons.codec.DecoderException; | |
4 | +import org.apache.commons.codec.binary.Hex; | |
5 | + | |
6 | +import javax.crypto.*; | |
7 | +import javax.crypto.spec.IvParameterSpec; | |
8 | +import javax.crypto.spec.SecretKeySpec; | |
9 | +import java.io.UnsupportedEncodingException; | |
10 | +import java.security.NoSuchAlgorithmException; | |
11 | + | |
12 | +/** | |
13 | + * @author xxx | |
14 | + * @date 2024/12/25 11:31 | |
15 | + * @description | |
16 | + */ | |
17 | +public class AESUtil { | |
18 | + /** | |
19 | + * 偏移量 | |
20 | + * | |
21 | + * 说明:偏移量字符串必须是16位 当模式是CBC的时候必须设置偏移量 | |
22 | + * 此处值与前端偏移量值保持一致 | |
23 | + */ | |
24 | + private static String iv = "37fa77f6a3b0462d"; | |
25 | + private static String uniqueKey = "1234567890123456"; | |
26 | + | |
27 | + /** | |
28 | + * 加密算法 | |
29 | + */ | |
30 | + private static String Algorithm = "AES"; | |
31 | + | |
32 | + /** | |
33 | + * 算法/模式/补码方式 | |
34 | + */ | |
35 | + private static String AlgorithmProvider = "AES/CBC/PKCS5Padding"; | |
36 | + | |
37 | + /** | |
38 | + * 加密 | |
39 | + * | |
40 | + * @param src 加密内容 | |
41 | + * @return | |
42 | + * @throws Exception | |
43 | + */ | |
44 | + public static String encrypt(String src) throws Exception { | |
45 | + byte[] key = uniqueKey.getBytes(); | |
46 | + SecretKey secretKey = new SecretKeySpec(key, Algorithm); | |
47 | + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8")); | |
48 | + Cipher cipher = Cipher.getInstance(AlgorithmProvider); | |
49 | + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec); | |
50 | + byte[] cipherBytes = cipher.doFinal(src.getBytes("UTF-8")); | |
51 | + return byteToHexString(cipherBytes); | |
52 | + } | |
53 | + | |
54 | + /** | |
55 | + * 解密 | |
56 | + * | |
57 | + * @param enc 加密内容 | |
58 | + * @return | |
59 | + * @throws Exception | |
60 | + */ | |
61 | + public static String decrypt(String enc) throws Exception { | |
62 | + byte[] key = uniqueKey.getBytes(); | |
63 | + SecretKey secretKey = new SecretKeySpec(key, Algorithm); | |
64 | + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8")); | |
65 | + Cipher cipher = Cipher.getInstance(AlgorithmProvider); | |
66 | + cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec); | |
67 | + byte[] hexBytes = hexStringToBytes(enc); | |
68 | + byte[] plainBytes = cipher.doFinal(hexBytes); | |
69 | + return new String(plainBytes, "UTF-8"); | |
70 | + } | |
71 | + | |
72 | + /** | |
73 | + * 将byte数组转换为16进制字符串 | |
74 | + * | |
75 | + * @param src | |
76 | + * @return | |
77 | + */ | |
78 | + private static String byteToHexString(byte[] src) { | |
79 | + return Hex.encodeHexString(src); | |
80 | + } | |
81 | + | |
82 | + /** | |
83 | + * 将16进制字符串转换为byte数组 | |
84 | + * | |
85 | + * @param hexString | |
86 | + * @return | |
87 | + */ | |
88 | + private static byte[] hexStringToBytes(String hexString) throws DecoderException { | |
89 | + return Hex.decodeHex(hexString); | |
90 | + } | |
91 | + | |
92 | + /** | |
93 | + * AES加密、解密测试方法 | |
94 | + * | |
95 | + * @param args | |
96 | + */ | |
97 | + public static void main(String[] args) { | |
98 | + try { | |
99 | + // 唯一key作为密钥 | |
100 | + // 加密前数据,此处数据与前端数据一致(加密内容包含有时间戳),请注意查看前端加密前数据 | |
101 | + String src = "hczd"; | |
102 | + System.out.println("密钥:" + uniqueKey); | |
103 | + System.out.println("原字符串:" + src); | |
104 | + // 加密 | |
105 | + String encrypt = encrypt(src); | |
106 | + System.out.println("加密:" + encrypt); | |
107 | + // 解密 | |
108 | + String decrypt = decrypt(encrypt); | |
109 | + System.out.println("解密:" + decrypt); | |
110 | + } catch (Exception e) { | |
111 | + e.printStackTrace(); | |
112 | + } | |
113 | + } | |
114 | +} | ... | ... |
1 | +// | |
2 | +// Source code recreated from a .class file by IntelliJ IDEA | |
3 | +// (powered by Fernflower decompiler) | |
4 | +// | |
5 | + | |
6 | +package com.qgutech.util; | |
7 | + | |
8 | +import javax.servlet.http.Cookie; | |
9 | +import javax.servlet.http.HttpServletRequest; | |
10 | +import javax.servlet.http.HttpServletResponse; | |
11 | +import org.apache.commons.lang3.StringUtils; | |
12 | + | |
13 | +public class CookieUtil { | |
14 | + private static final int MINUTE_SECONDS = 60; | |
15 | + | |
16 | + public CookieUtil() { | |
17 | + } | |
18 | + | |
19 | + public static void setCookie(HttpServletResponse response, String name, String value) { | |
20 | + setCookie(response, name, value, "/", (String)null); | |
21 | + } | |
22 | + | |
23 | + public static void setCookie(HttpServletResponse response, String name, String value, String path) { | |
24 | + setCookie(response, name, value, path, (String)null); | |
25 | + } | |
26 | + | |
27 | + public static void setCookie(HttpServletResponse response, String name, String value, String path, String age) { | |
28 | + setCookie(response, name, value, path, age, (String)null); | |
29 | + } | |
30 | + | |
31 | + public static void setCookie(HttpServletResponse response, String name, String value, String path, String age, String domain) { | |
32 | + Cookie cookie = new Cookie(name, value); | |
33 | + cookie.setSecure(false); | |
34 | + cookie.setPath(path); | |
35 | + if (StringUtils.isNotEmpty(domain)) { | |
36 | + cookie.setDomain(domain); | |
37 | + } | |
38 | + | |
39 | + int ageValue = getAgeIntValue(age); | |
40 | + if (ageValue >= 0) { | |
41 | + cookie.setMaxAge(ageValue); | |
42 | + } | |
43 | + | |
44 | + response.addCookie(cookie); | |
45 | + } | |
46 | + | |
47 | + public static void setHttpsCookie(HttpServletResponse response, String name, String value) { | |
48 | + setHttpsCookie(response, name, value, "/", (String)null); | |
49 | + } | |
50 | + | |
51 | + public static void setHttpsCookie(HttpServletResponse response, String name, String value, String path) { | |
52 | + setHttpsCookie(response, name, value, path, (String)null); | |
53 | + } | |
54 | + | |
55 | + public static void setHttpsCookie(HttpServletResponse response, String name, String value, String path, String age) { | |
56 | + setHttpsCookie(response, name, value, path, age, (String)null); | |
57 | + } | |
58 | + | |
59 | + public static void setHttpsCookie(HttpServletResponse response, String name, String value, String path, String age, String domain) { | |
60 | + Cookie cookie = new Cookie(name, value); | |
61 | + cookie.setSecure(true); | |
62 | + cookie.setPath(path); | |
63 | + if (StringUtils.isNotEmpty(domain)) { | |
64 | + cookie.setDomain(domain); | |
65 | + } | |
66 | + | |
67 | + int ageValue = getAgeIntValue(age); | |
68 | + if (ageValue >= 0) { | |
69 | + cookie.setMaxAge(ageValue); | |
70 | + } | |
71 | + | |
72 | + response.addCookie(cookie); | |
73 | + } | |
74 | + | |
75 | + private static int getAgeIntValue(String age) { | |
76 | + try { | |
77 | + return Integer.valueOf(age) * 60; | |
78 | + } catch (Exception var2) { | |
79 | + return -1; | |
80 | + } | |
81 | + } | |
82 | + | |
83 | + public static Cookie getCookie(HttpServletRequest request, String name) { | |
84 | + Cookie[] cookies = request.getCookies(); | |
85 | + Cookie returnCookie = null; | |
86 | + if (cookies == null) { | |
87 | + return returnCookie; | |
88 | + } else { | |
89 | + for(int i = 0; i < cookies.length; ++i) { | |
90 | + Cookie thisCookie = cookies[i]; | |
91 | + if (thisCookie.getName().equals(name)) { | |
92 | + returnCookie = thisCookie; | |
93 | + break; | |
94 | + } | |
95 | + } | |
96 | + | |
97 | + return returnCookie; | |
98 | + } | |
99 | + } | |
100 | + | |
101 | + public static String getCookieValue(HttpServletRequest request, String name) { | |
102 | + Cookie cookie = getCookie(request, name); | |
103 | + return cookie == null ? null : cookie.getValue(); | |
104 | + } | |
105 | + | |
106 | + public static String getAllCookieNameAndValue(HttpServletRequest request) { | |
107 | + Cookie[] cookies = request.getCookies(); | |
108 | + StringBuffer cs = new StringBuffer(); | |
109 | + | |
110 | + for(int i = 0; i < cookies.length; ++i) { | |
111 | + cs.append(cookies[i].getName()).append("=").append(cookies[i].getValue()).append(";"); | |
112 | + } | |
113 | + | |
114 | + return cs.toString(); | |
115 | + } | |
116 | + | |
117 | + public static void deleteCookie(HttpServletResponse response, Cookie cookie, String path) { | |
118 | + if (cookie != null) { | |
119 | + cookie.setMaxAge(0); | |
120 | + cookie.setPath(path); | |
121 | + response.addCookie(cookie); | |
122 | + } | |
123 | + | |
124 | + } | |
125 | + | |
126 | + public static void deleteCookie(HttpServletResponse response, Cookie cookie) { | |
127 | + deleteCookie(response, cookie, "/"); | |
128 | + } | |
129 | + | |
130 | + public static String getAppURL(HttpServletRequest request) { | |
131 | + StringBuffer url = new StringBuffer(); | |
132 | + int port = request.getServerPort(); | |
133 | + if (port < 0) { | |
134 | + port = 80; | |
135 | + } | |
136 | + | |
137 | + String scheme = request.getScheme(); | |
138 | + url.append(scheme); | |
139 | + url.append("://"); | |
140 | + url.append(request.getServerName()); | |
141 | + if (scheme.equals("http") && port != 80 || scheme.equals("https") && port != 443) { | |
142 | + url.append(':'); | |
143 | + url.append(port); | |
144 | + } | |
145 | + | |
146 | + url.append(request.getContextPath()); | |
147 | + return url.toString(); | |
148 | + } | |
149 | + | |
150 | + public static void addCookie(HttpServletResponse response, String name, String value, String path, String age, String domain, boolean isSecure, boolean isHttpOnly) { | |
151 | + int maxAge = getAgeIntValue(age); | |
152 | + addCookieByHeader(response, name, value, maxAge, path, domain, isSecure, isHttpOnly); | |
153 | + } | |
154 | + | |
155 | + private static void addCookieByHeader(HttpServletResponse response, String name, String value, int maxAge, String path, String domain, boolean isSecure, boolean isHttpOnly) { | |
156 | + StringBuilder buffer = new StringBuilder(); | |
157 | + buffer.append(name).append("=").append(value).append(";"); | |
158 | + if (maxAge == 0) { | |
159 | + buffer.append("Expires=Thu Jan 01 08:00:00 CST 1970;"); | |
160 | + } else if (maxAge > 0) { | |
161 | + buffer.append("Max-Age=").append(maxAge).append(";"); | |
162 | + } | |
163 | + | |
164 | + if (domain != null) { | |
165 | + buffer.append("domain=").append(domain).append(";"); | |
166 | + } | |
167 | + | |
168 | + if (path != null) { | |
169 | + buffer.append("path=").append(path).append(";"); | |
170 | + } | |
171 | + | |
172 | + if (isSecure) { | |
173 | + buffer.append("secure;"); | |
174 | + } | |
175 | + | |
176 | + if (isHttpOnly) { | |
177 | + buffer.append("HTTPOnly;"); | |
178 | + } | |
179 | + | |
180 | + response.addHeader("Set-Cookie", buffer.toString()); | |
181 | + } | |
182 | + | |
183 | + public static String getCookieDomain(HttpServletRequest request) { | |
184 | + return request.getServerName(); | |
185 | + } | |
186 | +} | |
187 | + | ... | ... |
1 | +package com.qgutech.util; | |
2 | + | |
3 | +import lombok.extern.slf4j.Slf4j; | |
4 | +import org.apache.commons.collections4.MapUtils; | |
5 | +import org.apache.commons.lang3.StringUtils; | |
6 | +import org.apache.http.*; | |
7 | +import org.apache.http.client.config.RequestConfig; | |
8 | +import org.apache.http.client.entity.UrlEncodedFormEntity; | |
9 | +import org.apache.http.client.methods.CloseableHttpResponse; | |
10 | +import org.apache.http.client.methods.HttpGet; | |
11 | +import org.apache.http.client.methods.HttpPost; | |
12 | +import org.apache.http.impl.client.CloseableHttpClient; | |
13 | +import org.apache.http.message.BasicNameValuePair; | |
14 | +import org.apache.http.util.EntityUtils; | |
15 | + | |
16 | +import java.io.IOException; | |
17 | +import java.io.UnsupportedEncodingException; | |
18 | +import java.net.URLEncoder; | |
19 | +import java.util.ArrayList; | |
20 | +import java.util.List; | |
21 | +import java.util.Map; | |
22 | + | |
23 | +/** | |
24 | + * http请求工具类 | |
25 | + */ | |
26 | +@Slf4j | |
27 | +public class HttpClientUtils { | |
28 | + | |
29 | + | |
30 | + /** | |
31 | + * 发送post请求 | |
32 | + * | |
33 | + * @return | |
34 | + */ | |
35 | + public static String doPostRequest(String url, Map<String, String> header, Map<String, String> params, HttpEntity httpEntity) { | |
36 | + String resultStr = ""; | |
37 | + if (StringUtils.isEmpty(url)) { | |
38 | + return resultStr; | |
39 | + } | |
40 | + CloseableHttpClient httpClient = null; | |
41 | + CloseableHttpResponse httpResponse = null; | |
42 | + try { | |
43 | + httpClient = SSLClientCustom.getHttpClinet(); | |
44 | + HttpPost httpPost = new HttpPost(url); | |
45 | + // 请求头header信息 | |
46 | + if (MapUtils.isNotEmpty(header)) { | |
47 | + for (Map.Entry<String, String> stringStringEntry : header.entrySet()) { | |
48 | + httpPost.setHeader(stringStringEntry.getKey(), stringStringEntry.getValue()); | |
49 | + } | |
50 | + } | |
51 | + // 请求参数信息 | |
52 | + if (MapUtils.isNotEmpty(params)) { | |
53 | + List<NameValuePair> paramList = new ArrayList<NameValuePair>(); | |
54 | + for (Map.Entry<String, String> stringStringEntry : params.entrySet()) { | |
55 | + paramList.add(new BasicNameValuePair(stringStringEntry.getKey(), stringStringEntry.getValue())); | |
56 | + } | |
57 | + UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(paramList, Consts.UTF_8); | |
58 | + httpPost.setEntity(urlEncodedFormEntity); | |
59 | + } | |
60 | + //实体设置 | |
61 | + if (httpEntity != null) { | |
62 | + httpPost.setEntity(httpEntity); | |
63 | + } | |
64 | + //发起请求 | |
65 | + httpResponse = httpClient.execute(httpPost); | |
66 | + if (null != httpResponse && null != httpResponse.getStatusLine()) { | |
67 | + int statusCode = httpResponse.getStatusLine().getStatusCode(); | |
68 | + if (statusCode == HttpStatus.SC_OK) { | |
69 | + HttpEntity httpResponseEntity = httpResponse.getEntity(); | |
70 | + resultStr = EntityUtils.toString(httpResponseEntity); | |
71 | + } else { | |
72 | + StringBuffer stringBuffer = new StringBuffer(); | |
73 | + HeaderIterator headerIterator = httpResponse.headerIterator(); | |
74 | + while (headerIterator.hasNext()) { | |
75 | + stringBuffer.append("\t" + headerIterator.next()); | |
76 | + } | |
77 | + log.info("异常信息:请求地址:{},响应状态和结果:{}", url, statusCode + ";" + stringBuffer); | |
78 | + } | |
79 | + } else { | |
80 | + log.error("请求异常,未获取正常相应,请求地址:{}", url); | |
81 | + } | |
82 | + } catch (Exception e) { | |
83 | + e.printStackTrace(); | |
84 | + } finally { | |
85 | + HttpClientUtils.closeConnection(httpClient, httpResponse); | |
86 | + } | |
87 | + return resultStr; | |
88 | + } | |
89 | + | |
90 | + public static String doGetRequest(String url, Map<String, String> header, Map<String, String> params) { | |
91 | + String resultStr = ""; | |
92 | + if (StringUtils.isEmpty(url)) { | |
93 | + return resultStr; | |
94 | + } | |
95 | + CloseableHttpClient httpClient = null; | |
96 | + CloseableHttpResponse httpResponse = null; | |
97 | + try { | |
98 | + httpClient = SSLClientCustom.getHttpClinet(); | |
99 | + //请求参数信息 | |
100 | + if (MapUtils.isNotEmpty(params)) { | |
101 | + url = url + buildUrl(params); | |
102 | + } | |
103 | + HttpGet httpGet = new HttpGet(url); | |
104 | + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000) //连接超时 | |
105 | + .setConnectionRequestTimeout(30000) //请求超时 | |
106 | + .setSocketTimeout(30000) //套接字连接超时 | |
107 | + .setRedirectsEnabled(true).build(); //允许重定向 | |
108 | + httpGet.setConfig(requestConfig); | |
109 | + if (MapUtils.isNotEmpty(header)) { | |
110 | + for (Map.Entry<String, String> stringStringEntry : header.entrySet()) { | |
111 | + httpGet.setHeader(stringStringEntry.getKey(), stringStringEntry.getValue()); | |
112 | + } | |
113 | + } | |
114 | + //发起请求 | |
115 | + httpResponse = httpClient.execute(httpGet); | |
116 | + int statusCode = httpResponse.getStatusLine().getStatusCode(); | |
117 | + if (statusCode == HttpStatus.SC_OK) { | |
118 | + resultStr = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); | |
119 | + } else { | |
120 | + StringBuffer stringBuffer = new StringBuffer(); | |
121 | + HeaderIterator headerIterator = httpResponse.headerIterator(); | |
122 | + while (headerIterator.hasNext()) { | |
123 | + stringBuffer.append("\t" + headerIterator.next()); | |
124 | + } | |
125 | + } | |
126 | + | |
127 | + } catch (Exception e) { | |
128 | + e.printStackTrace(); | |
129 | + } finally { | |
130 | + HttpClientUtils.closeConnection(httpClient, httpResponse); | |
131 | + } | |
132 | + return resultStr; | |
133 | + } | |
134 | + | |
135 | + /** | |
136 | + * 关掉连接释放资源 | |
137 | + */ | |
138 | + private static void closeConnection(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) { | |
139 | + if (httpClient != null) { | |
140 | + try { | |
141 | + httpClient.close(); | |
142 | + } catch (IOException e) { | |
143 | + e.printStackTrace(); | |
144 | + } | |
145 | + } | |
146 | + if (httpResponse != null) { | |
147 | + try { | |
148 | + httpResponse.close(); | |
149 | + } catch (IOException e) { | |
150 | + e.printStackTrace(); | |
151 | + } | |
152 | + } | |
153 | + | |
154 | + } | |
155 | + | |
156 | + /** | |
157 | + * 构造get请求的参数 | |
158 | + * | |
159 | + * @return | |
160 | + */ | |
161 | + private static String buildUrl(Map<String, String> map) { | |
162 | + if (MapUtils.isEmpty(map)) { | |
163 | + return ""; | |
164 | + } | |
165 | + StringBuffer stringBuffer = new StringBuffer("?"); | |
166 | + for (Map.Entry<String, String> stringStringEntry : map.entrySet()) { | |
167 | + try { | |
168 | + stringBuffer.append(URLEncoder.encode(stringStringEntry.getKey(), "UTF-8")).append("="); | |
169 | + stringBuffer.append(URLEncoder.encode(stringStringEntry.getValue(), "UTF-8")).append("&"); | |
170 | + } catch (UnsupportedEncodingException e) { | |
171 | + e.printStackTrace(); | |
172 | + } | |
173 | + } | |
174 | + String result = stringBuffer.toString(); | |
175 | + if (StringUtils.isNotEmpty(result)) { | |
176 | + result = result.substring(0, result.length() - 1); //去掉结尾的&连接符 | |
177 | + } | |
178 | + return result; | |
179 | + } | |
180 | + | |
181 | +} | ... | ... |
1 | +package com.qgutech.util; | |
2 | + | |
3 | +import javax.servlet.http.Cookie; | |
4 | +import javax.servlet.http.HttpServletRequest; | |
5 | +import javax.servlet.http.HttpServletResponse; | |
6 | +import java.util.HashSet; | |
7 | +import java.util.Set; | |
8 | + | |
9 | +/** | |
10 | + * Cookie工具类,扩展了httpOnly属性 | |
11 | + * | |
12 | + * @author ChenYunfei@HF | |
13 | + * @since 2016/9/13 | |
14 | + */ | |
15 | +public class LoginCookieUtil { | |
16 | + | |
17 | + private static final int MINUTE_SECONDS = 60; | |
18 | + | |
19 | + private static Set<String> httpOnlyCookieNameSet = new HashSet<String>(){{ | |
20 | + add("JSESSIONID"); | |
21 | + //add("oms_eln_session_id"); | |
22 | + //add("LOGIN_SOURCE"); | |
23 | + } | |
24 | + }; | |
25 | + | |
26 | + public static void addCookie(HttpServletResponse response, String name, String value, | |
27 | + String path, String age, String domain, boolean isSecure, boolean isHttpOnly) { | |
28 | + int maxAge = getAgeIntValue(age); | |
29 | + setHttpOnly(response,name,value,maxAge,path,domain,isSecure,isHttpOnly); | |
30 | + } | |
31 | + | |
32 | + | |
33 | + public static void setCookieHttpOnly(HttpServletResponse response, HttpServletRequest request, String name, boolean isHttpOnly) { | |
34 | + Cookie cookie = CookieUtil.getCookie(request, name); | |
35 | + if (cookie == null) { | |
36 | + return; | |
37 | + } | |
38 | + | |
39 | + setHttpOnly(response, cookie, isHttpOnly); | |
40 | + } | |
41 | + | |
42 | + public static void setAllCookieHttpOnly(HttpServletRequest request, HttpServletResponse response, boolean isHttpOnly) { | |
43 | + Cookie[] cookies = request.getCookies(); | |
44 | + if(cookies == null){ | |
45 | + return; | |
46 | + } | |
47 | + | |
48 | + String path = request.getContextPath(); | |
49 | + for (Cookie cookie : cookies) { | |
50 | + if(cookie == null){ | |
51 | + continue; | |
52 | + } | |
53 | + | |
54 | + if(httpOnlyCookieNameSet.contains(cookie.getName())){ | |
55 | + setHttpOnly(response, cookie, path ,true); | |
56 | + } | |
57 | + } | |
58 | + } | |
59 | + | |
60 | + private static void setHttpOnly(HttpServletResponse response, Cookie cookie, boolean isHttpOnly) { | |
61 | + setHttpOnly(response, cookie.getName(), cookie.getValue(), cookie.getMaxAge(), cookie.getPath(), cookie.getDomain(), cookie.getSecure(), isHttpOnly); | |
62 | + } | |
63 | + | |
64 | + private static void setHttpOnly(HttpServletResponse response, Cookie cookie, String path, boolean isHttpOnly) { | |
65 | + setHttpOnly(response, cookie.getName(), cookie.getValue(), cookie.getMaxAge(), path, cookie.getDomain(), cookie.getSecure(), isHttpOnly); | |
66 | + } | |
67 | + | |
68 | + private static void setHttpOnly(HttpServletResponse response, String name, String value, int maxAge, String path, String domain, boolean isSecure, boolean isHttpOnly) { | |
69 | + | |
70 | + StringBuilder buffer = new StringBuilder(); | |
71 | + | |
72 | + buffer.append(name).append("=").append(value).append(";"); | |
73 | + | |
74 | + if (maxAge == 0) { | |
75 | + buffer.append("Expires=Thu Jan 01 08:00:00 CST 1970;"); | |
76 | + } else if (maxAge > 0) { | |
77 | + buffer.append("Max-Age=").append(maxAge).append(";"); | |
78 | + } | |
79 | + | |
80 | + if (domain != null) { | |
81 | + buffer.append("domain=").append(domain).append(";"); | |
82 | + } | |
83 | + | |
84 | + if (path != null) { | |
85 | + buffer.append("path=").append(path).append(";"); | |
86 | + } | |
87 | + | |
88 | + if (isSecure) { | |
89 | + buffer.append("secure;"); | |
90 | + } | |
91 | + | |
92 | + if (isHttpOnly) { | |
93 | + buffer.append("HTTPOnly;"); | |
94 | + } | |
95 | + | |
96 | + response.addHeader("Set-Cookie", buffer.toString()); | |
97 | + } | |
98 | + | |
99 | + private static int getAgeIntValue(String age) { | |
100 | + try { | |
101 | + return Integer.valueOf(age) * MINUTE_SECONDS; | |
102 | + } catch (Exception e) { | |
103 | + return -1; | |
104 | + } | |
105 | + } | |
106 | +} | ... | ... |
1 | +package com.qgutech.util; | |
2 | + | |
3 | +import lombok.extern.slf4j.Slf4j; | |
4 | + | |
5 | +import javax.imageio.ImageIO; | |
6 | +import java.awt.*; | |
7 | +import java.awt.geom.AffineTransform; | |
8 | +import java.awt.image.BufferedImage; | |
9 | +import java.io.File; | |
10 | +import java.io.FileOutputStream; | |
11 | +import java.io.IOException; | |
12 | +import java.io.OutputStream; | |
13 | +import java.security.SecureRandom; | |
14 | +import java.util.Arrays; | |
15 | + | |
16 | +/** | |
17 | + * @author xxx | |
18 | + * @date 2024/12/17 9:13 | |
19 | + * @description | |
20 | + */ | |
21 | +@Slf4j | |
22 | +public class PowerUtil { | |
23 | + | |
24 | + private PowerUtil() { | |
25 | + } | |
26 | + | |
27 | + public static final String VERIFY_CODES = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; | |
28 | + private static SecureRandom random = new SecureRandom(); | |
29 | + | |
30 | + | |
31 | + /** | |
32 | + * 使用系统默认字符源生成验证码 | |
33 | + * | |
34 | + * @param verifySize 验证码长度 | |
35 | + * @return | |
36 | + */ | |
37 | + public static String generateVerifyCode(int verifySize) { | |
38 | + return generateVerifyCode(verifySize, VERIFY_CODES); | |
39 | + } | |
40 | + | |
41 | + /** | |
42 | + * 使用指定源生成验证码 | |
43 | + * | |
44 | + * @param verifySize 验证码长度 | |
45 | + * @param sources 验证码字符源 | |
46 | + * @return | |
47 | + */ | |
48 | + public static String generateVerifyCode(int verifySize, String sources) { | |
49 | + String _sources = sources; | |
50 | + if (_sources == null || _sources.length() == 0) { | |
51 | + _sources = VERIFY_CODES; | |
52 | + } | |
53 | + int codesLen = _sources.length(); | |
54 | + SecureRandom rand = new SecureRandom(); | |
55 | + StringBuilder verifyCode = new StringBuilder(verifySize); | |
56 | + for (int i = 0; i < verifySize; i++) { | |
57 | + verifyCode.append(_sources.charAt(rand.nextInt(codesLen - 1))); | |
58 | + } | |
59 | + return verifyCode.toString(); | |
60 | + } | |
61 | + | |
62 | + /** | |
63 | + * 生成随机验证码文件,并返回验证码值 | |
64 | + * | |
65 | + * @param w | |
66 | + * @param h | |
67 | + * @param outputFile | |
68 | + * @param verifySize | |
69 | + * @return | |
70 | + * @throws IOException | |
71 | + */ | |
72 | + public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException { | |
73 | + String verifyCode = generateVerifyCode(verifySize); | |
74 | + outputImage(w, h, outputFile, verifyCode); | |
75 | + return verifyCode; | |
76 | + } | |
77 | + | |
78 | + /** | |
79 | + * 输出随机验证码图片流,并返回验证码值 | |
80 | + * | |
81 | + * @param w | |
82 | + * @param h | |
83 | + * @param os | |
84 | + * @param verifySize | |
85 | + * @return | |
86 | + * @throws IOException | |
87 | + */ | |
88 | + public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException { | |
89 | + String verifyCode = generateVerifyCode(verifySize); | |
90 | + outputImage(w, h, os, verifyCode); | |
91 | + return verifyCode; | |
92 | + } | |
93 | + | |
94 | + /** | |
95 | + * 生成指定验证码图像文件 | |
96 | + * | |
97 | + * @param w | |
98 | + * @param h | |
99 | + * @param outputFile | |
100 | + * @param code | |
101 | + * @throws IOException | |
102 | + */ | |
103 | + public static void outputImage(int w, int h, File outputFile, String code) throws IOException { | |
104 | + if (outputFile == null) { | |
105 | + return; | |
106 | + } | |
107 | + File dir = outputFile.getParentFile(); | |
108 | + if (!dir.exists()) { | |
109 | + dir.mkdirs(); | |
110 | + } | |
111 | + FileOutputStream fos = null; | |
112 | + try { | |
113 | + outputFile.createNewFile(); | |
114 | + fos = new FileOutputStream(outputFile); | |
115 | + outputImage(w, h, fos, code); | |
116 | + } catch (IOException e) { | |
117 | + log.error("生成指定验证码图像文件", e); | |
118 | + } finally { | |
119 | + try { | |
120 | + fos.close(); | |
121 | + } catch (IOException e) { | |
122 | + log.error("生成指定验证码图像文件", e); | |
123 | + } | |
124 | + } | |
125 | + } | |
126 | + | |
127 | + /** | |
128 | + * 输出指定验证码图片流 | |
129 | + * | |
130 | + * @param w | |
131 | + * @param h | |
132 | + * @param os | |
133 | + * @param code | |
134 | + * @throws IOException | |
135 | + */ | |
136 | + public static void outputImage(int w, int h, OutputStream os, String code) throws IOException { | |
137 | + int verifySize = code.length(); | |
138 | + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); | |
139 | + SecureRandom rand = new SecureRandom(); | |
140 | + Graphics2D g2 = image.createGraphics(); | |
141 | + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); | |
142 | + Color[] colors = new Color[5]; | |
143 | + Color[] colorSpaces = new Color[]{Color.WHITE, Color.CYAN, | |
144 | + Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, | |
145 | + Color.PINK, Color.YELLOW}; | |
146 | + float[] fractions = new float[colors.length]; | |
147 | + for (int i = 0; i < colors.length; i++) { | |
148 | + colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; | |
149 | + fractions[i] = rand.nextFloat(); | |
150 | + } | |
151 | + Arrays.sort(fractions); | |
152 | + | |
153 | + g2.setColor(Color.GRAY);// 设置边框色 | |
154 | + g2.fillRect(0, 0, w, h); | |
155 | + | |
156 | + Color c = getRandColor(200, 250); | |
157 | + g2.setColor(c);// 设置背景色 | |
158 | + g2.fillRect(0, 2, w, h - 4); | |
159 | + | |
160 | + //绘制干扰线 | |
161 | + SecureRandom random = new SecureRandom(); | |
162 | + g2.setColor(getRandColor(160, 200));// 设置线条的颜色 | |
163 | + for (int i = 0; i < 20; i++) { | |
164 | + int x = random.nextInt(w - 1); | |
165 | + int y = random.nextInt(h - 1); | |
166 | + int xl = random.nextInt(6) + 1; | |
167 | + int yl = random.nextInt(12) + 1; | |
168 | + g2.drawLine(x, y, x + xl + 40, y + yl + 20); | |
169 | + } | |
170 | + | |
171 | + // 添加噪点 | |
172 | + float yawpRate = 0.05f;// 噪声率 | |
173 | + int area = (int) (yawpRate * w * h); | |
174 | + for (int i = 0; i < area; i++) { | |
175 | + int x = random.nextInt(w); | |
176 | + int y = random.nextInt(h); | |
177 | + int rgb = getRandomIntColor(); | |
178 | + image.setRGB(x, y, rgb); | |
179 | + } | |
180 | + | |
181 | + shear(g2, w, h, c);// 使图片扭曲 | |
182 | + | |
183 | + g2.setColor(getRandColor(100, 160)); | |
184 | + int fontSize = h - 4; | |
185 | + Font font = new Font("Algerian", Font.ITALIC, fontSize); | |
186 | + g2.setFont(font); | |
187 | + char[] chars = code.toCharArray(); | |
188 | + for (int i = 0; i < verifySize; i++) { | |
189 | + AffineTransform affine = new AffineTransform(); | |
190 | + affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize / 2, h / 2); | |
191 | + g2.setTransform(affine); | |
192 | + g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); | |
193 | + } | |
194 | + | |
195 | + g2.dispose(); | |
196 | + ImageIO.write(image, "jpg", os); | |
197 | + } | |
198 | + | |
199 | + private static Color getRandColor(int fc, int bc) { | |
200 | + int _fc = fc; | |
201 | + int _bc = bc; | |
202 | + if (_fc > 255) { | |
203 | + _fc = 255; | |
204 | + } | |
205 | + | |
206 | + if (_bc > 255) { | |
207 | + _bc = 255; | |
208 | + } | |
209 | + | |
210 | + int r = _fc + random.nextInt(_bc - _fc); | |
211 | + int g = _fc + random.nextInt(_bc - _fc); | |
212 | + int b = _fc + random.nextInt(_bc - _fc); | |
213 | + return new Color(r, g, b); | |
214 | + } | |
215 | + | |
216 | + private static int getRandomIntColor() { | |
217 | + int[] rgb = getRandomRgb(); | |
218 | + int color = 0; | |
219 | + for (int c : rgb) { | |
220 | + color = color << 8; | |
221 | + color = color | c; | |
222 | + } | |
223 | + return color; | |
224 | + } | |
225 | + | |
226 | + private static int[] getRandomRgb() { | |
227 | + int[] rgb = new int[3]; | |
228 | + for (int i = 0; i < 3; i++) { | |
229 | + rgb[i] = random.nextInt(255); | |
230 | + } | |
231 | + return rgb; | |
232 | + } | |
233 | + | |
234 | + private static void shear(Graphics g, int w1, int h1, Color color) { | |
235 | + shearX(g, w1, h1, color); | |
236 | + shearY(g, w1, h1, color); | |
237 | + } | |
238 | + | |
239 | + private static void shearX(Graphics g, int w1, int h1, Color color) { | |
240 | + int period = random.nextInt(2); | |
241 | + int frames = 1; | |
242 | + int phase = random.nextInt(2); | |
243 | + for (int i = 0; i < h1; i++) { | |
244 | + double d = (double) (period >> 1) | |
245 | + * Math.sin((double) i / (double) period | |
246 | + + (6.2831853071795862D * (double) phase) | |
247 | + / (double) frames); | |
248 | + g.copyArea(0, i, w1, 1, (int) d, 0); | |
249 | + g.setColor(color); | |
250 | + g.drawLine((int) d, i, 0, i); | |
251 | + g.drawLine((int) d + w1, i, w1, i); | |
252 | + } | |
253 | + | |
254 | + } | |
255 | + | |
256 | + private static void shearY(Graphics g, int w1, int h1, Color color) { | |
257 | + int period = random.nextInt(40) + 10; | |
258 | + int frames = 20; | |
259 | + int phase = 7; | |
260 | + for (int i = 0; i < w1; i++) { | |
261 | + double d = (double) (period >> 1) | |
262 | + * Math.sin((double) i / (double) period | |
263 | + + (6.2831853071795862D * (double) phase) | |
264 | + / (double) frames); | |
265 | + g.copyArea(i, 0, 1, h1, 0, (int) d); | |
266 | + g.setColor(color); | |
267 | + g.drawLine(i, (int) d, i, 0); | |
268 | + g.drawLine(i, (int) d + h1, i, h1); | |
269 | + | |
270 | + } | |
271 | + | |
272 | + } | |
273 | +} | ... | ... |
1 | +package com.qgutech.util; | |
2 | + | |
3 | +import org.apache.http.config.Registry; | |
4 | +import org.apache.http.config.RegistryBuilder; | |
5 | +import org.apache.http.conn.socket.ConnectionSocketFactory; | |
6 | +import org.apache.http.conn.socket.PlainConnectionSocketFactory; | |
7 | +import org.apache.http.conn.ssl.NoopHostnameVerifier; | |
8 | +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; | |
9 | +import org.apache.http.conn.ssl.TrustStrategy; | |
10 | +import org.apache.http.impl.client.CloseableHttpClient; | |
11 | +import org.apache.http.impl.client.HttpClients; | |
12 | +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; | |
13 | +import org.apache.http.ssl.SSLContextBuilder; | |
14 | + | |
15 | +import java.security.KeyManagementException; | |
16 | +import java.security.KeyStoreException; | |
17 | +import java.security.NoSuchAlgorithmException; | |
18 | +import java.security.cert.CertificateException; | |
19 | +import java.security.cert.X509Certificate; | |
20 | + | |
21 | +/** | |
22 | + * @author cq | |
23 | + * @since 2024-06-11 | |
24 | + */ | |
25 | +public class SSLClientCustom { | |
26 | + | |
27 | + private static final String HTTP = "http"; | |
28 | + private static final String HTTPS = "https"; | |
29 | + private static SSLConnectionSocketFactory sslConnectionSocketFactory = null; | |
30 | + //连接池管理类 | |
31 | + private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null; | |
32 | + //管理Https连接的上下文类 | |
33 | + private static SSLContextBuilder sslContextBuilder = null; | |
34 | + | |
35 | + static { | |
36 | + try { | |
37 | + sslContextBuilder = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { | |
38 | + @Override | |
39 | + public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { | |
40 | +// 信任所有站点 直接返回true | |
41 | + return true; | |
42 | + } | |
43 | + }); | |
44 | + sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), | |
45 | + new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); | |
46 | + Registry<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create() | |
47 | + .register(HTTP, new PlainConnectionSocketFactory()) | |
48 | + .register(HTTPS, sslConnectionSocketFactory) | |
49 | + .build(); | |
50 | + poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registryBuilder); | |
51 | + poolingHttpClientConnectionManager.setMaxTotal(200); | |
52 | + } catch (NoSuchAlgorithmException e) { | |
53 | + e.printStackTrace(); | |
54 | + } catch (KeyStoreException e) { | |
55 | + e.printStackTrace(); | |
56 | + } catch (KeyManagementException e) { | |
57 | + e.printStackTrace(); | |
58 | + } | |
59 | + } | |
60 | + | |
61 | + /** | |
62 | + * 获取连接 | |
63 | + * | |
64 | + * @return | |
65 | + * @throws Exception | |
66 | + */ | |
67 | + public static CloseableHttpClient getHttpClinet() throws Exception { | |
68 | + CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory) | |
69 | + .setConnectionManager(poolingHttpClientConnectionManager) | |
70 | + .setConnectionManagerShared(true) | |
71 | + .build(); | |
72 | + return httpClient; | |
73 | + } | |
74 | +} | ... | ... |
src/main/resources/application.yml
0 → 100644
1 | +server: | |
2 | + port: 8031 | |
3 | + servlet: | |
4 | + context-path: /power | |
5 | + session: | |
6 | + timeout: 24h | |
7 | + | |
8 | +#连接数据库的信息 | |
9 | +spring: | |
10 | + datasource: | |
11 | + driver-class-name: com.mysql.cj.jdbc.Driver | |
12 | + url: jdbc:mysql://localhost:3306/power?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8 | |
13 | + username: root | |
14 | +# password: Hczd@2025.com | |
15 | + password: 123456 | |
16 | + type: com.alibaba.druid.pool.DruidDataSource | |
17 | + | |
18 | + #Spring Boot 默认是不注入这些属性值的,需要自己绑定 | |
19 | + #druid 数据源专有配置 | |
20 | + initialSize: 5 | |
21 | + minIdle: 5 | |
22 | + maxActive: 20 | |
23 | + maxWait: 60000 | |
24 | + timeBetweenEvictionRunsMillis: 60000 | |
25 | + minEvictableIdleTimeMillis: 300000 | |
26 | + validationQuery: SELECT 1 FROM DUAL | |
27 | + testWhileIdle: true | |
28 | + testOnBorrow: false | |
29 | + testOnReturn: false | |
30 | + poolPreparedStatements: true | |
31 | + | |
32 | + #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入 | |
33 | + #如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority | |
34 | + #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j | |
35 | + filters: stat,wall | |
36 | + maxPoolPreparedStatementPerConnectionSize: 20 | |
37 | + useGlobalDataSourceStat: true | |
38 | + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 | |
39 | +#禁用模板引擎缓存 | |
40 | + thymeleaf: | |
41 | + cache: false | |
42 | + servlet: | |
43 | + multipart: #修改文件上传的大小限制 | |
44 | + max-request-size: 10MB #允许请求传递文件大小最大为10M | |
45 | + max-file-size: 10MB #允许服务器可以处理的最大文件大小 | |
46 | + resources: | |
47 | + static-locations: classpath:/static/ | |
48 | + | |
49 | +mybatis: | |
50 | + # 扫描映射文件 | |
51 | + mapper-locations: classpath:mapper/*.xml | |
52 | + # 配置别名扫描的包 | |
53 | + type-aliases-package: com.blb.entity | |
54 | + configuration: | |
55 | + # 开启驼峰映射配置 | |
56 | + map-underscore-to-camel-case: true | |
57 | + | |
58 | +logging: | |
59 | + level: | |
60 | + root: info | |
61 | + file: | |
62 | + name: ./logs/power.log | |
63 | +power: | |
64 | + init: | |
65 | + password: hczd | |
66 | + user: | |
67 | + dir: D:/web | |
68 | + panelUrl: http://101.43.45.142:7788/device/panel | |
69 | + detailUrl: http://101.43.45.142:7788/device/dWSN7SMWki/status?classify=telemetry | |
70 | + dateUrl: http://101.43.45.142:7788/device/dWSN7SMWki/property/history | |
71 | + token: pscsp_magIc_ToKEn_iNTendeD_FOr_IntErnaL_Use_onLy | ... | ... |
src/main/resources/mapper/UserMapper.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8" ?> | |
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
3 | +<mapper namespace="com.qgutech.mapper.UserMapper"> | |
4 | + <insert id="save" keyProperty="userId"> | |
5 | + insert into t_uc_user | |
6 | + (user_id, user_name, employee_code, organize_id, | |
7 | + organize_name, create_time, create_by, last_modify_time, last_modify_by, login_name, password, account_status, | |
8 | + id_card, mobile, gender, email, photo) | |
9 | + values ( | |
10 | + #{user.userId},#{user.userName},#{user.employeeCode},#{user.organizeId}, | |
11 | + #{user.organizeName},#{user.createTime},#{user.createBy},#{user.lastModifyTime}, | |
12 | + #{user.lastModifyBy},#{user.loginName},#{user.password},#{user.accountStatus}, | |
13 | + #{user.idCard},#{user.mobile},#{user.gender},#{user.email},#{user.photo} | |
14 | + ) | |
15 | + </insert> | |
16 | + | |
17 | + <select id="getUserById" resultType="com.qgutech.model.User"> | |
18 | + select * from t_uc_user where user_id = #{userId} limit 1 | |
19 | + </select> | |
20 | + | |
21 | + <select id="getUserByMobile" resultType="com.qgutech.model.User"> | |
22 | + select * from t_uc_user where mobile = #{mobile} limit 1 | |
23 | + </select> | |
24 | + | |
25 | + <select id="getUserList" resultType="com.qgutech.model.User"> | |
26 | + select * from t_uc_user | |
27 | + <if test="searchName != null and searchName != ''"> | |
28 | + where user_name like concat('%',trim(#{searchName}),'%') | |
29 | + or mobile like concat('%',trim(#{searchName}),'%') | |
30 | + or login_name like concat('%',trim(#{searchName}),'%') | |
31 | + </if> | |
32 | + limit ${(page.pageNo-1)*page.pageSize},${page.pageSize} | |
33 | + </select> | |
34 | + <select id="getTotal" resultType="int"> | |
35 | + select count(*) from t_uc_user | |
36 | + <if test="searchName != null and searchName != ''"> | |
37 | + where user_name like concat('%',trim(#{searchName}),'%') | |
38 | + or mobile like concat('%',trim(#{searchName}),'%') | |
39 | + or login_name like concat('%',trim(#{searchName}),'%') | |
40 | + </if> | |
41 | + </select> | |
42 | + | |
43 | + <select id="findByLoginName" resultType="com.qgutech.model.User"> | |
44 | + select * from t_uc_user where login_name = #{loginName} limit 1 | |
45 | + </select> | |
46 | + | |
47 | + <select id="getUserExcludeLoginName" resultType="com.qgutech.model.User"> | |
48 | + select * from t_uc_user where login_name != #{loginName} and mobile = #{mobile} limit 1 | |
49 | + </select> | |
50 | + | |
51 | + <update id="updateUser"> | |
52 | + update t_uc_user set | |
53 | + user_name = #{user.userName}, | |
54 | + mobile = #{user.mobile}, | |
55 | + login_name= #{user.loginName}, | |
56 | + last_modify_time = #{user.lastModifyTime} | |
57 | + where user_id = #{user.userId} | |
58 | + </update> | |
59 | + | |
60 | + <update id="updatePassword"> | |
61 | + update t_uc_user set | |
62 | + password = #{password} | |
63 | + where user_id = #{userId} | |
64 | + </update> | |
65 | + | |
66 | + <delete id="deleteUser"> | |
67 | + delete from t_uc_user where user_id = #{userId} | |
68 | + </delete> | |
69 | + | |
70 | +</mapper> | ... | ... |
src/main/resources/sql/create.sql
0 → 100644
1 | +drop table t_uc_user; | |
2 | +CREATE TABLE | |
3 | + t_uc_user | |
4 | + ( | |
5 | + user_id varchar(32) PRIMARY KEY, | |
6 | + user_name varchar(50), | |
7 | + employee_code varchar(32), | |
8 | + organize_id varchar(32), | |
9 | + organize_name varchar(50), | |
10 | + create_time TIMESTAMP(6), | |
11 | + create_by varchar(32), | |
12 | + last_modify_time TIMESTAMP(6), | |
13 | + last_modify_by varchar(32), | |
14 | + login_name varchar(50), | |
15 | + password varchar(50), | |
16 | + gender varchar(20), | |
17 | + account_status varchar(10), | |
18 | + id_card varchar(20), | |
19 | + mobile varchar(20), | |
20 | + email varchar(50), | |
21 | + photo varchar(100) | |
22 | + ); | |
23 | +-- 给字段添加注释 | |
24 | +alter table t_uc_user comment '人员表'; | |
25 | +alter table t_uc_user modify user_id varchar(32) comment '主键'; | |
26 | +alter table t_uc_user modify user_name varchar(50) comment '姓名'; | |
27 | +alter table t_uc_user modify employee_code varchar(32) comment '工号'; | |
28 | +alter table t_uc_user modify organize_id varchar(32) comment '直属部门id'; | |
29 | +alter table t_uc_user modify organize_name varchar(50) comment '部门名称'; | |
30 | +alter table t_uc_user modify login_name varchar(50) comment '用户名'; | |
31 | +alter table t_uc_user modify account_status varchar(10) comment '用户状态 ENABLE 激活、FORBIDDEN 冻结、UNAPPROVED 待审批'; | |
32 | +alter table t_uc_user modify id_card varchar(20) comment '身份证号码'; | |
33 | +alter table t_uc_user modify mobile varchar(20) comment '手机号码'; | |
34 | +alter table t_uc_user modify email varchar(50) comment '邮箱'; | |
35 | + | |
36 | +INSERT INTO t_uc_user (user_id, user_name, employee_code, organize_id, organize_name, create_time, create_by, last_modify_time, last_modify_by, login_name, password, account_status, | |
37 | +id_card, mobile,gender, email,photo) VALUES ('880eda246b3c4802be7d7d697c1fe7c7', '系统管理员', '100000', '282095e70c5547caa51a7e5664febd03', '徽辰智电', '2024-12-17 14:35:35', '880eda246b3c4802be7d7d697c1fe7c7', '2024-12-17 14:35:35', '880eda246b3c4802be7d7d697c1fe7c7', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'ENABLE', '34122545784578', '13349163615','女', '',''); | ... | ... |
src/main/resources/static/css/addUser.css
0 → 100644
1 | +div { | |
2 | + margin-top: 30px; | |
3 | + margin-left: 20px; | |
4 | + /*color: azure;*/ | |
5 | +} | |
6 | +input { | |
7 | + margin-left: 15px; | |
8 | + border-radius: 5px; | |
9 | + border-style: hidden; | |
10 | + height: 30px; | |
11 | + width: 140px; | |
12 | + background-color: rgba(230, 230, 230, 0.8); | |
13 | + outline: none; | |
14 | + /*color: #f0edf3;*/ | |
15 | + padding-left: 10px; | |
16 | +} | |
17 | +.button { | |
18 | + border-color: cornsilk; | |
19 | + background-color: rgba(100, 149, 237, 0.8); | |
20 | + color: aliceblue; | |
21 | + border-style: hidden; | |
22 | + border-radius: 5px; | |
23 | + width: 100px; | |
24 | + height: 31px; | |
25 | + font-size: 16px; | |
26 | +} | ... | ... |
src/main/resources/static/css/login.css
0 → 100644
1 | +* { | |
2 | + margin: 0; | |
3 | + padding: 0; | |
4 | +} | |
5 | + | |
6 | +html { | |
7 | + height: 100%; | |
8 | + width: 100%; | |
9 | + overflow: hidden; | |
10 | + margin: 0; | |
11 | + padding: 0; | |
12 | + background: url(../img/bg.jpg) no-repeat 0px 0px; | |
13 | + background-repeat: no-repeat; | |
14 | + background-size: 100% 100%; | |
15 | + -moz-background-size: 100% 100%; | |
16 | +} | |
17 | + | |
18 | +body { | |
19 | + display: flex; | |
20 | + align-items: center; | |
21 | + justify-content: center; | |
22 | + height: 100%; | |
23 | +} | |
24 | + | |
25 | +a | |
26 | +#loginDiv { | |
27 | + width: 37%; | |
28 | + display: flex; | |
29 | + justify-content: center; | |
30 | + align-items: center; | |
31 | + height: 300px; | |
32 | + background-color: rgba(75, 81, 95, 0.1); | |
33 | + box-shadow: 7px 7px 17px rgba(52, 56, 66, 0.8); | |
34 | + border-radius: 5px; | |
35 | +} | |
36 | + | |
37 | +#name_trip { | |
38 | + margin-left: 50px; | |
39 | + color: red; | |
40 | +} | |
41 | + | |
42 | +p { | |
43 | + margin-top: 30px; | |
44 | + margin-left: 20px; | |
45 | + color: azure; | |
46 | +} | |
47 | + | |
48 | +input { | |
49 | + margin-left: 15px; | |
50 | + border-radius: 5px; | |
51 | + border-style: hidden; | |
52 | + height: 30px; | |
53 | + width: 140px; | |
54 | + background-color: rgba(245, 245, 245, 0.8); | |
55 | + outline: none; | |
56 | + /*color: #f0edf3;*/ | |
57 | + padding-left: 10px; | |
58 | +} | |
59 | + | |
60 | +a { | |
61 | + text-decoration: none; | |
62 | + margin-left: 15px; | |
63 | + border-radius: 5px; | |
64 | + border-style: hidden; | |
65 | + height: 30px; | |
66 | + width: 140px; | |
67 | + background-color: rgba(245, 245, 245, 0.8); | |
68 | + outline: none; | |
69 | + /*color: #f0edf3;*/ | |
70 | + | |
71 | +} | |
72 | + | |
73 | +.button { | |
74 | + border-color: cornsilk; | |
75 | + background-color: rgba(100, 149, 237, 0.8); | |
76 | + color: aliceblue; | |
77 | + border-style: hidden; | |
78 | + border-radius: 5px; | |
79 | + width: 100px; | |
80 | + height: 31px; | |
81 | + font-size: 16px; | |
82 | +} | ... | ... |
src/main/resources/static/img/bg.jpg
0 → 100644
13.5 KB
src/main/resources/static/img/favicon.ico
0 → 100644
No preview for this file type
1 | +!function(t,e){"object"==typeof exports?module.exports=exports=e():"function"==typeof define&&define.amd?define([],e):t.CryptoJS=e()}(this,function(){var h,t,e,r,i,n,f,o,s,c,a,l,d,m,x,b,H,z,A,u,p,_,v,y,g,B,w,k,S,C,D,E,R,M,F,P,W,O,I,U,K,X,L,j,N,T,q,Z,V,G,J,$,Q,Y,tt,et,rt,it,nt,ot,st,ct,at,ht,lt,ft,dt,ut,pt,_t,vt,yt,gt,Bt,wt,kt,St,bt=bt||function(l){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&"undefined"!=typeof global&&global.crypto&&(t=global.crypto),!t&&"function"==typeof require)try{t=require("crypto")}catch(t){}function i(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")}var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var e={},o=e.lib={},s=o.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=o.WordArray=s.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||a).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o<n;o++){var s=r[o>>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o<n;o+=4)e[i+o>>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=l.ceil(e/4)},clone:function(){var t=s.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r<t;r+=4)e.push(i());return new f.init(e,t)}}),c=e.enc={},a=c.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n++){var o=e[n>>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i+=2)r[i>>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new f.init(r,e/2)}},h=c.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n++){var o=e[n>>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new f.init(r,e)}},d=c.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},u=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=d.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e,r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,s=n/(4*o),c=(s=t?l.ceil(s):l.max((0|s)-this._minBufferSize,0))*o,a=l.min(4*c,n);if(c){for(var h=0;h<c;h+=o)this._doProcessBlock(i,h);e=i.splice(0,c),r.sigBytes-=a}return new f.init(e,a)},clone:function(){var t=s.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(o.Hasher=u.extend({cfg:s.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){u.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(r){return function(t,e){return new r.init(e).finalize(t)}},_createHmacHelper:function(r){return function(t,e){return new p.HMAC.init(r,e).finalize(t)}}}),e.algo={});return e}(Math);function mt(t,e,r){return t^e^r}function xt(t,e,r){return t&e|~t&r}function Ht(t,e,r){return(t|~e)^r}function zt(t,e,r){return t&r|e&~r}function At(t,e,r){return t^(e|~r)}function Ct(t,e){return t<<e|t>>>32-e}function Dt(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s<r;s++)t[e+s]^=n[s]}function Et(t){if(255==(t>>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}function Rt(){for(var t=this._X,e=this._C,r=0;r<8;r++)ft[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0<ft[0]>>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0<ft[1]>>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0<ft[2]>>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0<ft[3]>>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0<ft[4]>>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0<ft[5]>>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0<ft[6]>>>0?1:0)|0,this._b=e[7]>>>0<ft[7]>>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);dt[r]=s^c}t[0]=dt[0]+(dt[7]<<16|dt[7]>>>16)+(dt[6]<<16|dt[6]>>>16)|0,t[1]=dt[1]+(dt[0]<<8|dt[0]>>>24)+dt[7]|0,t[2]=dt[2]+(dt[1]<<16|dt[1]>>>16)+(dt[0]<<16|dt[0]>>>16)|0,t[3]=dt[3]+(dt[2]<<8|dt[2]>>>24)+dt[1]|0,t[4]=dt[4]+(dt[3]<<16|dt[3]>>>16)+(dt[2]<<16|dt[2]>>>16)|0,t[5]=dt[5]+(dt[4]<<8|dt[4]>>>24)+dt[3]|0,t[6]=dt[6]+(dt[5]<<16|dt[5]>>>16)+(dt[4]<<16|dt[4]>>>16)|0,t[7]=dt[7]+(dt[6]<<8|dt[6]>>>24)+dt[5]|0}function Mt(){for(var t=this._X,e=this._C,r=0;r<8;r++)wt[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0<wt[0]>>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0<wt[1]>>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0<wt[2]>>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0<wt[3]>>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0<wt[4]>>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0<wt[5]>>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0<wt[6]>>>0?1:0)|0,this._b=e[7]>>>0<wt[7]>>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);kt[r]=s^c}t[0]=kt[0]+(kt[7]<<16|kt[7]>>>16)+(kt[6]<<16|kt[6]>>>16)|0,t[1]=kt[1]+(kt[0]<<8|kt[0]>>>24)+kt[7]|0,t[2]=kt[2]+(kt[1]<<16|kt[1]>>>16)+(kt[0]<<16|kt[0]>>>16)|0,t[3]=kt[3]+(kt[2]<<8|kt[2]>>>24)+kt[1]|0,t[4]=kt[4]+(kt[3]<<16|kt[3]>>>16)+(kt[2]<<16|kt[2]>>>16)|0,t[5]=kt[5]+(kt[4]<<8|kt[4]>>>24)+kt[3]|0,t[6]=kt[6]+(kt[5]<<16|kt[5]>>>16)+(kt[4]<<16|kt[4]>>>16)|0,t[7]=kt[7]+(kt[6]<<8|kt[6]>>>24)+kt[5]|0}return h=bt.lib.WordArray,bt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o<r;o+=3)for(var s=(e[o>>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c<r;c++)n.push(i.charAt(s>>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var n=0;n<r.length;n++)i[r.charCodeAt(n)]=n}var o=r.charAt(64);if(o){var s=t.indexOf(o);-1!==s&&(e=s)}return function(t,e,r){for(var i=[],n=0,o=0;o<e;o++)if(o%4){var s=r[t.charCodeAt(o-1)]<<o%4*2,c=r[t.charCodeAt(o)]>>>6-o%4*2,a=s|c;i[n>>>2]|=a<<24-n%4*8,n++}return h.create(i,n)}(t,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(l){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,n=t.algo,H=[];!function(){for(var t=0;t<64;t++)H[t]=4294967296*l.abs(l.sin(t+1))|0}();var o=n.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],c=t[e+1],a=t[e+2],h=t[e+3],l=t[e+4],f=t[e+5],d=t[e+6],u=t[e+7],p=t[e+8],_=t[e+9],v=t[e+10],y=t[e+11],g=t[e+12],B=t[e+13],w=t[e+14],k=t[e+15],S=o[0],m=o[1],x=o[2],b=o[3];S=z(S,m,x,b,s,7,H[0]),b=z(b,S,m,x,c,12,H[1]),x=z(x,b,S,m,a,17,H[2]),m=z(m,x,b,S,h,22,H[3]),S=z(S,m,x,b,l,7,H[4]),b=z(b,S,m,x,f,12,H[5]),x=z(x,b,S,m,d,17,H[6]),m=z(m,x,b,S,u,22,H[7]),S=z(S,m,x,b,p,7,H[8]),b=z(b,S,m,x,_,12,H[9]),x=z(x,b,S,m,v,17,H[10]),m=z(m,x,b,S,y,22,H[11]),S=z(S,m,x,b,g,7,H[12]),b=z(b,S,m,x,B,12,H[13]),x=z(x,b,S,m,w,17,H[14]),S=A(S,m=z(m,x,b,S,k,22,H[15]),x,b,c,5,H[16]),b=A(b,S,m,x,d,9,H[17]),x=A(x,b,S,m,y,14,H[18]),m=A(m,x,b,S,s,20,H[19]),S=A(S,m,x,b,f,5,H[20]),b=A(b,S,m,x,v,9,H[21]),x=A(x,b,S,m,k,14,H[22]),m=A(m,x,b,S,l,20,H[23]),S=A(S,m,x,b,_,5,H[24]),b=A(b,S,m,x,w,9,H[25]),x=A(x,b,S,m,h,14,H[26]),m=A(m,x,b,S,p,20,H[27]),S=A(S,m,x,b,B,5,H[28]),b=A(b,S,m,x,a,9,H[29]),x=A(x,b,S,m,u,14,H[30]),S=C(S,m=A(m,x,b,S,g,20,H[31]),x,b,f,4,H[32]),b=C(b,S,m,x,p,11,H[33]),x=C(x,b,S,m,y,16,H[34]),m=C(m,x,b,S,w,23,H[35]),S=C(S,m,x,b,c,4,H[36]),b=C(b,S,m,x,l,11,H[37]),x=C(x,b,S,m,u,16,H[38]),m=C(m,x,b,S,v,23,H[39]),S=C(S,m,x,b,B,4,H[40]),b=C(b,S,m,x,s,11,H[41]),x=C(x,b,S,m,h,16,H[42]),m=C(m,x,b,S,d,23,H[43]),S=C(S,m,x,b,_,4,H[44]),b=C(b,S,m,x,g,11,H[45]),x=C(x,b,S,m,k,16,H[46]),S=D(S,m=C(m,x,b,S,a,23,H[47]),x,b,s,6,H[48]),b=D(b,S,m,x,u,10,H[49]),x=D(x,b,S,m,w,15,H[50]),m=D(m,x,b,S,f,21,H[51]),S=D(S,m,x,b,g,6,H[52]),b=D(b,S,m,x,h,10,H[53]),x=D(x,b,S,m,v,15,H[54]),m=D(m,x,b,S,c,21,H[55]),S=D(S,m,x,b,p,6,H[56]),b=D(b,S,m,x,k,10,H[57]),x=D(x,b,S,m,d,15,H[58]),m=D(m,x,b,S,B,21,H[59]),S=D(S,m,x,b,l,6,H[60]),b=D(b,S,m,x,y,10,H[61]),x=D(x,b,S,m,a,15,H[62]),m=D(m,x,b,S,_,21,H[63]),o[0]=o[0]+S|0,o[1]=o[1]+m|0,o[2]=o[2]+x|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32;var n=l.floor(r/4294967296),o=r;e[15+(64+i>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(64+i>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,c=s.words,a=0;a<4;a++){var h=c[a];c[a]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return s},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function z(t,e,r,i,n,o,s){var c=t+(e&r|~e&i)+n+s;return(c<<o|c>>>32-o)+e}function A(t,e,r,i,n,o,s){var c=t+(e&i|r&~i)+n+s;return(c<<o|c>>>32-o)+e}function C(t,e,r,i,n,o,s){var c=t+(e^r^i)+n+s;return(c<<o|c>>>32-o)+e}function D(t,e,r,i,n,o,s){var c=t+(r^(e|~i))+n+s;return(c<<o|c>>>32-o)+e}t.MD5=i._createHelper(o),t.HmacMD5=i._createHmacHelper(o)}(Math),e=(t=bt).lib,r=e.WordArray,i=e.Hasher,n=t.algo,f=[],o=n.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=0;a<80;a++){if(a<16)f[a]=0|t[e+a];else{var h=f[a-3]^f[a-8]^f[a-14]^f[a-16];f[a]=h<<1|h>>>31}var l=(i<<5|i>>>27)+c+f[a];l+=a<20?1518500249+(n&o|~n&s):a<40?1859775393+(n^o^s):a<60?(n&o|n&s|o&s)-1894007588:(n^o^s)-899497514,c=s,s=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}}),t.SHA1=i._createHelper(o),t.HmacSHA1=i._createHmacHelper(o),function(n){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,o=t.algo,s=[],B=[];!function(){function t(t){for(var e=n.sqrt(t),r=2;r<=e;r++)if(!(t%r))return;return 1}function e(t){return 4294967296*(t-(0|t))|0}for(var r=2,i=0;i<64;)t(r)&&(i<8&&(s[i]=e(n.pow(r,.5))),B[i]=e(n.pow(r,1/3)),i++),r++}();var w=[],c=o.SHA256=i.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=0;f<64;f++){if(f<16)w[f]=0|t[e+f];else{var d=w[f-15],u=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,p=w[f-2],_=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;w[f]=u+w[f-7]+_+w[f-16]}var v=i&n^i&o^n&o,y=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),g=l+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&a^~c&h)+B[f]+w[f];l=h,h=a,a=c,c=s+g|0,s=o,o=n,n=i,i=g+(y+v)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+a|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=n.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA256=i._createHelper(c),t.HmacSHA256=i._createHmacHelper(c)}(Math),function(){var n=bt.lib.WordArray,t=bt.enc;t.Utf16=t.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n+=2){var o=e[n>>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>1]|=t.charCodeAt(i)<<16-i%2*16;return n.create(r,2*e)}};function s(t){return t<<8&4278255360|t>>>8&16711935}t.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n+=2){var o=s(e[n>>>2]>>>16-n%4*8&65535);i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>1]|=s(t.charCodeAt(i)<<16-i%2*16);return n.create(r,2*e)}}}(),function(){if("function"==typeof ArrayBuffer){var t=bt.lib.WordArray,n=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],i=0;i<e;i++)r[i>>>2]|=t[i]<<24-i%4*8;n.call(this,r,e)}else n.apply(this,arguments)}).prototype=t}}(),Math,c=(s=bt).lib,a=c.WordArray,l=c.Hasher,d=s.algo,m=a.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=a.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=a.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),H=a.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),z=a.create([0,1518500249,1859775393,2400959708,2840853838]),A=a.create([1352829926,1548603684,1836072691,2053994217,0]),u=d.RIPEMD160=l.extend({_doReset:function(){this._hash=a.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,c,a,h,l,f,d,u,p,_,v=this._hash.words,y=z.words,g=A.words,B=m.words,w=x.words,k=b.words,S=H.words;l=o=v[0],f=s=v[1],d=c=v[2],u=a=v[3],p=h=v[4];for(r=0;r<80;r+=1)_=o+t[e+B[r]]|0,_+=r<16?mt(s,c,a)+y[0]:r<32?xt(s,c,a)+y[1]:r<48?Ht(s,c,a)+y[2]:r<64?zt(s,c,a)+y[3]:At(s,c,a)+y[4],_=(_=Ct(_|=0,k[r]))+h|0,o=h,h=a,a=Ct(c,10),c=s,s=_,_=l+t[e+w[r]]|0,_+=r<16?At(f,d,u)+g[0]:r<32?zt(f,d,u)+g[1]:r<48?Ht(f,d,u)+g[2]:r<64?xt(f,d,u)+g[3]:mt(f,d,u)+g[4],_=(_=Ct(_|=0,S[r]))+p|0,l=p,p=u,u=Ct(d,10),d=f,f=_;_=v[1]+c+u|0,v[1]=v[2]+a+p|0,v[2]=v[3]+h+l|0,v[3]=v[4]+o+f|0,v[4]=v[0]+s+d|0,v[0]=_},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=l.clone.call(this);return t._hash=this._hash.clone(),t}}),s.RIPEMD160=l._createHelper(u),s.HmacRIPEMD160=l._createHmacHelper(u),p=bt.lib.Base,_=bt.enc.Utf8,bt.algo.HMAC=p.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),o=this._iKey=e.clone(),s=n.words,c=o.words,a=0;a<r;a++)s[a]^=1549556828,c[a]^=909522486;n.sigBytes=o.sigBytes=i,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,r=e.finalize(t);return e.reset(),e.finalize(this._oKey.clone().concat(r))}}),y=(v=bt).lib,g=y.Base,B=y.WordArray,w=v.algo,k=w.SHA1,S=w.HMAC,C=w.PBKDF2=g.extend({cfg:g.extend({keySize:4,hasher:k,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,i=S.create(r.hasher,t),n=B.create(),o=B.create([1]),s=n.words,c=o.words,a=r.keySize,h=r.iterations;s.length<a;){var l=i.update(e).finalize(o);i.reset();for(var f=l.words,d=f.length,u=l,p=1;p<h;p++){u=i.finalize(u),i.reset();for(var _=u.words,v=0;v<d;v++)f[v]^=_[v]}n.concat(l),c[0]++}return n.sigBytes=4*a,n}}),v.PBKDF2=function(t,e,r){return C.create(r).compute(t,e)},E=(D=bt).lib,R=E.Base,M=E.WordArray,F=D.algo,P=F.MD5,W=F.EvpKDF=R.extend({cfg:R.extend({keySize:4,hasher:P,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r,i=this.cfg,n=i.hasher.create(),o=M.create(),s=o.words,c=i.keySize,a=i.iterations;s.length<c;){r&&n.update(r),r=n.update(t).finalize(e),n.reset();for(var h=1;h<a;h++)r=n.finalize(r),n.reset();o.concat(r)}return o.sigBytes=4*c,o}}),D.EvpKDF=function(t,e,r){return W.create(r).compute(t,e)},I=(O=bt).lib.WordArray,U=O.algo,K=U.SHA256,X=U.SHA224=K.extend({_doReset:function(){this._hash=new I.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=K._doFinalize.call(this);return t.sigBytes-=4,t}}),O.SHA224=K._createHelper(X),O.HmacSHA224=K._createHmacHelper(X),L=bt.lib,j=L.Base,N=L.WordArray,(T=bt.x64={}).Word=j.extend({init:function(t,e){this.high=t,this.low=e}}),T.WordArray=j.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],i=0;i<e;i++){var n=t[i];r.push(n.high),r.push(n.low)}return N.create(r,this.sigBytes)},clone:function(){for(var t=j.clone.call(this),e=t.words=this.words.slice(0),r=e.length,i=0;i<r;i++)e[i]=e[i].clone();return t}}),function(d){var t=bt,e=t.lib,u=e.WordArray,i=e.Hasher,l=t.x64.Word,r=t.algo,C=[],D=[],E=[];!function(){for(var t=1,e=0,r=0;r<24;r++){C[t+5*e]=(r+1)*(r+2)/2%64;var i=(2*t+3*e)%5;t=e%5,e=i}for(t=0;t<5;t++)for(e=0;e<5;e++)D[t+5*e]=e+(2*t+3*e)%5*5;for(var n=1,o=0;o<24;o++){for(var s=0,c=0,a=0;a<7;a++){if(1&n){var h=(1<<a)-1;h<32?c^=1<<h:s^=1<<h-32}128&n?n=n<<1^113:n<<=1}E[o]=l.create(s,c)}}();var R=[];!function(){for(var t=0;t<25;t++)R[t]=l.create()}();var n=r.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;e<25;e++)t[e]=new l.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var r=this._state,i=this.blockSize/2,n=0;n<i;n++){var o=t[e+2*n],s=t[e+2*n+1];o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(x=r[n]).high^=s,x.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++){h^=(x=r[a+5*f]).high,l^=x.low}var d=R[a];d.high=h,d.low=l}for(a=0;a<5;a++){var u=R[(a+4)%5],p=R[(a+1)%5],_=p.high,v=p.low;for(h=u.high^(_<<1|v>>>31),l=u.low^(v<<1|_>>>31),f=0;f<5;f++){(x=r[a+5*f]).high^=h,x.low^=l}}for(var y=1;y<25;y++){var g=(x=r[y]).high,B=x.low,w=C[y];l=w<32?(h=g<<w|B>>>32-w,B<<w|g>>>32-w):(h=B<<w-32|g>>>64-w,g<<w-32|B>>>64-w);var k=R[D[y]];k.high=h,k.low=l}var S=R[0],m=r[0];S.high=m.high,S.low=m.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var x=r[y=a+5*f],b=R[y],H=R[(a+1)%5+5*f],z=R[(a+2)%5+5*f];x.high=b.high^~H.high&z.high,x.low=b.low^~H.low&z.low}x=r[0];var A=E[c];x.high^=A.high,x.low^=A.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(d.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,o=this.cfg.outputLength/8,s=o/8,c=[],a=0;a<s;a++){var h=n[a],l=h.high,f=h.low;l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),f=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8),c.push(f),c.push(l)}return new u.init(c,o)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(n),t.HmacSHA3=i._createHmacHelper(n)}(Math),function(){var t=bt,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var mt=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],xt=[];!function(){for(var t=0;t<80;t++)xt[t]=s()}();var c=o.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=i.high,d=i.low,u=n.high,p=n.low,_=o.high,v=o.low,y=s.high,g=s.low,B=c.high,w=c.low,k=a.high,S=a.low,m=h.high,x=h.low,b=l.high,H=l.low,z=f,A=d,C=u,D=p,E=_,R=v,M=y,F=g,P=B,W=w,O=k,I=S,U=m,K=x,X=b,L=H,j=0;j<80;j++){var N,T,q=xt[j];if(j<16)T=q.high=0|t[e+2*j],N=q.low=0|t[e+2*j+1];else{var Z=xt[j-15],V=Z.high,G=Z.low,J=(V>>>1|G<<31)^(V>>>8|G<<24)^V>>>7,$=(G>>>1|V<<31)^(G>>>8|V<<24)^(G>>>7|V<<25),Q=xt[j-2],Y=Q.high,tt=Q.low,et=(Y>>>19|tt<<13)^(Y<<3|tt>>>29)^Y>>>6,rt=(tt>>>19|Y<<13)^(tt<<3|Y>>>29)^(tt>>>6|Y<<26),it=xt[j-7],nt=it.high,ot=it.low,st=xt[j-16],ct=st.high,at=st.low;T=(T=(T=J+nt+((N=$+ot)>>>0<$>>>0?1:0))+et+((N+=rt)>>>0<rt>>>0?1:0))+ct+((N+=at)>>>0<at>>>0?1:0),q.high=T,q.low=N}var ht,lt=P&O^~P&U,ft=W&I^~W&K,dt=z&C^z&E^C&E,ut=A&D^A&R^D&R,pt=(z>>>28|A<<4)^(z<<30|A>>>2)^(z<<25|A>>>7),_t=(A>>>28|z<<4)^(A<<30|z>>>2)^(A<<25|z>>>7),vt=(P>>>14|W<<18)^(P>>>18|W<<14)^(P<<23|W>>>9),yt=(W>>>14|P<<18)^(W>>>18|P<<14)^(W<<23|P>>>9),gt=mt[j],Bt=gt.high,wt=gt.low,kt=X+vt+((ht=L+yt)>>>0<L>>>0?1:0),St=_t+ut;X=U,L=K,U=O,K=I,O=P,I=W,P=M+(kt=(kt=(kt=kt+lt+((ht=ht+ft)>>>0<ft>>>0?1:0))+Bt+((ht=ht+wt)>>>0<wt>>>0?1:0))+T+((ht=ht+N)>>>0<N>>>0?1:0))+((W=F+ht|0)>>>0<F>>>0?1:0)|0,M=E,F=R,E=C,R=D,C=z,D=A,z=kt+(pt+dt+(St>>>0<_t>>>0?1:0))+((A=ht+St|0)>>>0<ht>>>0?1:0)|0}d=i.low=d+A,i.high=f+z+(d>>>0<A>>>0?1:0),p=n.low=p+D,n.high=u+C+(p>>>0<D>>>0?1:0),v=o.low=v+R,o.high=_+E+(v>>>0<R>>>0?1:0),g=s.low=g+F,s.high=y+M+(g>>>0<F>>>0?1:0),w=c.low=w+W,c.high=B+P+(w>>>0<W>>>0?1:0),S=a.low=S+I,a.high=k+O+(S>>>0<I>>>0?1:0),x=h.low=x+K,h.high=m+U+(x>>>0<K>>>0?1:0),H=l.low=H+L,l.high=b+X+(H>>>0<L>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),Z=(q=bt).x64,V=Z.Word,G=Z.WordArray,J=q.algo,$=J.SHA512,Q=J.SHA384=$.extend({_doReset:function(){this._hash=new G.init([new V.init(3418070365,3238371032),new V.init(1654270250,914150663),new V.init(2438529370,812702999),new V.init(355462360,4144912697),new V.init(1731405415,4290775857),new V.init(2394180231,1750603025),new V.init(3675008525,1694076839),new V.init(1203062813,3204075428)])},_doFinalize:function(){var t=$._doFinalize.call(this);return t.sigBytes-=16,t}}),q.SHA384=$._createHelper(Q),q.HmacSHA384=$._createHmacHelper(Q),bt.lib.Cipher||function(){var t=bt,e=t.lib,r=e.Base,a=e.WordArray,i=e.BufferedBlockAlgorithm,n=t.enc,o=(n.Utf8,n.Base64),s=t.algo.EvpKDF,c=e.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(i){return{encrypt:function(t,e,r){return h(e).encrypt(i,t,e,r)},decrypt:function(t,e,r){return h(e).decrypt(i,t,e,r)}}}});function h(t){return"string"==typeof t?w:g}e.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l,f=t.mode={},d=e.BlockCipherMode=r.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),u=f.CBC=((l=d.extend()).Encryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;p.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),l.Decryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);r.decryptBlock(t,e),p.call(this,t,e,i),this._prevBlock=n}}),l);function p(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o<r;o++)t[e+o]^=i[o]}var _=(t.pad={}).Pkcs7={pad:function(t,e){for(var r=4*e,i=r-t.sigBytes%r,n=i<<24|i<<16|i<<8|i,o=[],s=0;s<i;s+=4)o.push(n);var c=a.create(o,i);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},v=(e.BlockCipher=c.extend({cfg:c.cfg.extend({mode:u,padding:_}),reset:function(){var t;c.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?a.create([1398893684,1701076831]).concat(r).concat(e):e).toString(o)},parse:function(t){var e,r=o.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=a.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),v.create({ciphertext:r,salt:e})}},g=e.SerializableCipher=r.extend({cfg:r.extend({format:y}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),B=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||a.random(8);var n=s.create({keySize:e+r}).compute(t,i),o=a.create(n.words.slice(e),4*r);return n.sigBytes=4*e,v.create({key:n,iv:o,salt:i})}},w=e.PasswordBasedCipher=g.extend({cfg:g.cfg.extend({kdf:B}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=g.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=n.iv,g.decrypt.call(this,t,e,n.key,i)}})}(),bt.mode.CFB=((Y=bt.lib.BlockCipherMode.extend()).Encryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Dt.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),Y.Decryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);Dt.call(this,t,e,i,r),this._prevBlock=n}}),Y),bt.mode.ECB=((tt=bt.lib.BlockCipherMode.extend()).Encryptor=tt.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),tt.Decryptor=tt.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),tt),bt.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,i=4*e,n=i-r%i,o=r+n-1;t.clamp(),t.words[o>>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(bt.lib.WordArray.random(i-1)).concat(bt.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso97971={pad:function(t,e){t.concat(bt.lib.WordArray.create([2147483648],1)),bt.pad.ZeroPadding.pad(t,e)},unpad:function(t){bt.pad.ZeroPadding.unpad(t),t.sigBytes--}},bt.mode.OFB=(et=bt.lib.BlockCipherMode.extend(),rt=et.Encryptor=et.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s<i;s++)t[e+s]^=o[s]}}),et.Decryptor=rt,et),bt.pad.NoPadding={pad:function(){},unpad:function(){}},it=bt.lib.CipherParams,nt=bt.enc.Hex,bt.format.Hex={stringify:function(t){return t.ciphertext.toString(nt)},parse:function(t){var e=nt.parse(t);return it.create({ciphertext:e})}},function(){var t=bt,e=t.lib.BlockCipher,r=t.algo,h=[],l=[],f=[],d=[],u=[],p=[],_=[],v=[],y=[],g=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var r=0,i=0;for(e=0;e<256;e++){var n=i^i<<1^i<<2^i<<3^i<<4;n=n>>>8^255&n^99,h[r]=n;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a;a=16843009*c^65537*s^257*o^16843008*r;_[n]=a<<24|a>>>8,v[n]=a<<16|a>>>16,y[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],i=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o<i;o++)o<r?n[o]=e[o]:(a=n[o-1],o%r?6<r&&o%r==4&&(a=h[a>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c<i;c++){o=i-c;if(c%4)var a=n[o];else a=n[o-4];s[c]=c<4||o<=4?a:_[h[a>>>24]]^v[h[a>>>16&255]]^y[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,v,y,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p<a;p++){var _=i[h>>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],v=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],y=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++];h=_,l=v,f=y,d=g}_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],v=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],y=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=v,t[e+2]=y,t[e+3]=g},keySize:8});t.AES=e._createHelper(i)}(),function(){var t=bt,e=t.lib,n=e.WordArray,r=e.BlockCipher,i=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],o=i.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var s=n[o]=[],c=f[o];for(r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}var a=this._invSubKeys=[];for(r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<<t}function _(t,e){var r=(this._rBlock>>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<<t}t.DES=r._createHelper(o);var s=i.TripleDES=r.extend({_doReset:function(){var t=this._key.words;if(2!==t.length&&4!==t.length&&t.length<6)throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),i=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=o.createEncryptor(n.create(e)),this._des2=o.createEncryptor(n.create(r)),this._des3=o.createEncryptor(n.create(i))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(s)}(),function(){var t=bt,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,c=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+c)%256;var a=i[n];i[n]=i[o],i[o]=a}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0<t;t--)n.call(this)}});t.RC4Drop=e._createHelper(o)}(),bt.mode.CTRGladman=(ot=bt.lib.BlockCipherMode.extend(),st=ot.Encryptor=ot.extend({processBlock:function(t,e){var r,i=this._cipher,n=i.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),0===((r=s)[0]=Et(r[0]))&&(r[1]=Et(r[1]));var c=s.slice(0);i.encryptBlock(c,0);for(var a=0;a<n;a++)t[e+a]^=c[a]}}),ot.Decryptor=st,ot),at=(ct=bt).lib.StreamCipher,ht=ct.algo,lt=[],ft=[],dt=[],ut=ht.Rabbit=at.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=0;r<4;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(r=this._b=0;r<4;r++)Rt.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;n[0]^=a,n[1]^=l,n[2]^=h,n[3]^=f,n[4]^=a,n[5]^=l,n[6]^=h,n[7]^=f;for(r=0;r<4;r++)Rt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Rt.call(this),lt[0]=r[0]^r[5]>>>16^r[3]<<16,lt[1]=r[2]^r[7]>>>16^r[5]<<16,lt[2]=r[4]^r[1]>>>16^r[7]<<16,lt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)lt[i]=16711935&(lt[i]<<8|lt[i]>>>24)|4278255360&(lt[i]<<24|lt[i]>>>8),t[e+i]^=lt[i]},blockSize:4,ivSize:2}),ct.Rabbit=at._createHelper(ut),bt.mode.CTR=(pt=bt.lib.BlockCipherMode.extend(),_t=pt.Encryptor=pt.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c<i;c++)t[e+c]^=s[c]}}),pt.Decryptor=_t,pt),yt=(vt=bt).lib.StreamCipher,gt=vt.algo,Bt=[],wt=[],kt=[],St=gt.RabbitLegacy=yt.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)Mt.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;i[0]^=a,i[1]^=l,i[2]^=h,i[3]^=f,i[4]^=a,i[5]^=l,i[6]^=h,i[7]^=f;for(n=0;n<4;n++)Mt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Mt.call(this),Bt[0]=r[0]^r[5]>>>16^r[3]<<16,Bt[1]=r[2]^r[7]>>>16^r[5]<<16,Bt[2]=r[4]^r[1]>>>16^r[7]<<16,Bt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)Bt[i]=16711935&(Bt[i]<<8|Bt[i]>>>24)|4278255360&(Bt[i]<<24|Bt[i]>>>8),t[e+i]^=Bt[i]},blockSize:4,ivSize:2}),vt.RabbitLegacy=yt._createHelper(St),bt.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},bt}); | |
\ No newline at end of file | ... | ... |