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}); |