diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/README.md b/README.md index 1f72977000d98263ff7a40099e416a7257eda425..a47a413c7657ba8ce96dac4c1780eec41e577a53 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,33 @@ -# shop-Mall +#### 技术选型 +- æ ¸å¿ƒæ¡†æž¶ï¼šSpring Boot 2.15 +- 安全框架:Apache Shiro 1.4 +- 视图框架:Spring MVC 5.0 +- æŒä¹…层框架:MyBatis 3.3,mybatis-plus3.1.2 +- æ•°æ®åº“è¿žæŽ¥æ± ï¼šDruid 1.1.13 +- 日志管ç†ï¼šSLF4J 1.7 +- åŽç«¯æ ¡éªŒæ¡†æž¶ï¼šHibernate Validator +<br> + +#### 安装教程 +- git clone下载æºç +- 安装lombokæ’件 +- 修改é…置文件application-dev.yml +- å¯åŠ¨é¡¹ç›® +- Swagger文档路径:http://localhost:8080/swagger-ui.html +<br> + +#### 项目结构 +``` +├─wisenergy-parent çˆ¶æ¨¡å— +│ ├─wisenergy-common é€šç”¨æ¨¡å— +│ ├─wisenergy-model 实体类 +│ ├─wisenergy-mapper DAOæŽ¥å£ +│ ├─wisenergy-service 业务实现 +│ ├─wisenergy-web-admin webæŽ¥å£ +└─ +``` + +#### 部署 +- 打包:maven clean package +- å¯åŠ¨ï¼šnohup java -jar wisenergy-web-admin-1.0.0-SNAPSHOT.jar > admin.log 2>&1 & \ No newline at end of file diff --git a/db.zip b/db.zip new file mode 100644 index 0000000000000000000000000000000000000000..5191f40aff8f52c283e8871a675d323fb5836404 Binary files /dev/null and b/db.zip differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..3246ef406e7addd9e4d8b455cb2ca7316230f14e --- /dev/null +++ b/pom.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>2.1.5.RELEASE</version> + </parent> + <groupId>cn.wisenergy</groupId> + <artifactId>wisenergy-parent</artifactId> + <packaging>pom</packaging> + <version>1.0-SNAPSHOT</version> + <name>${project.artifactId}</name> + + <!-- é¡¹ç›®æ¨¡å— --> + <modules> + <module>wisenergy-common</module> + <module>wisenergy-model</module> + <module>wisenergy-mapper</module> + <module>wisenergy-service</module> + <module>wisenergy-web-admin</module> + </modules> + + <!--POM属性å˜é‡--> + <properties> + <!-- 文件拷è´æ—¶çš„ç¼–ç --> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <!-- 编译时的编ç --> + <maven.compiler.encoding>UTF-8</maven.compiler.encoding> + <!--模å—版本管ç†--> + <projectDevMode>SNAPSHOT</projectDevMode> + <moduleVersion.wisenergy-common>1.0.0-${projectDevMode}</moduleVersion.wisenergy-common> + <moduleVersion.wisenergy-model>1.0.0-${projectDevMode}</moduleVersion.wisenergy-model> + <moduleVersion.wisenergy-mapper>1.0.0-${projectDevMode}</moduleVersion.wisenergy-mapper> + <moduleVersion.wisenergy-service>1.0.0-${projectDevMode}</moduleVersion.wisenergy-service> + <moduleVersion.wisenergy-web-admin>1.0.0-${projectDevMode}</moduleVersion.wisenergy-web-admin> + </properties> + + <!-- JAR ä¾èµ– --> + <dependencies> + <!-- Apache Commons--> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.6</version> + </dependency> + <dependency> + <groupId>commons-pool</groupId> + <artifactId>commons-pool</artifactId> + </dependency> + <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.6</version> + </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + </dependency> + <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> + <dependency> + <groupId>commons-fileupload</groupId> + <artifactId>commons-fileupload</artifactId> + <version>1.4</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpcore</artifactId> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + </exclusions> + </dependency> + <!-- lombok简化代ç ,需è¦æœ¬åœ°é…ç½® --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <scope>provided</scope> + </dependency> + <!--è°·æŒå·¥å…·åŒ…,对Java API的补充,对Javaå¼€å‘ä¸å¸¸ç”¨åŠŸèƒ½è¿›è¡Œæ›´ä¼˜é›…的实现,使得编ç æ›´åŠ è½»æ¾ï¼Œä»£ç 容易ç†è§£--> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>22.0</version> + </dependency> + <!-- 阿里巴巴json工具类 --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + <version>1.2.68</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>easyexcel</artifactId> + <version>2.2.6</version> + </dependency> + + </dependencies> + + <!-- MVN构建æ’件 --> + <build> + <plugins> + <!-- 自动跳过å•å…ƒæµ‹è¯• --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.21.0</version> + <configuration> + <skipTests>true</skipTests> + </configuration> + </plugin> + + <!--编译libä¸çš„JAR文件到WAR包ä¸--> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.5.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + <encoding>UTF-8</encoding> + </configuration> + </plugin> + </plugins> + <resources> + <resource> + <directory>src/main/resources</directory> + <includes> + <include>**/*.*</include> + </includes> + </resource> + <resource> + <directory>src/main/java</directory> + <includes> + <include>**/*.*</include> + </includes> + </resource> + </resources> + </build> +</project> \ No newline at end of file diff --git a/wisenergy-common/.gitignore b/wisenergy-common/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/wisenergy-common/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/wisenergy-common/pom.xml b/wisenergy-common/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..1208563c10d7a30c038f9dcc715a4b2ddb86c885 --- /dev/null +++ b/wisenergy-common/pom.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>wisenergy-parent</artifactId> + <groupId>cn.wisenergy</groupId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>wisenergy-common</artifactId> + <version>${moduleVersion.wisenergy-common}</version> + <packaging>jar</packaging> + + <!-- 项目ä¾èµ– --> + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <!--undertow容器--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-undertow</artifactId> + </dependency> + <!--spring aopä¾èµ–--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-aop</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + </dependency> + <dependency> + <groupId>org.mybatis.spring.boot</groupId> + <artifactId>mybatis-spring-boot-starter</artifactId> + <version>2.1.2</version> + </dependency> + <!--é…置文件处ç†å™¨--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-configuration-processor</artifactId> + <optional>true</optional> + </dependency> + <dependency> + <groupId>com.github.pagehelper</groupId> + <artifactId>pagehelper-spring-boot-starter</artifactId> + <version>1.2.10</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-devtools</artifactId> + <optional>true</optional> + </dependency> + <!-- Mysql --> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + </dependency> + <!-- Mybatis --> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-boot-starter</artifactId> + <version>3.1.2</version> + <exclusions> + <exclusion> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-generator</artifactId> + </exclusion> + </exclusions> + </dependency> + <!-- Druid --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>druid-spring-boot-starter</artifactId> + <version>1.1.22</version> + </dependency> + <!-- Redis --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-redis</artifactId> + </dependency> + <!-- Secret key --> + <dependency> + <groupId>org.bouncycastle</groupId> + <artifactId>bcprov-jdk15on</artifactId> + <version>1.54</version> + </dependency> + <!-- Swaggeré…ç½® --> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>2.9.2</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>2.9.2</version> + </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt</artifactId> + <version>0.9.1</version> + </dependency> + <dependency> + <groupId>joda-time</groupId> + <artifactId>joda-time</artifactId> + </dependency> + <!-- shiro --> + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-core</artifactId> + <version>1.4.0</version> + </dependency> + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-spring</artifactId> + <version>1.4.0</version> + </dependency> + <!-- POI --> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi</artifactId> + <version>3.9</version> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-ooxml</artifactId> + <version>3.9</version> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-ooxml-schemas</artifactId> + <version>3.9</version> + </dependency> + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-all</artifactId> + <version>4.6.7</version> + </dependency> + </dependencies> + + <!-- MAVEN构建 --> + <build> + <finalName>${project.artifactId}-${project.version}</finalName> + </build> +</project> \ No newline at end of file diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/annotation/DataAuth.java b/wisenergy-common/src/main/java/cn/wisenergy/common/annotation/DataAuth.java new file mode 100644 index 0000000000000000000000000000000000000000..36f86b2a4a2b2980d6826db4de66b6a73d7954b6 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/annotation/DataAuth.java @@ -0,0 +1,14 @@ +package cn.wisenergy.common.annotation; + +import java.lang.annotation.*; + +/** + * æ•°æ®æƒé™æ³¨è§£ï¼Œæ ‡æ³¨åœ¨æ–¹æ³•ä¸Š + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataAuth { + + String value() default "dataAuthList"; +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/annotation/SysLog.java b/wisenergy-common/src/main/java/cn/wisenergy/common/annotation/SysLog.java new file mode 100644 index 0000000000000000000000000000000000000000..e340aa90a8af226954b3762ddb09f715bfae9270 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/annotation/SysLog.java @@ -0,0 +1,14 @@ +package cn.wisenergy.common.annotation; + +import java.lang.annotation.*; + +/** + * 系统日志注解 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SysLog { + + String value() default ""; +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/camera/CameraConfig.java b/wisenergy-common/src/main/java/cn/wisenergy/common/camera/CameraConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..29dc54d58c1738bfdfe8d4b87d4fd22ac5500f71 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/camera/CameraConfig.java @@ -0,0 +1,24 @@ +package cn.wisenergy.common.camera; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * @author jiawei + */ +@Configuration +@ConfigurationProperties(prefix = "camera.isc.api") +@Data +public class CameraConfig { + + private String appKey; + + private String appSecret; + + private String host; + + private String path; + + private String protocol="https"; +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/config/RedisConfig.java b/wisenergy-common/src/main/java/cn/wisenergy/common/config/RedisConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..584c366f46ce0c91781cf912cbc1990863141231 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/config/RedisConfig.java @@ -0,0 +1,54 @@ +package cn.wisenergy.common.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * Redisé…ç½® + * + */ +@Configuration +public class RedisConfig { + @Autowired + private RedisConnectionFactory factory; + + @Bean + public RedisTemplate<String, Object> redisTemplate() { + RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new StringRedisSerializer()); + redisTemplate.setConnectionFactory(factory); + return redisTemplate; + } + + @Bean + public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) { + return redisTemplate.opsForHash(); + } + + @Bean + public ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) { + return redisTemplate.opsForValue(); + } + + @Bean + public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) { + return redisTemplate.opsForList(); + } + + @Bean + public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) { + return redisTemplate.opsForSet(); + } + + @Bean + public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) { + return redisTemplate.opsForZSet(); + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/config/cors/CORSFilter.java b/wisenergy-common/src/main/java/cn/wisenergy/common/config/cors/CORSFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..19ae88e96b63bf611d6ee233aa4d4494ae509ead --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/config/cors/CORSFilter.java @@ -0,0 +1,35 @@ +package cn.wisenergy.common.config.cors; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 跨域过滤器设置 + * + * @author wyy + * @date 2019-09-04 14:31 + */ +@Configuration +public class CORSFilter { + + /** + * å‰ç½®è·¨åŸŸè®¾ç½®ã€è¿‡æ»¤å™¨æ–¹å¼å…ˆäºŽæ‹¦æˆªå™¨ç”Ÿæ•ˆã€‘ + * + * @return + */ + @Bean + public CorsFilter corsFilter() { + CorsConfiguration config = new CorsConfiguration(); + config.addAllowedOrigin("*"); + config.setAllowCredentials(true); + config.addAllowedMethod("*"); + config.addAllowedHeader("*"); + UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); + configSource.registerCorsConfiguration("/**", config); + return new CorsFilter(configSource); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/config/file/FileUploadConfig.java b/wisenergy-common/src/main/java/cn/wisenergy/common/config/file/FileUploadConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..5ba93de5d6b97b9cb06fff1381ca9579bcd51d7d --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/config/file/FileUploadConfig.java @@ -0,0 +1,29 @@ +package cn.wisenergy.common.config.file; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.multipart.MultipartResolver; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + +/** + * æ–‡ä»¶ä¸Šä¼ é…ç½® + * @author wyy + * @date 2019-08-22 19:20 + */ +@Configuration +public class FileUploadConfig { + + /** + * é‡æ–°å®šä¹‰æ–‡ä»¶ä¸Šä¼ 对象ã€springBoot request转化æˆMultipartHttpServletRequest】 + * @return + */ + @Bean(name = "multipartResolver") + public MultipartResolver multipartResolver() { + CommonsMultipartResolver resolver = new CommonsMultipartResolver(); + resolver.setDefaultEncoding("UTF-8"); + resolver.setResolveLazily(true); + resolver.setMaxInMemorySize(40960); + resolver.setMaxUploadSize(512 * 1024 * 1024); + return resolver; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CacheConstants.java b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CacheConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..5858fdfd3e0e24882ce798da16bdc949eab333d4 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CacheConstants.java @@ -0,0 +1,12 @@ +package cn.wisenergy.common.constant; + +/** + * 缓å˜å¸¸é‡ + */ +public interface CacheConstants { + + /** + * èœå•è¯¦æƒ… + */ + String MENU_DETAILS = "menu_details"; +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CommonAttributes.java b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CommonAttributes.java new file mode 100644 index 0000000000000000000000000000000000000000..75db7f8d752d8f70387e5b1f1b2a306f0f9c0070 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CommonAttributes.java @@ -0,0 +1,25 @@ +package cn.wisenergy.common.constant; + +/** + * 公共å‚æ•° + */ +public final class CommonAttributes { + + /** æ—¥æœŸæ ¼å¼é…比 */ + public static final String[] DATE_PATTERNS = new String[] { "HH:mm", "yyyy", "yyyy-MM", "yyyyMM", "yyyy/MM", "yyyy-MM-dd", "yyyyMMdd", "yyyy/MM/dd","yyyy-MM-dd HH:mm", "yyyyMMddHHmm", "yyyy/MM/dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyyMMddHHmmss", "yyyy/MM/dd HH:mm:ss" }; + + /** xml文件路径 */ + public static final String XML_PATH = "/app_config.xml"; + + /** properties文件路径 */ + public static final String PROPERTIES_PATH = "/app_config.properties"; + + /** + * ä¸å¯å®žä¾‹åŒ– + */ + private CommonAttributes() { + } + + public static final Integer NUM_ONE = 1; + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CommonConstants.java b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CommonConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..38d5569d211baeae35ad72b42789554e9fb384ae --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/CommonConstants.java @@ -0,0 +1,14 @@ +package cn.wisenergy.common.constant; + +/** + * é€šç”¨å¸¸é‡ + * + */ +public interface CommonConstants { + + /** + * 超级管ç†å‘˜ID + */ + String SUPER_ADMIN = "1"; + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/constant/IscCameraConstants.java b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/IscCameraConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..355a769d83e29f985854308063be3ef29926004a --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/IscCameraConstants.java @@ -0,0 +1,118 @@ +package cn.wisenergy.common.constant; + +public interface IscCameraConstants { + + /** + * 查询编ç 设备列表v2 + * æ ¹æ®æ¡ä»¶æŸ¥è¯¢ç›®å½•ä¸‹æœ‰æƒé™çš„ç¼–ç 设备列表。当返回å—段对应的值为空时,该å—段ä¸è¿”回。 + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.4åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String encodeDevice_search = ""; + + /** + * æ ¹æ®åŒºåŸŸç¼–ç ã€èµ„æºæ“作æƒé™ç 分页获å–当å‰åŒºåŸŸä¸‹ï¼ˆä¸åŒ…å«å区域)有æƒé™çš„ç¼–ç 设备列表,主è¦ç”¨äºŽé€å±‚获å–区域下的编ç 设备信æ¯ã€‚ + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center v1.3åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String encodeDevice_subResources = "/api/resource/v1/encodeDevice/subResources"; + + /** + * æ ¹æ®ç¼–å·èŽ·å–ç›‘æŽ§ç‚¹è¯¦ç»†ä¿¡æ¯ + * 获å–å•ä¸ªç›‘控点信æ¯æ˜¯æŒ‡æ ¹æ®ç›‘æŽ§ç‚¹å”¯ä¸€æ ‡è¯†æ¥èŽ·å–指定的监控点信æ¯ã€‚ + */ + String cameras_indexCode = "/api/resource/v1/cameras/indexCode"; + + /** + * 分页获å–ç›‘æŽ§ç‚¹èµ„æº + */ + String cameras = "/api/resource/v1/cameras"; + + /** + * 获å–监控点预览å–æµURLv2 + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.4åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String previewURLs = "/api/video/v2/cameras/previewURLs"; + + /** + * 获å–监控点回放å–æµURLv2 + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.4åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String playbackURLs = "/api/video/v2/cameras/playbackURLs"; + + /** + * 查询对讲URL + * 该接å£ç”¨äºŽèŽ·å–监控点的对讲url,为ä¿è¯æ•°æ®çš„安全性,URL设有有效时间,有效时间为5分钟。 + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.2åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String talkURLs = "/api/video/v1/cameras/talkURLs"; + + /** + * 手动抓图 + * 该接å£ç”¨äºŽæ‰‹åŠ¨è§¦å‘设备抓图,返回图片的地å€ï¼ŒæŠ“图å‰è¯·ç¡®ä¿å¹³å°ä¸Šå·²é…置图片å˜å‚¨ä¿¡æ¯ã€‚抓图时间为触å‘手动抓图命令的时间。 + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.2åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String manualCapture = "/api/video/v1/manualCapture"; + + /** + * 通过å‘ä¸å¿ƒå˜å‚¨æŽ¥å…¥æœåŠ¡ä¸‹å‘é”定/解é”指定编ç 器,指定时间段的录åƒã€‚ + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.4åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String lock = "/api/video/v1/record/lock"; + + + /** + * å¼€å§‹æ‰‹åŠ¨å½•åƒ + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.3åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String manualRecordStart = "/api/video/v1/manualRecord/start"; + + /** + * åœæ¢æ‰‹åŠ¨å½•åƒ + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.5åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String manualRecordStop = "/api/video/v1/manualRecord/stop"; + + /** + * 获å–手动录åƒçŠ¶æ€ + * 综åˆå®‰é˜²ç®¡ç†å¹³å°iSecure Center V1.5åŠä»¥ä¸Šç‰ˆæœ¬ + */ + String manualRecordStatus = "/api/video/v1/manualRecord/status"; + + /** + * 查询手动录åƒç¼–å· + * 该接å£ç”¨äºŽæ ¹æ®ç”¨æˆ·id获å–当å‰ç”¨æˆ·åˆ›å»ºçš„手动录åƒä»»åŠ¡ID,用于获å–手动录åƒçŠ¶æ€å’Œåœæ¢æ‰‹åŠ¨å½•åƒ + */ + String manualRecordSearch = "/api/video/v1/manualRecord/taskId/search"; + + /** + * æ ¹æ®åŒºåŸŸç¼–å·èŽ·å–下一级区域列表v2 + */ + String regionsSubRegions = "/api/resource/v2/regions/subRegions"; + + + /** + * 获å–æ ¹åŒºåŸŸä¿¡æ¯ + */ + String regionsRoot = "/api/resource/v1/regions/root"; + + /** + * 查询区域列表v2 + */ + String regionNodes = "/api/irds/v2/region/nodesByParams"; + + /** + * æ ¹æ®åŒºåŸŸç¼–å·èŽ·å–下级监控点列表 + */ + String regionIndexCodeCameras = "/api/resource/v1/regions/regionIndexCode/cameras"; + + /** + * 获å–ç›‘æŽ§ç‚¹åœ¨çº¿çŠ¶æ€ + */ + String onlineCamera = "/api/nms/v1/online/camera/get"; + + /** + * 获å–ç¼–ç è®¾å¤‡åœ¨çº¿çŠ¶æ€ + */ + String onlineEncodeDevice = "/api/nms/v1/online/encode_device/get"; + + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/constant/RedisConsts.java b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/RedisConsts.java new file mode 100644 index 0000000000000000000000000000000000000000..c2b8719fcae7522b2bab348085c361c2d72cc8dc --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/constant/RedisConsts.java @@ -0,0 +1,28 @@ +package cn.wisenergy.common.constant; + +/** + * redis å¸¸é‡ + */ +public class RedisConsts { + /****************************** åŽå°ç®¡ç†ç«¯ç¼“å˜è®¾ç½®å¼€å§‹ ******************************/ + // 系统setting + public static final String SYSTEM_SETTING = "system:setting:setting"; + // 接å£Tokenå‚数设置 + public final static String ADMIN_ACCTNAME = "admin:acctName:"; + public final static int ADMIN_ACCTNAME_EXPIRE = 60 * 60 * 24 * 30; + /****************************** åŽå°ç®¡ç†ç«¯ç¼“å˜è®¾ç½®ç»“æŸ ******************************/ + + /************************** shiro 设置开始 ******************************** */ + // shiroSessionçš„redis-key + public static final String ADMIN_SHIRO_SESSION_KEY = "admin:shiro_redis_session:"; + // shiroSession的过期时间,å•ä½ï¼šç§’,æ¤å€¼é¡»å¤§äºŽspring-cache.xmlä¸çš„全局session有效期 + public static final int ADMIN_SHIRO_SESSION_EXPIRE = 3600; + // shiroRealmçš„redis-key + public static final String ADMIN_SHIRO_REALM_KEY = "admin:shiro_redis_realm:"; + // shiroRealm的过期时间,å•ä½ï¼šç§’,设置与SHIRO_SESSION_EXPIREç›¸ç‰ + public static final int ADMIN_SHIRO_REALM_EXPIRE = 3600; + /************************** shiro è®¾ç½®ç»“æŸ ******************************** */ + + public static final String JWT_ACCESS_TOKEN = "jwt_access_token_"; + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/enums/MenuTypeEnum.java b/wisenergy-common/src/main/java/cn/wisenergy/common/enums/MenuTypeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..d466d438e06dbbe26153b510a0a0c89e2b179c57 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/enums/MenuTypeEnum.java @@ -0,0 +1,29 @@ +package cn.wisenergy.common.enums; + +/** + * èœå•ç±»åž‹æžšä¸¾ + */ +public enum MenuTypeEnum { + /** + * 目录 + */ + CATALOG(0), + /** + * èœå• + */ + MENU(1), + /** + * 按钮 + */ + BUTTON(2); + + private int value; + + MenuTypeEnum(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/enums/RespCodeEnum.java b/wisenergy-common/src/main/java/cn/wisenergy/common/enums/RespCodeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..c57593dbc932fc14f1376073c88144532c2676e3 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/enums/RespCodeEnum.java @@ -0,0 +1,98 @@ +package cn.wisenergy.common.enums; + +/** + * å“应ç 基类 + * + * @author wyy + * @data 2019/08/15 + */ +public enum RespCodeEnum { + /********************* SpringMBoot 系统异常 **********************/ + MIS_REQ_PARAM("400", "请求å‚数丢失"), + NO_AUTH_REQUEST("401", "未授æƒ"), + REJECT_REQUEST("403", "未授æƒ"), + AUTH_ERROR("40104", "æƒé™è®¤è¯å¤±è´¥"), + RESOURCE_NOT_FOUND("404", "请求的资æºä¸å˜åœ¨"), + METHOD_NOT_SUPPORTED("405", "ä¸æ”¯æŒçš„请求方法"), + MEDIA_TYPE_NOT_ACCEPT("406", "æ— æ³•æŽ¥å—请求ä¸çš„媒体类型"), + REQUEST_TIME_OUT("408", "æ— æ³•æŽ¥å—请求ä¸çš„媒体类型"), + MEDIA_TYPE_NOT_SUPPORTED("415", "ä¸æ”¯æŒçš„媒体类型"), + SERVER_ERROR("500", "获å–æ•°æ®å¼‚常"), + + /* ******************** 业务自定义异常 ********************* */ + RSA_PRIVATE_KEY_ERROR("1001", "生æˆRSAéžå¯¹ç§°åŠ 密公钥出错"), + RSA_NOT_EXIST("1002", "RSAéžå¯¹ç§°åŠ 密公钥ä¸å˜åœ¨"), + RSA_DECRYPTION_ERROR("1003", "RSA解密错误"), + REQUIRED_IDENTIFY_NOT_EXIST("1005", "è¯·æ±‚æ ‡è¯†å¯¹è±¡ä¸å˜åœ¨"), + ILLEGAL_PARAMETER("1006", "éžæ³•å‚æ•°"), + MISS_PARAMETER("1007", "缺少必须的å‚æ•°"), + ACCT_NOT_EXIST("1007", "è´¦å·ä¸å˜åœ¨"), + ACCT_OR_ACCOPASS_ERROR("1009", "è´¦å·æˆ–密ç 错误"), + ACCT_HAS_FROZEN("1010", "è´¦å·å·²å†»ç»“"), + NOT_LOGIN_ERROR("1011", "用户未登录"), + CAPTCHA_CODE_INVALID("1012", "验è¯ç 失效"), + CAPTCHA_CODE_ERROR("1013", "验è¯ç 错误"), + NO_DATA("1004", "æ•°æ®ä¸ºç©º"), + CAPTCHA_EXIST("1005", "验è¯ç å·²å‘é€ï¼Œè¯·ç¨ç‰"), + TOKEN_IS_NOT_MISSING("40101", "TOKENæ— æ•ˆ"), + TOKEN_IS_NOT_TIMEOUT("40102", "TOKEN超时,请检查TOKEN的有效期"), + TOKEN_IS_NOT_ERROR("40103", "TOKEN解æžå¼‚常"), + DATA_AUTH_UNAUTHORIZED("40105", "æ•°æ®æƒé™ä¸è¶³"), + USERNAME_IS_NOT_ERROR("2001", "用户åä¸èƒ½ä¸ºç©º"), + USERNAME_IS_EXIST_ERROR("2002", "用户åå·²å˜åœ¨"), + EMPLOYEE_IS_NULL_ERROR("2003", "人员编å·ä¸èƒ½ä¸ºç©º"), + EMPLOYEE_IS_NOT_EXIST_ERROR("2004", "该员工ä¸å˜åœ¨"), + USER_EXIST_EMPLOYEE_ERROR("2005", "该用户已分é…人员"), + USER_IS_NOT_EXIST_ERROR("2006", "该用户ä¸å˜åœ¨"), + USER_IS_NOT_ERROR("2000", "用户ä¸èƒ½ä¸ºç©º"); + + + /** + * 错误编ç + */ + public String code; + + /** + * 错误编ç ä¿¡æ¯ + */ + public String msg; + + /** + * æž„é€ å‡½æ•° + * + * @param code ç¼–ç + * @param msg ç¼–ç ä¿¡æ¯ + */ + RespCodeEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + + /** + * 获å–ç¼–ç + */ + public String getCode() { + return code; + } + + /** + * 设置编ç + */ + public void setCode(String code) { + this.code = code; + } + + /** + * 获å–ç¼–ç ä¿¡æ¯ + */ + public String getMsg() { + return msg; + } + + /** + * 设置编ç ä¿¡æ¯ + */ + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/expection/BaseException.java b/wisenergy-common/src/main/java/cn/wisenergy/common/expection/BaseException.java new file mode 100644 index 0000000000000000000000000000000000000000..0c4a578c442ff24fda02517701f869ec1627d1a2 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/expection/BaseException.java @@ -0,0 +1,38 @@ +package cn.wisenergy.common.expection; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 自定义异常 + */ +@Data +@EqualsAndHashCode(callSuper=false) +public class BaseException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private String msg; + private int code = 500; + + public BaseException(String msg) { + super(msg); + this.msg = msg; + } + + public BaseException(String msg, Throwable e) { + super(msg, e); + this.msg = msg; + } + + public BaseException(String msg, int code) { + super(msg); + this.msg = msg; + this.code = code; + } + + public BaseException(String msg, int code, Throwable e) { + super(msg, e); + this.msg = msg; + this.code = code; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/expection/BaseExceptionHandler.java b/wisenergy-common/src/main/java/cn/wisenergy/common/expection/BaseExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..5f8c37608b24e18e01eba076b4e3484534b122e7 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/expection/BaseExceptionHandler.java @@ -0,0 +1,46 @@ +package cn.wisenergy.common.expection; + +import cn.wisenergy.common.utils.R; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.AuthorizationException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.NoHandlerFoundException; + +/** + * 统一异常处ç†å™¨ + * @author lut + */ +@Slf4j +@RestControllerAdvice +public class BaseExceptionHandler { + + /** + * 处ç†è‡ªå®šä¹‰å¼‚常 + */ + @ExceptionHandler(BaseException.class) + public R<?> handleRRException(BaseException e){ + log.error(e.getMessage(), e); + return R.error(e.getCode(), e.getMsg()); + } + + @ExceptionHandler(NoHandlerFoundException.class) + public R<?> handlerNoFoundException(NoHandlerFoundException e) { + log.error(e.getMessage(), e); + return R.error(404, "路径ä¸å˜åœ¨ï¼Œè¯·æ£€æŸ¥è·¯å¾„是å¦æ£ç¡®"); + } + + @ExceptionHandler(DuplicateKeyException.class) + public R<?> handleDuplicateKeyException(DuplicateKeyException e){ + log.error(e.getMessage(), e); + return R.error("æ•°æ®åº“ä¸å·²å˜åœ¨è¯¥è®°å½•"); + } + + @ExceptionHandler(AuthorizationException.class) + public R<?> handleAuthorizationException(AuthorizationException e){ + log.error(e.getMessage(), e); + return R.error("没有æƒé™ï¼Œè¯·è”系管ç†å‘˜æŽˆæƒ"); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/BaseUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/BaseUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..044b49b6547605705ba561026a307292f86af0d7 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/BaseUtil.java @@ -0,0 +1,182 @@ +package cn.wisenergy.common.utils; + +import com.google.common.base.Joiner; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 工具类 + * + * @author lut + */ +@Slf4j +public class BaseUtil { + + /** + * 下载文件header头 + */ + private static final String FileHeader = "attachment;filename=\"%1$s\";filename*=utf-8''%1$s"; + + /** + * æ— å‚æ•°url转æ¢æˆæœ‰å‚url + * + * @param url + * @param params + * @return + */ + public static String getParamsUrl(String url, Map<String, Object> params) { + if (!params.isEmpty()) { + return Joiner.on("?").join(url, Joiner.on("&").join(params.keySet().stream() + .map(o -> String.format("%1$s={%1$s}", o)).collect(Collectors.toList()))); + } + return url; + } + + /** + * 设置下载文件å称(解决编ç 问题) + * + * @param response + * @param fileName + */ + public static void setDownloadFileHeader(HttpServletResponse response, String fileName) { + // IE8兼容 + response.setHeader("Cache-Control", "must-revalidate"); + response.setHeader("Cache-Control", "post-check=0"); + response.setHeader("Cache-Control", "pre-check=0"); + // 文件å称 + response.setContentType("application/force-download"); + response.setHeader("Content-Disposition", String.format(FileHeader, getEncodeFileName(fileName))); + } + + /** + * 获å–ç¼–ç 文件å称 + * + * @param fileName + * @return + */ + private static String getEncodeFileName(String fileName) { + try { + return URLEncoder.encode(fileName, "utf-8").replaceAll("\\+", "%20"); + } catch (Exception e) { + log.error("文件å转ç 失败:{}", e); + } + return fileName; + } + + + /** + * æŒ‰æ—¥åŽ†æ—¥æœŸå¢žåŠ + */ + public static Date addMonth(Date d1, int month) { + // 创建实例 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(d1); + //日期 + calendar.add(Calendar.MONTH, month); + // 一个月åŽçš„日期(Date类型) + Date date = calendar.getTime(); + return date; + } + + + /** + * æŒ‰æ—¥åŽ†æ—¥æœŸå¢žåŠ + */ + public static Date addDay(Date d1, int day) { + // 创建实例 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(d1); + // 一个月åŽçš„日期 + calendar.add(Calendar.DAY_OF_YEAR, day); + // 一个月åŽçš„日期(Date类型) + Date date = calendar.getTime(); + return date; + } + + /** + * æ—¥æœŸæ·»åŠ + * + * @param date + * @param day + * @return + */ + public static Date addDate(Date date, int day) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.DATE, day); + date = cal.getTime(); + return date; + } + + /** + * è¯´æ˜Žï¼šæ—¥æœŸå¢žåŠ ä¸€ä¸ªæœˆï¼ŒèŽ·å¾—ä¸€ä¸ªæœˆåŽçš„日期 + * + * @param str1 + * @return Date + */ + public static Date add1Month(String str1) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + try { + return addMonth(sdf.parse(str1), 1); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * è¯´æ˜Žï¼šæ—¥æœŸå¢žåŠ ä¸‰ä¸ªæœˆï¼ŒèŽ·å¾—ä¸‰ä¸ªæœˆåŽçš„日期 + * + * @param str1 + * @return Date + */ + public static Date add3Month(String str1) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + try { + return addMonth(sdf.parse(str1), 3); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * è¯´æ˜Žï¼šæ—¥æœŸå¢žåŠ å二个月,获得一年åŽçš„日期 + */ + public static Date add1Year(String str1) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + try { + return addMonth(sdf.parse(str1), 12); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 通过出生日期获å–年龄 + * + * @param birth + * @param deadDate + * @return + */ + public static int getAgeByBirth(Date birth, Date deadDate) { + // 判定出生日期是å¦å˜åœ¨ + if (birth != null) { + return birth.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() + .until(deadDate != null ? deadDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : LocalDate.now()) + .getYears(); + } + return 0; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ByteUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ByteUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..45d7ab87ebd7601bcc6f4507c10a007ae18dbcff --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ByteUtil.java @@ -0,0 +1,216 @@ +package cn.wisenergy.common.utils; + +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; + +/** + * å—节转æ¢å·¥å…·ç±» + */ +public class ByteUtil { + + /** + * å—节数组转å—符数组 + * + * @param bytes + * @return + */ + public static char[] byteArrTocharArr(byte[] bytes) { + Charset cs = Charset.forName("UTF-8"); + ByteBuffer bb = ByteBuffer.allocate(bytes.length); + bb.put(bytes); + bb.flip(); + CharBuffer cb = cs.decode(bb); + return cb.array(); + } + + /** + * char数组转Byte数组 + * + * @param chars + * @return + */ + public static byte[] charArrToByteArr(char[] chars) { + Charset cs = Charset.forName("UTF-8"); + CharBuffer cb = CharBuffer.allocate(chars.length); + cb.put(chars); + cb.flip(); + ByteBuffer bb = cs.encode(cb); + return bb.array(); + } + + public static byte[] hexStringToByte(String hex) { + int len = (hex.length() / 2); + byte[] result = new byte[len]; + char[] achar = hex.toCharArray(); + for (int i = 0; i < len; i++) { + int pos = i * 2; + result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1])); + } + return result; + } + + private static byte toByte(char c) { + byte b = (byte) "0123456789ABCDEF".indexOf(c); + return b; + } + + /** + * 把å—节数组转æ¢æˆ16进制å—符串 + * + * @param bArray + * @return + */ + public static final String bytesToHexString(byte[] bArray) { + StringBuffer sb = new StringBuffer(bArray.length); + String sTemp; + for (int i = 0; i < bArray.length; i++) { + sTemp = Integer.toHexString(0xFF & bArray[i]); + if (sTemp.length() < 2) + sb.append(0); + sb.append(sTemp.toUpperCase()); + } + return sb.toString(); + } + + /** + * 把å—节数组转æ¢ä¸ºå¯¹è±¡ + * + * @param bytes + * @return + * @throws IOException + * @throws ClassNotFoundException + */ + public static final Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException { + ByteArrayInputStream in = new ByteArrayInputStream(bytes); + ObjectInputStream oi = new ObjectInputStream(in); + Object o = oi.readObject(); + oi.close(); + return o; + } + + /** + * 把å¯åºåˆ—化对象转æ¢æˆå—节数组 + * + * @param s + * @return + * @throws IOException + */ + public static final byte[] objectToBytes(Object s) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ObjectOutputStream ot = new ObjectOutputStream(out); + ot.writeObject(s); + ot.flush(); + ot.close(); + return out.toByteArray(); + } + + public static final String objectToHexString(Serializable s) throws IOException { + return bytesToHexString(objectToBytes(s)); + } + + public static final Object hexStringToObject(String hex) throws IOException, ClassNotFoundException { + return bytesToObject(hexStringToByte(hex)); + } + + /** + * @函数功能: BCDç 转为10进制串(阿拉伯数æ®) + * @输入å‚æ•°: BCDç + * @输出结果: 10进制串 + */ + public static String bcd2Str(byte[] bytes) { + StringBuffer temp = new StringBuffer(bytes.length * 2); + + for (int i = 0; i < bytes.length; i++) { + temp.append((byte) ((bytes[i] & 0xf0) >>> 4)); + temp.append((byte) (bytes[i] & 0x0f)); + } + return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp.toString().substring(1) : temp.toString(); + } + + /** + * @函数功能: 10进制串转为BCDç + * @输入å‚æ•°: 10进制串 + * @输出结果: BCDç + */ + public static byte[] str2Bcd(String asc) { + int len = asc.length(); + int mod = len % 2; + + if (mod != 0) { + asc = "0" + asc; + len = asc.length(); + } + + byte abt[] = new byte[len]; + if (len >= 2) { + len = len / 2; + } + + byte bbt[] = new byte[len]; + abt = asc.getBytes(); + int j, k; + + for (int p = 0; p < asc.length() / 2; p++) { + if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) { + j = abt[2 * p] - '0'; + } else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) { + j = abt[2 * p] - 'a' + 0x0a; + } else { + j = abt[2 * p] - 'A' + 0x0a; + } + + if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) { + k = abt[2 * p + 1] - '0'; + } else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) { + k = abt[2 * p + 1] - 'a' + 0x0a; + } else { + k = abt[2 * p + 1] - 'A' + 0x0a; + } + + int a = (j << 4) + k; + byte b = (byte) a; + bbt[p] = b; + } + return bbt; + } + + /** + * 低ä½åˆ°é«˜ä½æŽ’列的å—节数组 + * + * @param byte2Arr + * @return + */ + public static int bytesTo16Int(byte[] byte2Arr) { + return (byte2Arr[0] & 0xFF) | (byte2Arr[1] << 8); + } + + /** + * 低ä½åˆ°é«˜ä½æŽ’列的å—节数组 + * + * @param byte4Arr + * @return + */ + public static int bytesTo32Int(byte[] byte4Arr) { + return (byte4Arr[0] & 0xFF) | ((byte4Arr[1] & 0xFF) << 8) | ((byte4Arr[2] & 0xFF) << 16) | ((byte4Arr[3] & 0xFF) << 24); + } + + /** + * 低ä½åˆ°é«˜ä½ + * + * @param b + * @return + */ + public static float bytesTo32Float(byte[] b) { + int l; + l = b[0]; + l &= 0xff; + l |= ((long) b[1] << 8); + l &= 0xffff; + l |= ((long) b[2] << 16); + l &= 0xffffff; + l |= ((long) b[3] << 24); + return Float.intBitsToFloat(l); + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/CardNumberUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/CardNumberUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c53c92c68b7e4f9de658a157446481e7f4111775 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/CardNumberUtil.java @@ -0,0 +1,24 @@ +package cn.wisenergy.common.utils; + +import cn.hutool.core.lang.UUID; + +import java.io.Serializable; +import java.math.BigInteger; + +/** + * 生æˆå……值å¡åå¡å¡å·å·¥å…·ç±» + */ +public class CardNumberUtil implements Serializable { + private static final long serialVersionUID = -9056417839913098262L; + + //å—符串长度 + static final int LENGTH= 11; + + public static String cardNumber() { + //æ·»åŠ å一ä½æ•°å—生æˆå¡å· + String uuid = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16)); + + return uuid.toString().substring(0,LENGTH); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/DateUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/DateUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..b5e1be8d05ce6b1e8278f678e3628e66e59a5381 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/DateUtil.java @@ -0,0 +1,804 @@ +package cn.wisenergy.common.utils; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +public class DateUtil { + + public static final String[] YEAR_MONTHS = new String[]{"01", "02", "03", + "04", "05", "06", "07", "08", "09", "10", "11", "12"}; + + public static final String[] CHINA_MONTHS = new String[]{"一月", "二月", + "三月", "四月", "五月", "å…月", "七月", "八月", "ä¹æœˆ", "å月", "å一月", "å二月"}; + + public static final String[] DAY_HOURS = new String[]{"00", "01", "02", + "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", + "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"}; + + public static final String[] MONTH_DAYS = new String[]{"01", "02", "03", + "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", + "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", + "26", "27", "28", "29", "30", "31"}; + + /** + * 生æˆå¤šå±‚日期目录 + * + * @param level 目录层数(最多3层)å³:月(200906)-æ—¥(0605)-æ—¶(01) + * @return + */ + public static String generateDateDir(int level) { + if (level < 1 || level > 5) { + level = 3;// 默认3 + } + SimpleDateFormat levelOne = new SimpleDateFormat("yyyyMM"); + SimpleDateFormat levelTwo = new SimpleDateFormat("MMdd"); + SimpleDateFormat levelThree = new SimpleDateFormat("HH"); + SimpleDateFormat levelFour = new SimpleDateFormat("yyyy-MM-dd"); + + String s = "/"; + String destDirectory = ""; + Date date = new Date(System.currentTimeMillis()); + + switch (level) { + case 1: + destDirectory += levelOne.format(date); + break; + case 2: + destDirectory += levelOne.format(date) + s + levelTwo.format(date); + break; + case 3: + destDirectory += levelOne.format(date) + s + levelTwo.format(date) + + s + levelThree.format(date); + break; + case 4: + destDirectory = levelFour.format(date); + break; + case 5: + destDirectory = levelFour.format(getYesterday()); + break; + } + return destDirectory; + } + + /** + * 获å–å¹´ + * + * @param date + * @return + */ + public static int getYear(Date date) { + return getValue(date, Calendar.YEAR); + } + + /** + * 获å–月 + * + * @param date + * @return + */ + public static int getMonth(Date date) { + return getValue(date, Calendar.MONTH); + } + + /** + * 获å–星期 + * + * @param date + * @return + */ + public static int getWeek(Date date) { + return getValue(date, Calendar.DAY_OF_WEEK); + } + + /** + * 获å–æ—¥ + * + * @param date + * @return + */ + public static int getDay(Date date) { + return getValue(date, Calendar.DAY_OF_MONTH); + } + + /** + * 获å–å°æ—¶ + * + * @param date + * @return + */ + public static int getHour(Date date) { + return getValue(date, Calendar.HOUR_OF_DAY); + } + + /** + * 获å–分钟 + * + * @param date + * @return + */ + public static int getMinute(Date date) { + return getValue(date, Calendar.MINUTE); + } + + /** + * 获å–分钟 + * + * @param date + * @return + */ + public static int getSecond(Date date) { + return getValue(date, Calendar.SECOND); + } + + /** + * @param date + * @param field + * @return + */ + private static int getValue(Date date, int field) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(date.getTime()); + return calendar.get(field); + } + + /** + * 解æžæ—¥æœŸ + * + * @param strDate + * @return + * @throws ParseException + */ + public static Date convertStrToDate(String strDate, String pattern) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.parse(strDate); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * å—符串转calendar + * + * @param date 日期的å—符串 + * @param pattern æ—¥æœŸçš„æ ¼å¼ + * @return + */ + public static Calendar convertStrToCalendar(String date, String pattern) { + Calendar calendar = null; + try { + calendar = Calendar.getInstance(); + SimpleDateFormat format = new SimpleDateFormat(pattern); + calendar.setTime(format.parse(date)); + } catch (Exception e) { + e.printStackTrace(); + } + return calendar; + } + + /** + * æ ¼å¼åŒ–dateä¸ºæŒ‡å®šçš„æ ¼å¼å—符串 + * + * @param date + * @param pattern + * @return + */ + public static String convertDateToStr(Date date, String pattern) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(date); + } + + /** + * 转æ¢æ—¥æœŸä¸ºå—符串 + * + * @param date + * @return + */ + public static String convertDateToYMDStr(Date date) { + if (date == null) { + return null; + } + return new SimpleDateFormat("yyyy-MM-dd").format(date); + } + + /** + * ç»™æ—¥æœŸå¢žåŠ å€¼ + * + * @param date + * @param field + * @param amount + * @return + */ + public static Date add(Date date, int field, int amount) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(date.getTime()); + calendar.add(field, amount); + return new Date(calendar.getTimeInMillis()); + } + + /** + * å–上个月的第一天 + */ + public static Calendar getLastMonFirstDay(Calendar calendar) { + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + if (month > 0) { + month--; + } else { + year--; + month = 11; + } + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month); + calendar.set(Calendar.DAY_OF_MONTH, 1); + return calendar; + } + + /** + * å–上个月的最åŽä¸€å¤© + */ + public static Calendar getLastMonLastDay(Calendar calendar) { + calendar.set(Calendar.DAY_OF_MONTH, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + return calendar; + } + + /** + * å–得上一天 + */ + public static Calendar getLastDay(Calendar calendar) { + calendar.add(Calendar.DAY_OF_YEAR, -1); + return calendar; + } + + /** + * å–上个周的最åŽä¸€å¤© + */ + public static Calendar getLastweekLastDay(Calendar calendar) { + calendar.add(Calendar.SUNDAY, -7); + return calendar; + } + + /** + * å–一天ä¸æœ€å¤§æ—¶é—´ 毫秒为999 + * + * @param day + * @return + * @throws ParseException + */ + public static Date getEndOfDay(Date day) { + + if (day == null) { + day = new Date(); + } + + Calendar cal = Calendar.getInstance(); + cal.setTime(day); + cal.set(Calendar.HOUR_OF_DAY, cal.getMaximum(Calendar.HOUR_OF_DAY)); + cal.set(Calendar.MINUTE, cal.getMaximum(Calendar.MINUTE)); + cal.set(Calendar.SECOND, cal.getMaximum(Calendar.SECOND)); + cal.set(Calendar.MILLISECOND, cal.getMaximum(Calendar.MILLISECOND)); + + return cal.getTime(); + } + + /** + * å–一天ä¸æœ€å¤§æ—¶é—´ 毫秒为0 + * + * @param day + * @return + * @throws ParseException + */ + public static Date getEndZeroMillOfDay(Date day) { + + if (day == null) { + day = new Date(); + } + + Calendar cal = Calendar.getInstance(); + cal.setTime(day); + cal.set(Calendar.HOUR_OF_DAY, cal.getMaximum(Calendar.HOUR_OF_DAY)); + cal.set(Calendar.MINUTE, cal.getMaximum(Calendar.MINUTE)); + cal.set(Calendar.SECOND, cal.getMaximum(Calendar.SECOND)); + cal.set(Calendar.MILLISECOND, 0); + + return cal.getTime(); + } + + /** + * å–一天ä¸æœ€å°æ—¶é—´ + * + * @param day + * @return + * @throws ParseException + */ + public static Date getStartOfDay(Date day) { + + if (day == null) { + day = new Date(); + } + + Calendar cal = Calendar.getInstance(); + cal.setTime(day); + cal.set(Calendar.HOUR_OF_DAY, cal.getMinimum(Calendar.HOUR_OF_DAY)); + cal.set(Calendar.MINUTE, cal.getMinimum(Calendar.MINUTE)); + cal.set(Calendar.SECOND, cal.getMinimum(Calendar.SECOND)); + cal.set(Calendar.MILLISECOND, cal.getMinimum(Calendar.MILLISECOND)); + + return cal.getTime(); + } + + /** + * å–今天的最å°æ—¶é—´ + * + * @return + * @throws ParseException + */ + public static Date getTodayStart() { + return getStartOfDay(new Date()); + } + + /** + * 计算两个日期之间相差的天数 + * + * @param startDate 较å°çš„时间 + * @param endDate 较大的时间 + * @return 相差天数 + */ + public static int daysBetween(Date startDate, Date endDate) { + Calendar cal = Calendar.getInstance(); + cal.setTime(startDate); + long time1 = cal.getTimeInMillis(); + cal.setTime(endDate); + long time2 = cal.getTimeInMillis(); + long betweenDays = (time2 - time1) / (1000 * 3600 * 24); + return Integer.parseInt(String.valueOf(betweenDays)); + } + + /** + * 获å–当å‰æœˆä»½å¤©æ•°çš„数组 + * + * @return + */ + public static String[] getCurrentMonthDaysArray() { + return getMonthDaysArray(new Date()); + } + + /** + * 获å–指定月份天数的数组 + * + * @return + */ + public static String[] getMonthDaysArray(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + String[] array = new String[maxDay]; + System.arraycopy(MONTH_DAYS, 0, array, 0, maxDay); + return array; + } + + /** + * 获å–当å‰æœˆçš„第一天 + * + * @return + */ + public static Date getCurrentFirstDayOfMonth() { + return getFirstDayOfMonth(new Date()); + } + + /** + * 获å–当å‰æœˆçš„ + * + * @return + */ + public static Date getCurrentLastDayOfMonth() { + return getLastDayOfMonth(new Date()); + } + + /** + * 获å–指定时间ä¸æœˆçš„第一天 + * + * @return + */ + public static Date getFirstDayOfMonth(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH, 1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + /** + * 获å–指定时间ä¸æœˆçš„ + * + * @return + */ + public static Date getLastDayOfMonth(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH, + calendar.getMaximum(Calendar.DAY_OF_MONTH)); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + return calendar.getTime(); + } + + /** + * 获å–当å‰å¹´çš„第一天 + * + * @return + */ + public static Date getCurrentFirstDayOfYear() { + return getFirstDayOfYear(new Date()); + } + + /** + * 获å–指定年份的第一天 + * + * @return + */ + public static Date getFirstDayOfYear(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_YEAR, 1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + /** + * 获å–昨天时间 + * + * @return + */ + public static Date getYesterday() { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, -1); + return cal.getTime(); + } + + public/** + * 获å–今天 + */ + static Date getToday() { + Calendar cal = Calendar.getInstance(); + return cal.getTime(); + } + + /** + * 获å–å‰ä¸€å¤© + * + * @return + */ + public static Date getYesterday(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.DATE, -1); + return cal.getTime(); + } + + /** + * 获å–åŽä¸€å¤© + * + * @return + */ + public static Date getTomorrow(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.DATE, 1); + return cal.getTime(); + } + + /** + * 获å–å‰ä¸€ä¸ªæœˆ + * + * @return + */ + public static Date getLastMonth(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.MONTH, -1); + return cal.getTime(); + } + + /** + * 获å–åŽä¸€ä¸ªæœˆ + * + * @return + */ + public static Date getNextMonth(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.MONTH, 1); + return cal.getTime(); + } + + /** + * 获å–大写的月份 + * + * @param date + * @return + */ + public static String getChinaMonth(Date date) { + Calendar instance = Calendar.getInstance(); + instance.setTime(date); + return CHINA_MONTHS[instance.get(Calendar.MONTH)]; + } + + /** + * 比较两个时间的时分 + * + * @param date1 + * @param date2 + * @return + */ + public static int compareToHourMin(Date date1, Date date2) { + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(date1); + calendar1.set(Calendar.SECOND, 0); + + Calendar temp = Calendar.getInstance(); + temp.setTime(date2); + + Calendar calendar2 = (Calendar) calendar1.clone(); + calendar2.set(Calendar.HOUR_OF_DAY, temp.get(Calendar.HOUR_OF_DAY)); + calendar2.set(Calendar.MINUTE, temp.get(Calendar.MINUTE)); + calendar2.set(Calendar.SECOND, 0); + + return calendar1.compareTo(calendar2); + } + + /** + * 计算两个日期是å¦æ˜¯ä¸€å‘¨(周一作为一周的开始时间) + * + * @param date1 + * @param date2 + * @return + */ + public static boolean isSameWeek(Date date1, Date date2) { + + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(date1); + calendar1.setFirstDayOfWeek(Calendar.MONDAY); + + Calendar calendar2 = Calendar.getInstance(); + calendar2.setTime(date2); + calendar2.setFirstDayOfWeek(Calendar.MONDAY); + + if (calendar1.get(Calendar.WEEK_OF_YEAR) == calendar2 + .get(Calendar.WEEK_OF_YEAR)) { + return true; + } + + return false; + } + + /** + * æ ¹æ®å¼€å§‹æ—¶é—´å’Œç»“æŸæ—¶é—´è¿”å›žæ—¶é—´æ®µå†…çš„æ—¶é—´é›†åˆ + * + * @param startDate + * @param endDate + * @return List + */ + public static List<Date> getDatesBetweenTwoDate(Date startDate, Date endDate) { + List<Date> dates = new ArrayList<Date>(); + dates.add(startDate);// æŠŠå¼€å§‹æ—¶é—´åŠ å…¥é›†åˆ + Calendar cal = Calendar.getInstance(); + // 使用给定的 Date è®¾ç½®æ¤ Calendar 的时间 + cal.setTime(startDate); + while (true) { + cal.add(Calendar.DAY_OF_MONTH, 1); + if (endDate.after(cal.getTime()) + && !DateUtils.isSameDay(endDate, cal.getTime())) { + dates.add(cal.getTime()); + } else { + break; + } + } + if (startDate.compareTo(endDate) != 0) { + dates.add(endDate);// 把结æŸæ—¶é—´åŠ å…¥é›†åˆ + } + return dates; + } + + /** + * 获å–时间段内的时间å—ç¬¦ä¸²é›†åˆ + * + * @param startDate + * @param endDate + * @param dateFormat + * @return + */ + public static List<String> getDateCollection(Date startDate, Date endDate, + String dateFormat) { + + if (dateFormat == null || StringUtils.equals(dateFormat, "")) { + dateFormat = "yyyy-MM-dd"; + } + List<String> dates = new ArrayList<String>(); + dates.add(DateUtil.convertDateToStr(startDate, dateFormat)); + Calendar cal = Calendar.getInstance(); + // 使用给定的 Date è®¾ç½®æ¤ Calendar 的时间 + cal.setTime(startDate); + while (true) { + cal.add(Calendar.DAY_OF_MONTH, 1); + if (endDate.after(cal.getTime()) + && !DateUtils.isSameDay(endDate, cal.getTime())) { + dates.add(DateUtil.convertDateToStr(cal.getTime(), dateFormat)); + } else { + break; + } + } + dates.add(DateUtil.convertDateToStr(endDate, dateFormat));// 把结æŸæ—¶é—´åŠ å…¥é›†åˆ + return dates; + } + + /** + * 获得æŸä¸ªæœˆçš„æ—¥æœŸè¡¨æ ¼ + * + * @param month + * @return List + */ + public static List<Date> getDateTab(Date month) { + Date startDate = getFirstDayOfMonth(month); + Date endDate = getLastDayOfMonth(month); + Calendar cal1 = Calendar.getInstance(); + Calendar cal2 = Calendar.getInstance(); + cal1.setTime(startDate); + cal2.setTime(endDate); + int i = cal1.get(Calendar.DAY_OF_WEEK); + int j = cal2.get(Calendar.DAY_OF_WEEK); + cal1.add(Calendar.DAY_OF_MONTH, -i + 1); + cal2.add(Calendar.DAY_OF_MONTH, 7 - j); + Date beforeDate = cal1.getTime(); + Date afterDate = cal2.getTime(); + return getDatesBetweenTwoDate(beforeDate, afterDate); + } + + /** + * 转化大写的月份(一月……å二月)为数å—月份(01……12) + * + * @param chinaMonthName + * @return + */ + public static String convertMonthToNum(String chinaMonthName) { + int i = ArrayUtils.indexOf(CHINA_MONTHS, chinaMonthName); + return i > -1 ? YEAR_MONTHS[i] : ""; + } + + /** + * å°†ä¸¤ä¸ªæ—¶é—´æ ¹æ®æŒ‡å®šå¤©æ•°åˆ†å‰²ä¸ºå¤šä¸ªæ—¶é—´æ®µ + * + * @param startDate 开始时间 + * @param endDate 结æŸæ—¶é—´ + * @param fate æ¯ä¸ªæ—¶é—´æ®µé—´éš”的天数 + * @return 分割åŽçš„时间段:[[开始时间,结æŸæ—¶é—´],[开始时间,结æŸæ—¶é—´],...] + */ + public static List<Date[]> toTimeSlot(Date startDate, Date endDate, + Integer fate) { + if (startDate == null || endDate == null) { + /* 开始时间或结æŸæ—¶é—´ä¸ºç©ºè¿”å›žç©ºé›†åˆ */ + return new ArrayList<Date[]>(); + } + List<Date[]> result = new ArrayList<Date[]>(); + /* 间隔天 */ + List<Date> days = getDatesBetweenTwoDate(startDate, endDate); + /* 总天数 */ + Integer dayNumber = days.size(); + if (dayNumber < fate) { + /* 如果间隔天数大于总天数则直接返回开始时间和结æŸæ—¶é—´ */ + result.add(new Date[]{startDate, endDate}); + } else { + /* 时间段个数 */ + Integer size = dayNumber / fate; + /* 余数 */ + Integer remain = dayNumber % fate; + if (remain > 0) { + /* ä½™æ•°å¤§äºŽé›¶åˆ™å°†æ—¶é—´æ®µä¸ªæ•°åŠ ä¸€ */ + size += 1; + } else { + /* å¦åˆ™åˆ™å°†ä½™æ•°è®¾ç½®ä¸ºé—´éš”天数 */ + remain = fate; + } + /* 计算时间段 */ + for (int i = 1; i <= size; i++) { + Integer start = i - 1; + /* 时间段开始时间所在的索引 */ + Integer startIndex = start * fate;// +(start==0?0:1); + /* 时间段结æŸæ—¶é—´æ‰€åœ¨çš„索引 */ + Integer endIndex = startIndex + fate; + if (i == size) { + endIndex = startIndex + (remain - 1); + } + result.add(new Date[]{days.get(startIndex), + days.get(endIndex - (start == 0 ? 1 : 0)) // 如果当å‰æ˜¯ç¬¬ä¸€æ¬¡é历结æŸæ—¶é—´ç´¢å¼•å‡ä¸€ + }); + } + } + return result; + } + + /** + * 获å–指定时间的时间戳ã€æ¯«ç§’】 + * + * @param date + * @return + */ + public static Long getTime(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + return cal.getTimeInMillis(); + } + + /** + * æ ¹æ®å—符串获å–date + */ + public static Date getTime(String date, String format) { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + try { + return dateFormat.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + public static String getTime(Date date, String format) { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(date); + } + + /** + * è®¡ç®—ä¸¤ä¸ªæ—¶é—´ç›¸å·®æ—¶é—´ï¼Œæ ¼å¼ *天*å°æ—¶*分钟*秒 + */ + public static String getDatePoor(Date endDate, Date nowDate) { + + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少å°æ—¶ + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "å°æ—¶" + min + "分钟" + sec + "秒"; + } + + /** + * 计算两个时间相差多少分钟 + */ + public static Long getDateDifferenceMinute(Date endDate, Date nowDate) { + + + long nm = 1000 * 60; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少分钟 + long min = diff / nm; + + return min; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ExcelUtils.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ExcelUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..071e6090892bec6d433976855760e6a722264d05 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ExcelUtils.java @@ -0,0 +1,276 @@ +package cn.wisenergy.common.utils; + + +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDataFormat; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.xmlbeans.impl.piccolo.io.FileFormatException; +import org.springframework.web.multipart.MultipartFile; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class ExcelUtils { + + + private static final String EXTENSION_XLS = "xls"; + private static final String EXTENSION_XLSX = "xlsx"; + + + /** + * 判æ–EXCEL版本 + * + * @param in + * @param filename + * @return + * @throws IOException + */ + public static Workbook getWorkbook(InputStream in, String filename) throws IOException { + Workbook wb = null; + if (filename.endsWith(EXTENSION_XLS)) { + wb = new HSSFWorkbook(in);//Excel 2003 + } else if (filename.endsWith(EXTENSION_XLSX)) { + wb = new XSSFWorkbook(in);//Excel 2007 + } + return wb; + } + + + /** + * æ–‡ä»¶æ ¡éªŒæ˜¯å¦æ˜¯excel + * + * @param filePath + * @throws FileNotFoundException + * @throws FileFormatException + */ + public static void preReadCheck(String fileName) throws FileNotFoundException, + FileFormatException { + // 常规检查 + if (StringUtils.isBlank(fileName)) { + throw new FileNotFoundException("ä¼ å…¥çš„æ–‡ä»¶ä¸å˜åœ¨ï¼š" + fileName); + } + + if (!fileName.endsWith(EXTENSION_XLS) && !fileName.endsWith(EXTENSION_XLSX)) { + throw new FileFormatException("ä¼ å…¥çš„æ–‡ä»¶ä¸æ˜¯excel"); + } + } + + + /** + * 读å–EXCEL + * + * @param filePath + * @throws FileNotFoundException + * @throws FileFormatException + */ + public static List<List<String>> readExcel(MultipartFile file) throws FileNotFoundException, FileFormatException { + // 检查 + preReadCheck(file.getOriginalFilename()); + // 获å–workbook对象 + Workbook workbook = null; + /*InputStream is = new FileInputStream(filePath);*/ + List<List<String>> result = new ArrayList<List<String>>(); + try { + workbook = getWorkbook(file.getInputStream(), file.getOriginalFilename()); + // workbook = WorkbookFactory.create(is); + + int sheetCount = workbook.getNumberOfSheets(); //Sheetçš„æ•°é‡ + // 读文件 一个sheet一个sheetåœ°è¯»å– + for (int numSheet = 0; numSheet < sheetCount; numSheet++) { + Sheet sheet = workbook.getSheetAt(numSheet); + if (sheet == null) { + continue; + } + + int firstRowIndex = sheet.getFirstRowNum(); + int lastRowIndex = sheet.getLastRowNum(); + + if (firstRowIndex != lastRowIndex && lastRowIndex != 0) { + + // 读å–æ•°æ®è¡Œ + for (int rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++) { + Row currentRow = sheet.getRow(rowIndex);// 当å‰è¡Œ + int firstColumnIndex = currentRow.getFirstCellNum(); // 首列 + int lastColumnIndex = currentRow.getLastCellNum();// 最åŽä¸€åˆ— + List<String> rowList = new ArrayList<String>(); + for (int columnIndex = firstColumnIndex; columnIndex < lastColumnIndex; columnIndex++) { + Cell currentCell = currentRow.getCell(columnIndex);// 当å‰å•å…ƒæ ¼ + + String currentCellValue = getCellValue(currentCell, true);// 当å‰å•å…ƒæ ¼çš„值 + rowList.add(currentCellValue); + } + + //行为空的ä¸è¯» + Boolean flag = false; + for (String str : rowList) { + if (!StringUtils.isBlank(str)) { + flag = true; + break; + } + } + if (flag) { + result.add(rowList); + } + } + } + + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + } + return result; + } + + public static List<List<String>> readInlandCompare(String filePath, Integer startSheet, Integer endSheet) throws FileNotFoundException, FileFormatException { + // 检查 + preReadCheck(filePath); + // 获å–workbook对象 + Workbook workbook = null; + InputStream is = new FileInputStream(filePath); + List<List<String>> result = new ArrayList<List<String>>(); + try { + workbook = getWorkbook(is, filePath); + // workbook = WorkbookFactory.create(is); + + int sheetCount = workbook.getNumberOfSheets(); //Sheetçš„æ•°é‡ + // 读文件 一个sheet一个sheetåœ°è¯»å– + for (int numSheet = startSheet; numSheet < endSheet; numSheet++) { + Sheet sheet = workbook.getSheetAt(numSheet); + if (sheet == null) { + continue; + } + + int firstRowIndex = sheet.getFirstRowNum(); + int lastRowIndex = sheet.getLastRowNum(); + + if (firstRowIndex != lastRowIndex && lastRowIndex != 0) { + + // 读å–æ•°æ®è¡Œ + for (int rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++) { + Row currentRow = sheet.getRow(rowIndex);// 当å‰è¡Œ + int firstColumnIndex = currentRow.getFirstCellNum(); // 首列 + int lastColumnIndex = currentRow.getLastCellNum();// 最åŽä¸€åˆ— + List<String> rowList = new ArrayList<String>(); + for (int columnIndex = firstColumnIndex; columnIndex < lastColumnIndex; columnIndex++) { + Cell currentCell = currentRow.getCell(columnIndex);// 当å‰å•å…ƒæ ¼ + + String currentCellValue = getCellValue(currentCell, true);// 当å‰å•å…ƒæ ¼çš„值 + rowList.add(currentCellValue); + } + //行为空的ä¸è¯» + Boolean flag = false; + for (String str : rowList) { + if (!StringUtils.isBlank(str)) { + flag = true; + break; + } + } + if (flag) { + result.add(rowList); + } + } + } + + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + } + return result; + } + + /** + * å–å•å…ƒæ ¼çš„值 + * + * @param cell å•å…ƒæ ¼å¯¹è±¡ + * @param treatAsStr 为true时,当åšæ–‡æœ¬æ¥å–值 (å–到的是文本,ä¸ä¼šæŠŠâ€œ1â€å–æˆâ€œ1.0â€) + * @return + */ + public static String getCellValue(Cell cell, boolean treatAsStr) { + if (cell == null) { + return ""; + } + + /* if (treatAsStr) { + // 虽然excelä¸è®¾ç½®çš„都是文本,但是数å—文本还被读错,如“1â€å–æˆâ€œ1.0†+ // åŠ ä¸Šä¸‹é¢è¿™å¥ï¼Œä¸´æ—¶æŠŠå®ƒå½“åšæ–‡æœ¬æ¥è¯»å– + cell.setCellType(Cell.CELL_TYPE_STRING); + }*/ + //SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + + String cellValue = null; + int cellType = cell.getCellType(); + switch (cellType) { + case Cell.CELL_TYPE_STRING: // 文本 + cellValue = cell.getStringCellValue(); + break; + case Cell.CELL_TYPE_NUMERIC: // æ•°å—ã€æ—¥æœŸ + if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处ç†æ—¥æœŸæ ¼å¼ã€æ—¶é—´æ ¼å¼ + SimpleDateFormat sdf = null; + if (cell.getCellStyle().getDataFormat() == HSSFDataFormat + .getBuiltinFormat("h:mm")) { + sdf = new SimpleDateFormat("HH:mm:ss"); + } else {// 日期 + sdf = new SimpleDateFormat("yyyy-MM-dd"); + } + Date date = cell.getDateCellValue(); + return sdf.format(date); + } else if (cell.getCellStyle().getDataFormat() == 58) { + // 处ç†è‡ªå®šä¹‰æ—¥æœŸæ ¼å¼ï¼šm月dæ—¥(通过判æ–å•å…ƒæ ¼çš„æ ¼å¼id解决,id的值是58) + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + double value = cell.getNumericCellValue(); + Date date = org.apache.poi.ss.usermodel.DateUtil + .getJavaDate(value); + return sdf.format(date); + } else { + double value = cell.getNumericCellValue(); + CellStyle style = cell.getCellStyle(); + DecimalFormat format = new DecimalFormat(); + String temp = style.getDataFormatString(); + // å•å…ƒæ ¼è®¾ç½®æˆå¸¸è§„ + if (temp.equals("General")) { + format.applyPattern("#"); + } + return format.format(value); + } + + case Cell.CELL_TYPE_BOOLEAN: // 布尔型 + cellValue = String.valueOf(cell.getBooleanCellValue()); + break; + case Cell.CELL_TYPE_BLANK: // 空白 + cellValue = cell.getStringCellValue(); + break; + case Cell.CELL_TYPE_ERROR: // 错误 + cellValue = "错误"; + break; + case Cell.CELL_TYPE_FORMULA: // å…¬å¼ + /* try { + cellValue = cell.getStringCellValue(); + } catch (IllegalStateException e) { + cellValue = String.valueOf(cell.getNumericCellValue()); + }*/ + try { + cellValue = String.valueOf(cell.getNumericCellValue()); + } catch (IllegalStateException e) { + cellValue = String.valueOf(cell.getRichStringCellValue()); + } + break; + default: + cellValue = "错误"; + } + return cellValue; + } + + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/FileUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/FileUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..e22cd2403e83d330d50f966b3848e2ba03ff82b6 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/FileUtil.java @@ -0,0 +1,87 @@ +package cn.wisenergy.common.utils; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; + +import java.io.*; +import java.util.Properties; + +@Slf4j +public class FileUtil { + + /** + * @param filePath + * @return + * @throws IOException + * @Title: readProperties + * @Description: 读å–propé…置文件获å–Properties对象 + */ + public static Properties readProperties(String filePath) throws IOException { + // 创建Properties文件 + Properties prop = new Properties(); + // 获å–æµ + InputStream input = FileUtil.class.getClassLoader().getResourceAsStream(filePath); + // å¯¼å…¥æµ + prop.load(input); + return prop; + } + + /** + * @param filePath 文件的路径 + * @return + * @Title: readJsonFile + * @Description: å°†JSON文件读å–为JSONå—符串 + */ + public static String readJsonFile(String filePath) { + String laststr = ""; + File file = new File(filePath);// 打开文件 + BufferedReader reader = null; + try { + FileInputStream in = new FileInputStream(file); + reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));// 读å–文件 + String tempString = null; + while ((tempString = reader.readLine()) != null) { + laststr = laststr + tempString; + } + reader.close(); + } catch (IOException e) { + log.error(e.getMessage(),e); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException el) { + log.error(el.getMessage(),el); + } + } + } + return laststr; + } + + /** + * å°†URL远程路径文件转æˆInputStream返回 + * + * @param url + * è¿œç¨‹åœ°å€ + * @return InputStream + */ + public static InputStream remotePathToStream(String url) { + InputStream inputStream = null; + try { + CloseableHttpClient httpsClient = HttpUtil.createSSLClientDefault(); + HttpGet get = new HttpGet(url); + HttpResponse response = httpsClient.execute(get); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + inputStream = response.getEntity().getContent(); + } + } catch (Exception e) { + ExceptionUtils.getStackTrace(e); + } + return inputStream; + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/HttpContextUtils.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/HttpContextUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..a86f0ef4547c9ca435d1351950ffcc7c6247daee --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/HttpContextUtils.java @@ -0,0 +1,24 @@ +package cn.wisenergy.common.utils; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +public class HttpContextUtils { + + public static HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + public static String getDomain() { + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + } + + public static String getOrigin() { + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader("Origin"); + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/HttpUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/HttpUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..8ea1a3e56037d974e2cff6d1cce2fd7fbff38e44 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/HttpUtil.java @@ -0,0 +1,770 @@ +package cn.wisenergy.common.utils; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.beanutils.ConvertUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.SSLContexts; +import org.apache.http.conn.ssl.TrustStrategy; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; + +import javax.net.ssl.SSLContext; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class HttpUtil { + + private static final Logger log = LoggerFactory.getLogger(HttpUtil.class); + + private static final int TIME_OUT = 60000; + + private static RequestConfig.Builder requestConfigBuilder = null; + + /** + * 创建httpså议的client + * + * @return CloseableHttpClient + */ + public static CloseableHttpClient createSSLClientDefault() { + try { + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + //信任所有 + public boolean isTrusted(X509Certificate[] chain, + String authType) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); + return HttpClients.custom().setDefaultRequestConfig(getDefaultRequestConfig()).setSSLSocketFactory(sslsf).build(); + } catch (KeyManagementException e) { + log.error("创建SSLClientDefault失败:{}", ExceptionUtils.getFullStackTrace(e)); + } catch (NoSuchAlgorithmException e) { + log.error("创建SSLClientDefault失败:{}" + ExceptionUtils.getFullStackTrace(e)); + } catch (KeyStoreException e) { + log.error("创建SSLClientDefault失败:{}" + ExceptionUtils.getFullStackTrace(e)); + } + return createClientDefault(); + } + + /** + * 创建httpså议的client + * + * @return CloseableHttpClient + */ + public static CloseableHttpClient createClientDefault() { + return HttpClients.custom().setDefaultRequestConfig(getDefaultRequestConfig()).build(); + } + + /** + * 获å–默认Requesté…ç½® + * + * @return + */ + private static RequestConfig getDefaultRequestConfig() { + if (requestConfigBuilder == null) { + requestConfigBuilder = RequestConfig.custom().setConnectTimeout(TIME_OUT).setSocketTimeout(TIME_OUT) + .setConnectionRequestTimeout(TIME_OUT).setStaleConnectionCheckEnabled(true); + } + return requestConfigBuilder.build(); + } + + /** + * Httpåè®®POST请求 + * + * @param url è¯·æ±‚åœ°å€ + * @param parameterMap 请求å‚æ•° + * @param charsetCode ç¼–ç 类型 + * @return + */ + public static String post(String url, Map<String, Object> parameterMap, String charsetCode) { + // å‚æ•°ä¸ºç©ºåˆ¤æ– + Assert.hasText(url, "Http请求URL为空"); + + // åˆå§‹åŒ–Http客户端 + String result = null; + CloseableHttpClient httpClient = createClientDefault(); + try { + HttpPost httpPost = new HttpPost(url); + List<NameValuePair> nameValuePairs = getNameValuePair(parameterMap); + httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, charsetCode)); + CloseableHttpResponse httpResponse = httpClient.execute(httpPost); + HttpEntity httpEntity = httpResponse.getEntity(); + result = EntityUtils.toString(httpEntity, charsetCode); + EntityUtils.consume(httpEntity); + } catch (Exception e) { + log.error("HTTP_POSTã€ParamMap】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + log.error("HTTP_POSTã€ParamMap】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + + return result; + } + + /** + * Httpåè®®POST请求 + * + * @param url è¯·æ±‚åœ°å€ + * @param paramStr 请求å‚æ•° + * @param charsetCode ç¼–ç 类型 + * @return + */ + public static String post(String url, String paramStr, String charsetCode) { + // å‚æ•°ä¸ºç©ºåˆ¤æ– + Assert.hasText(url, "Http请求URL为空"); + + // åˆå§‹åŒ–Http客户端 + String result = null; + CloseableHttpClient httpClient = createClientDefault(); + try { + HttpPost httpPost = new HttpPost(url); + httpPost.setEntity(new StringEntity(paramStr, charsetCode)); + HttpResponse httpResponse = httpClient.execute(httpPost); + HttpEntity httpEntity = httpResponse.getEntity(); + result = EntityUtils.toString(httpEntity, charsetCode); + EntityUtils.consume(httpEntity); + } catch (Exception e) { + log.error("HTTP_POSTã€paramStr】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + log.error("HTTP_POSTã€paramStr】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + + /** + * Httpåè®®POST请求 + * + * @param url 请求URL + * @param parameterMap å‚æ•°é›†åˆ + * @return + */ + public static String post(String url, Map<String, Object> parameterMap) { + return post(url, parameterMap, "UTF-8"); + } + + /** + * Httpåè®®POST请求 + * + * @param url 请求URL + * @param paramStr å—符串å‚æ•° + * @return + */ + public static String post(String url, String paramStr) { + return post(url, paramStr, "UTF-8"); + } + + /** + * Httpåè®®GET请求 + * + * @param url 请求URL + * @param parameterMap å‚æ•°é›†åˆ + * @param headerMap 请求头å‚æ•°é›†åˆ + * @param charsetCode ç¼–ç + * @return + */ + public static String get(String url, Map<String, Object> parameterMap, Map<String, Object> headerMap, String charsetCode) { + // å‚æ•°ä¸ºç©ºåˆ¤æ– + Assert.hasText(url, "Http请求URL为空"); + + // åˆå§‹åŒ–HTTP客户端 + String result = null; + CloseableHttpClient httpClient = createClientDefault(); + try { + // 获å–请求体å值对Listå‚æ•°é›†åˆ + List<NameValuePair> nameValuePairs = getNameValuePair(parameterMap); + HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?") + EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, charsetCode))); + + //æ·»åŠ headerå‚æ•° + if (MapUtils.isNotEmpty(headerMap)) { + Set<Map.Entry<String, Object>> headerEntries = headerMap.entrySet(); + for (Map.Entry<String, Object> headerEntry : headerEntries) { + httpGet.setHeader(headerEntry.getKey(), ConvertUtils.convert(headerEntry.getValue())); + } + } + + // HTTPåè®®GET请求 + HttpResponse httpResponse = httpClient.execute(httpGet); + HttpEntity httpEntity = httpResponse.getEntity(); + result = EntityUtils.toString(httpEntity, charsetCode); + EntityUtils.consume(httpEntity); + } catch (Exception e) { + log.error("\r\n *******************HTTP_GETã€ParamMap】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + log.error("\r\n *******************HTTP_GETã€ParamMap】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * Httpåè®®GET请求 + * + * @param url Http请求URL + * @param parameterMap HTTP请求å‚æ•°é›†åˆ + * @param charsetCode HTTP请求编ç + * @return String 返回å—符串 + */ + public static String get(String url, Map<String, Object> parameterMap, String charsetCode) { + return get(url, parameterMap, null, charsetCode); + } + + /** + * Httpåè®®GET请求 + * + * @param url Http请求URL + * @param parameterMap HTTP请求å‚æ•°é›†åˆ + * @return String 返回å—符串 + */ + public static String get(String url, Map<String, Object> parameterMap) { + return get(url, parameterMap, "UTF-8"); + } + + /** + * HTTPSåè®®POST请求 + * + * @param url Https请求URL + * @param parameterMap Https请求å‚æ•°é›†åˆ + * @param charsetCode Https请求编ç + * @return String 返回å—符串 + */ + public static String httpsPost(String url, Map<String, Object> parameterMap, String charsetCode) { + // åˆå§‹åŒ–HTTPS客户端 + CloseableHttpClient httpsClient = createSSLClientDefault(); + String result = null; + try { + HttpPost post = new HttpPost(url); + List<NameValuePair> nameValuePairs = getNameValuePair(parameterMap); + post.setEntity(new UrlEncodedFormEntity(nameValuePairs, charsetCode)); + HttpResponse response = httpsClient.execute(post); + HttpEntity entity = response.getEntity(); + result = EntityUtils.toString(entity, charsetCode); + EntityUtils.consume(entity); + } catch (Exception e) { + log.error("\r\n *****************HTTP_POSTã€parameterMap】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpsClient.close(); + } catch (IOException e) { + log.error("\r\n *****************HTTP_POSTã€parameterMap】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url Https请求URL + * @param charsetCode 请求编ç + * @param parameterMap Https请求å‚æ•°é›†åˆ + * @return String 返回å—符串 + */ + public static byte[] httpsPost(String url,String charsetCode, Map<String, Object> parameterMap) { + // åˆå§‹åŒ–HTTPS客户端 + CloseableHttpClient httpsClient = createSSLClientDefault(); + byte[] result = null; + try { + HttpPost post = new HttpPost(url); + List<NameValuePair> nameValuePairs = getNameValuePair(parameterMap); + post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); + HttpResponse response = httpsClient.execute(post); + HttpEntity httpEntity = response.getEntity(); + if (httpEntity.isStreaming()) { + result = EntityUtils.toByteArray(httpEntity); + } else { + log.info("\r\n ****** Https请求错误:{}", EntityUtils.toString(httpEntity, "UTF-8")); + } + EntityUtils.consume(httpEntity); + } catch (Exception e) { + log.error("\r\n *****************HTTP_POSTã€parameterMap】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpsClient.close(); + } catch (IOException e) { + log.error("\r\n *****************HTTP_POSTã€parameterMap】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url Https请求URL + * @param paramList HTTPS请求å‚æ•°é›†åˆ + * @param charsetCode HTTPS请求编ç + * @return + */ + public static String httpsPost(String url, List<String[]> paramList, String charsetCode) { + // åˆå§‹åŒ–HTTP客户端 + CloseableHttpClient httpsClient = createSSLClientDefault(); + String result = null; + try { + // åˆå§‹åŒ–HTTPS请求å‚æ•° + HttpPost post = new HttpPost(url); + List<NameValuePair> nameValuePairs = getNameValuePair(paramList); + post.setEntity(new UrlEncodedFormEntity(nameValuePairs, charsetCode)); + + // å‘èµ·HTTPS请求 + HttpResponse response = httpsClient.execute(post); + HttpEntity entity = response.getEntity(); + result = EntityUtils.toString(entity, charsetCode); + EntityUtils.consume(entity); + } catch (Exception e) { + log.error("\r\n *****************HTTP_POSTã€paramList】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpsClient.close(); + } catch (IOException e) { + log.error("\r\n *****************HTTP_POSTã€paramList】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url Https请求URL + * @param paramStr HTTPS请求å‚æ•°é›†åˆ + * @param charsetCode HTTPS请求编ç + * @return + */ + public static String httpsPost(String url, String paramStr, String charsetCode) { + // åˆå§‹åŒ–HTTPS请求客户端 + CloseableHttpClient httpsClient = createSSLClientDefault(); + String result = null; + try { + HttpPost post = new HttpPost(url); +// StringEntity stringEntity = new StringEntity(paramStr, charsetCode); + ByteArrayEntity byteArrayEntity = new ByteArrayEntity(paramStr.getBytes("UTF-8")); + post.setEntity(byteArrayEntity); + HttpResponse response = httpsClient.execute(post); + HttpEntity entity = response.getEntity(); + result = EntityUtils.toString(entity, charsetCode); + EntityUtils.consume(entity); + } catch (Exception e) { + log.error("\r\n *****************HTTP_POSTã€paramStr】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpsClient.close(); + } catch (IOException e) { + log.error("*****************HTTP_POSTã€paramStr】关é—httpClient失败:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url Https请求URL + * @param parameterMap HTTPS请求å‚æ•°é›†åˆ + * @return + */ + public static String httpsPost(String url, Map<String, Object> parameterMap) { + return httpsPost(url, parameterMap, "UTF-8"); + } + + /** + * HTTPSåè®®POST请求 + * + * @param url Https请求URL + * @param params HTTPS请求å‚æ•°é›†åˆ + * @return + */ + public static String httpsPost(String url, List<String[]> params) { + return httpsPost(url, params, "UTF-8"); + } + + /** + * HTTPSåè®®POST请求 + * + * @param url HTTPS请求URL + * @param postStr HTTPS请求å‚æ•°é›†åˆ + * @return + */ + public static String httpsPost(String url, String postStr) { + return httpsPost(url, postStr, "UTF-8"); + } + + /** + * HTTPSåè®®GET请求 + * + * @param url Https请求URL + * @param parameterMap HTTPS请求å‚æ•°é›†åˆ + * @param charsetCode HTTPS请求编ç + * @return + */ + public static String httpsGet(String url, Map<String, Object> parameterMap, String charsetCode) { + // åˆå§‹åŒ–HTTPS请求客户端 + CloseableHttpClient httpsClient = createSSLClientDefault(); + String result = null; + try { + List<NameValuePair> nameValuePairs = getNameValuePair(parameterMap); + HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?") + EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, charsetCode))); + HttpResponse response = httpsClient.execute(httpGet); + HttpEntity entity = response.getEntity(); + result = EntityUtils.toString(entity, charsetCode); + EntityUtils.consume(entity); + } catch (Exception e) { + log.error("\r\n ***************** HTTPS_GETã€parameterMap】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpsClient.close(); + } catch (IOException e) { + log.error("\r\n ***************** HTTPS_GETã€parameterMap】关é—httpClient失败:" + ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®GET请求 + * + * @param url Https请求URL + * @param parameterMap HTTPS请求å‚æ•°é›†åˆ + * @param charsetCode HTTPS请求编ç + * @return + */ + public static byte[] httpsGet(String charsetCode, String url, Map<String, Object> parameterMap) { + // åˆå§‹åŒ–HTTPS请求客户端 + CloseableHttpClient httpsClient = createSSLClientDefault(); + byte[] result = null; + try { + List<NameValuePair> nameValuePairs = getNameValuePair(parameterMap); + HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?") + EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, charsetCode))); + HttpResponse response = httpsClient.execute(httpGet); + HttpEntity httpEntity = response.getEntity(); + if (httpEntity.isStreaming()) { + result = EntityUtils.toByteArray(httpEntity); + } else { + log.info("\r\n ****** Https请求错误:{}", EntityUtils.toString(httpEntity, charsetCode)); + } + EntityUtils.consume(httpEntity); + } catch (Exception e) { + log.error("\r\n ***************** HTTPS_GETã€parameterMap】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + httpsClient.close(); + } catch (IOException e) { + log.error("\r\n ***************** HTTPS_GETã€parameterMap】关é—httpClient失败:" + ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®GET请求 + * + * @param url HTTPS请求URL + * @param paramList HTTPS请求å‚æ•°é›†åˆ + * @param charsetCode HTTPS请求编ç + * @return + */ + public static String httpsGet(String url, List<String[]> paramList, String charsetCode) { + // åˆå§‹åŒ–HTTPS请求客户端 + CloseableHttpClient client = createSSLClientDefault(); + String result = null; + try { + List<NameValuePair> nameValuePairs = getNameValuePair(paramList); + HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?") + EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, charsetCode))); + HttpResponse response = client.execute(httpGet); + HttpEntity entity = response.getEntity(); + result = EntityUtils.toString(entity, charsetCode); + EntityUtils.consume(entity); + } catch (Exception e) { + log.error("\r\n ***************** HTTPS_GETã€paramList】请求失败:{}", ExceptionUtils.getFullStackTrace(e)); + } finally { + try { + client.close(); + } catch (IOException e) { + log.error("\r\n ***************** HTTPS_GETã€paramList】关é—httpClient失败:", ExceptionUtils.getFullStackTrace(e)); + } + } + return result; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url HTTPSåè®®POST请求 + * @param parameterMap HTTPSåè®®å‚æ•° + * @return + */ + public static JSONObject getJSONObjectFromHttpsPost(String url, Map<String, Object> parameterMap) { + try { + return JSONObject.parseObject(httpsPost(url, parameterMap)); + } catch (Exception e) { + log.error("\r\n ******************HTTPS_POSTã€parameterMap】请求出错:{}", ExceptionUtils.getStackTrace(e)); + } + return null; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url HTTPSåè®®POST请求 + * @param paramList HTTPSåè®®å‚æ•° + * @return + */ + public static JSONObject getJSONObjectFromHttpsPost(String url, List<String[]> paramList) { + try { + return JSONObject.parseObject(httpsPost(url, paramList)); + } catch (Exception e) { + log.error("\r\n ******************HTTPS_POSTã€paramList】请求出错:{}", ExceptionUtils.getStackTrace(e)); + } + return null; + } + + /** + * HTTPSåè®®POST请求 + * + * @param url HTTPS请求URL + * @param paramStr HTTPS请求å‚æ•°é›†åˆ + * @return + */ + public static JSONObject getJSONObjectFromHttpsPost(String url, String paramStr) { + try { + return JSONObject.parseObject(httpsPost(url, paramStr)); + } catch (Exception e) { + log.error("\r\n ******************HTTPS_POSTã€paramStr】请求出错:{}", ExceptionUtils.getStackTrace(e)); + } + return null; + } + + /** + * HTTPSåè®®GET请求 + * + * @param url HTTPS请求URL + * @param parameterMap HTTPS请求å‚æ•°é›†åˆ + * @return + */ + public static JSONObject getJSONObjectFromHttpsGet(String url, Map<String, Object> parameterMap) { + try { + return JSONObject.parseObject(httpsGet(url, parameterMap, "UTF-8")); + } catch (Exception e) { + log.error("\r\n ******************HTTPS_GETã€parameterMap】请求出错:{}", ExceptionUtils.getStackTrace(e)); + } + return null; + } + + /** + * HTTPSåè®®GET请求 + * + * @param url HTTPS请求URL + * @param paramList HTTPS请求å‚æ•°é›†åˆ + * @return + */ + public static JSONObject getJSONObjectFromHttpsGet(String url, List<String[]> paramList) { + try { + return JSONObject.parseObject(httpsGet(url, paramList, "UTF-8")); + } catch (Exception e) { + log.error("\r\n ******************HTTPS_GETã€paramList】请求出错:{}", ExceptionUtils.getStackTrace(e)); + } + return null; + } + + /** + * 获å–post请求,并将å“应å˜æ›´ä¸ºjsonObject + * + * @param url è¯·æ±‚åœ°å€ + * @param parameterMap å‚æ•° + * @param charsetCode ç¼–ç + * @return + */ + public static JSONObject getJSONObjectFromPost(String url, Map<String, Object> parameterMap, String charsetCode) { + return JSONObject.parseObject(post(url, parameterMap, charsetCode)); + } + + /** + * 获å–post请求,并将å“应å˜æ›´ä¸ºjsonObject + * + * @param url è¯·æ±‚åœ°å€ + * @param parameterMap å‚æ•° + * @return + */ + public static JSONObject getJSONObjectFromPost(String url, Map<String, Object> parameterMap) { + return getJSONObjectFromPost(url, parameterMap, "UTF-8"); + } + + /** + * å‘起带有CA认è¯çš„httpsçš„post请求,默认utf-8ç¼–ç (仅用于å«æœ‰éœ€è¦è¯ä¹¦è®¤è¯çš„微信支付支付接å£) + * + * @param url 微信接å£URL + * @param postStr 微信接å£å‚数(XMLæ ¼å¼ï¼‰ + * @param certPath 微信退款CAè¯ä¹¦è·¯å¾„ + * @param certassword 微信退款è¯ä¹¦å¯†ç (默认密ç 为商户å·ï¼‰ + * @return + */ + public static String httpsPostWithCA(String url, String postStr, String certPath, String certassword) { + return httpsPostWithCA(url, postStr, certPath, certassword, "UTF-8"); + } + + /** + * å‘起带有CA认è¯çš„httpsçš„post请求,默认utf-8ç¼–ç (仅用于å«æœ‰éœ€è¦è¯ä¹¦è®¤è¯çš„微信支付支付接å£),返回XMLå—符串 + * + * @param url 微信退款接å£URL + * @param postStr 微信退款接å£å‚æ•° + * @param charsetCode 接å£è°ƒç”¨ç¼–ç æ ¼å¼ï¼ˆé»˜è®¤UTF-8) + * @param certPath CAè¯ä¹¦è·¯å¾„ + * @param certPassword CAè¯ä¹¦å¯†ç + * @return + */ + public static String httpsPostWithCA(String url, String postStr, String certPath, String certPassword, String charsetCode) { + + //åˆå§‹åŒ–返回å˜é‡ + String result = null; + + //åˆå§‹åŒ–KeyStore实例 + KeyStore keyStore = null; + FileInputStream instream = null; + char[] pwdChar = StringUtils.isNotBlank(certPassword) ? certPassword.toCharArray() : new char[]{}; + try { + keyStore = KeyStore.getInstance("PKCS12"); + instream = new FileInputStream(new File(certPath)); + keyStore.load(instream, pwdChar); + } catch (Exception e) { + log.error("\r\n **************************ã€httpsPostWithCA】接å£KeyStoreåˆå§‹åŒ–失败START ************************ \r\n"); + log.error(ExceptionUtils.getFullStackTrace(e)); + log.error("\r\n *************************ã€httpsPostWithCA】接å£KeyStoreåˆå§‹åŒ–失败END ************************ \r\n"); + e.printStackTrace(); + } finally { + try { + instream.close(); + } catch (IOException e) { + log.error("\r\n **************************ã€httpsPostWithCA】接å£æ–‡ä»¶æµå…³é—失败START ************************ \r\n"); + log.error(ExceptionUtils.getFullStackTrace(e)); + log.error("\r\n *************************ã€httpsPostWithCA】接å£æ–‡ä»¶æµå…³é—失败END ************************ \r\n"); + e.printStackTrace(); + } + } + + // ä¾èµ–自己的微信è¯ä¹¦ + SSLContext sslcontext = null; + try { + sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, pwdChar).build(); + } catch (Exception e) { + log.error("\r\n **************************ã€httpsPostWithCA】接å£åˆå§‹åŒ–è¯ä¹¦SSL失败START ************************ \r\n"); + log.error(ExceptionUtils.getFullStackTrace(e)); + log.error("\r\n *************************ã€httpsPostWithCA】接å£åˆå§‹åŒ–è¯ä¹¦SSL失败END ************************ \r\n"); + e.printStackTrace(); + } + + // åˆå§‹åŒ–è¯ä¹¦è®¤è¯çš„HttpClient + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); + CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); + CloseableHttpResponse response = null; + try { + HttpPost post = new HttpPost(url); + post.setEntity(new StringEntity(postStr, charsetCode)); + response = httpclient.execute(post); + HttpEntity entity = response.getEntity(); + result = EntityUtils.toString(entity, charsetCode); + log.info("\r\n ************************** 退款接å£è¿”回信æ¯START ************************ \r\n"); + log.info(result); + log.info("\r\n ************************** 退款接å£è¿”回信æ¯END ************************ \r\n"); + EntityUtils.consume(entity); + } catch (Exception e) { + log.error("\r\n **************************ã€httpsPostWithCA】接å£HttpPost请求失败START ************************ \r\n"); + log.error(ExceptionUtils.getFullStackTrace(e)); + log.error("\r\n **************************ã€httpsPostWithCA】接å£HttpPost请求失败END ************************ \r\n"); + } finally { + try { + response.close(); + httpclient.close(); + } catch (IOException e) { + log.error("\r\n **************************ã€httpsPostWithCA】接å£HttpPost请求关é—失败START ************************ \r\n"); + log.error(ExceptionUtils.getFullStackTrace(e)); + log.error("\r\n **************************ã€httpsPostWithCA】接å£HttpPost请求关é—失败END ************************ \r\n"); + } + } + + return result; + } + + + /* ********************************************************* 对象内部ç§æœ‰æ–¹æ³• ********************************************************* */ + + /** + * æ ¹æ®å‚数集åˆè½¬åŒ–å值对 + * + * @param parameterMap å‚æ•°é›†åˆ + * @return List<NameValuePair> åå€¼å¯¹é›†åˆ + */ + private static List<NameValuePair> getNameValuePair(Map<String, Object> parameterMap) { + // åˆå§‹åŒ–è¿”å›žé›†åˆ + List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); + + // 转化å‚数集åˆä¸ºåå€¼å¯¹é›†åˆ + if (MapUtils.isNotEmpty(parameterMap)) { + for (Map.Entry<String, Object> entry : parameterMap.entrySet()) { + String name = entry.getKey(); + String value = ConvertUtils.convert(entry.getValue()); + if (StringUtils.isNotEmpty(name)) { + nameValuePairs.add(new BasicNameValuePair(name, value)); + } + } + } + return nameValuePairs; + } + + /** + * æ ¹æ®å‚数集åˆè½¬åŒ–å值对 + * + * @param paramList å‚æ•°é›†åˆ + * @return List<NameValuePair> åå€¼å¯¹é›†åˆ + */ + private static List<NameValuePair> getNameValuePair(List<String[]> paramList) { + // åˆå§‹åŒ–è¿”å›žé›†åˆ + List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); + if (paramList != null && !paramList.isEmpty()) { + for (String[] arr : paramList) { + nameValuePairs.add(new BasicNameValuePair(arr[0], arr[1])); + } + } + return nameValuePairs; + } + +} \ No newline at end of file diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ListUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ListUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..0d70185ddc88d54653ac3788c5287344398dbf59 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ListUtil.java @@ -0,0 +1,44 @@ +package cn.wisenergy.common.utils; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +/** + * @ClassName ListUtil + * @Description TODO + * @Author meng + * @Date 2020/3/4 15:58 + * @Version 1.0 + */ +public class ListUtil { + /** + * 将该集åˆä¸çš„å…ƒç´ å‘å³ç§»åŠ¨indexä½ç½® + * @param list + * @param index + * @return + */ + public static <T> List<T> moveRight(List<T> list, int index){ + if(list == null || list.size()==0){ + return list; + } + Queue queue = new LinkedList<T>(); + //倒å™è¿›é˜Ÿåˆ— + for(int i = list.size()-1;i>=0;i--) { + queue.offer(list.get(i)); + } + for(int j = 0;j<index;j++) { + //出队列 + T param = (T) queue.poll(); + //进队列 + queue.offer(param); + } + list = new ArrayList<T>(); + int len = queue.size(); + for(int i = 0;i<len;i++) { + list.add(0,(T) queue.poll()); + } + return list; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/LngLatDirection.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/LngLatDirection.java new file mode 100644 index 0000000000000000000000000000000000000000..5455af275ba6ed827d9bad0025e81f8fd2c9b60c --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/LngLatDirection.java @@ -0,0 +1,80 @@ +package cn.wisenergy.common.utils; + +/** + * @Author zyj + * @Date 2020/5/6 18:18 + * @Description 计算一个ç»çº¬åº¦åœ¨å¦ä¸€ä¸ªç»çº¬åº¦ä»€ä¹ˆæ–¹å‘ + */ + +public class LngLatDirection { + + public static void main(String[] args) { + LngLatDirection lngLatDirection = new LngLatDirection(); + String str = getDirection(39.915322, 116.404341, 39.954713, 116.45982); + System.out.println(str); + } + + /** + * @param lat1 纬度1 + * @param lng1 ç»åº¦1 + * @param lat2 纬度2 + * @param lng2 ç»åº¦2 + * @return æ–¹å‘ + */ + public static String getDirection(double lat1, double lng1, double lat2, double lng2) { + double jiaodu = getAngle(lat1, lng1, lat2, lng2); + if ((jiaodu <= 10) || (jiaodu > 350)) + return "东"; + if ((jiaodu > 10) && (jiaodu <= 80)) + return "东北"; + if ((jiaodu > 80) && (jiaodu <= 100)) + return "北"; + if ((jiaodu > 100) && (jiaodu <= 170)) + return "西北"; + if ((jiaodu > 170) && (jiaodu <= 190)) + return "西"; + if ((jiaodu > 190) && (jiaodu <= 260)) + return "西å—"; + if ((jiaodu > 260) && (jiaodu <= 280)) + return "å—"; + if ((jiaodu > 280) && (jiaodu <= 350)) + return "东å—"; + return ""; + } + + private static double getAngle(double lat1, double lng1, double lat2, double lng2) { + double x1 = lng1; + double y1 = lat1; + double x2 = lng2; + double y2 = lat2; + double pi = Math.PI; + double w1 = y1 / 180 * pi; + double j1 = x1 / 180 * pi; + double w2 = y2 / 180 * pi; + double j2 = x2 / 180 * pi; + double ret; + if (j1 == j2) { + if (w1 > w2) + return 270; // 北åŠçƒçš„情况,å—åŠçƒå¿½ç•¥ + else if (w1 < w2) + return 90; + else + return -1;// ä½ç½®å®Œå…¨ç›¸åŒ + } + ret = 4 * Math.pow(Math.sin((w1 - w2) / 2), 2) - Math.pow( + Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2); + ret = Math.sqrt(ret); + double temp = (Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math + .cos(w2))); + ret = ret / temp; + ret = Math.atan(ret) / pi * 180; + if (j1 > j2) { // 1为å‚考点åæ ‡ + if (w1 > w2) + ret += 180; + else + ret = 180 - ret; + } else if (w1 > w2) + ret = 360 - ret; + return ret; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/Md5Util.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/Md5Util.java new file mode 100644 index 0000000000000000000000000000000000000000..2f9f7ffd469fbb283e9a7d4535deeca590a8359f --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/Md5Util.java @@ -0,0 +1,63 @@ +package cn.wisenergy.common.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Random; + +public class Md5Util { + private static Logger log = LoggerFactory.getLogger(Md5Util.class); + + /** + * MD5åŠ å¯† + * + * @param value + * @return + */ + public static String digestMD5(String value) { + char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'}; + byte[] strTemp = value.getBytes(); + MessageDigest mdTemp = null; + try { + mdTemp = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + log.error(e.getMessage(), e); + return null; + } + mdTemp.update(strTemp); + byte[] md = mdTemp.digest(); + + int j = md.length; + char[] str = new char[j * 2]; + int k = 0; + for (int i = 0; i < j; ++i) { + byte byte0 = md[i]; + str[(k++)] = hexDigits[(byte0 >>> 4 & 0xF)]; + + str[(k++)] = hexDigits[(byte0 & 0xF)]; + } + return new String(str); + } + + /** + * @param len + * @return + * @throws Exception + * @Title generatePassword + * @Description: éšæœºç”Ÿæˆ8ä½å¯†ç å¿…é¡»å«æœ‰æ•°å—å—æ¯ ç‰¹æ®Šå—符 + * @date 2018å¹´12月11æ—¥ 下åˆ6:29:28 + * @author lut + */ + public static String generatePassword(int len) throws Exception { + char charr[] = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random r = new Random(); + for (int x = 0; x < len; ++x) { + sb.append(charr[r.nextInt(charr.length)]); + } + return sb.toString(); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/R.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/R.java new file mode 100644 index 0000000000000000000000000000000000000000..ffd05c60b89f2ec305f64a37fe2dda2e78b54ded --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/R.java @@ -0,0 +1,138 @@ +package cn.wisenergy.common.utils; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.http.HttpStatus; + +import java.io.Serializable; + +/** + * å“应信æ¯ç±» + * + * @author lut + */ +@Data +@ApiModel(description = "å“应信æ¯ä¸»ä½“") +public class R<T> implements Serializable { + private static final long serialVersionUID = 1L; + @ApiModelProperty("è¿”å›žæ ‡è®°ï¼šæˆåŠŸæ ‡è®°=0ï¼Œå¤±è´¥æ ‡è®°1") + private int code; + @ApiModelProperty("返回信æ¯") + private String message; + @ApiModelProperty("æ•°æ®") + private T data; + + public R() { + this.code = 0; + this.message = "success"; + } + + public R(int code, String msg) { + this.code = code; + this.message = msg; + } + + public R(int code, T data) { + this.code = code; + this.data = data; + } + + public R(T data) { + this.code = 0; + this.message = "success"; + this.data = data; + } + + public R(T data, String msg) { + this.code = 0; + this.data = data; + this.message = msg; + } + + public R(int code, String msg,T data) { + this.code = code; + this.data = data; + this.message = msg; + } + + /** + * 请求æˆåŠŸ + */ + public static <T> R<T> ok() { + return new R<>(); + } + + /** + * 请求æˆåŠŸï¼Œè¿”回å‰ç«¯çš„ä¿¡æ¯ + * + * @param msg æè¿° + * @return R + */ + public static <T> R<T> ok(String msg, T data) { + return new R<>(data, msg); + } + + /** + * 请求æˆåŠŸï¼Œè¿”回å‰ç«¯çš„ä¿¡æ¯ + * + * @param data 返回值 + * @return R + */ + public static <T> R<T> ok(T data) { + return new R<>(0, data); + } + + /** + * 请求æˆåŠŸï¼Œè¿”回å‰ç«¯ä¿¡æ¯ + * + * @param code 状æ€ç + * @param data 返回值 + * @return R + */ + public static <T> R<T> ok(int code, T data) { + return new R<>(code, data); + } + + /** + * 请求失败 + * + * @return R + */ + public static <T> R<T> error() { + return new R<>(-1, "æ“作失败"); + } + + /** + * 请求失败,返回å‰å°ä¿¡æ¯ + * + * @param msg æè¿° + * @return R + */ + public static <T> R<T> error(String msg) { + return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg); + } + + /** + * 请求失败,返回å‰å°ä¿¡æ¯ + * + * @param code 错误ç + * @param msg æè¿° + * @return R + */ + public static <T> R<T> error(int code, String msg) { + return new R<>(code, msg); + } + + /** + * 请求失败,返回å‰å°ä¿¡æ¯ + * + * @param code 错误ç + * @param msg æè¿° + * @return R + */ + public static <T> R<T> error(int code, String msg,T data) { + return new R<>(code, msg,data); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/RSAUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/RSAUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..8d56832641c8d5d75f4e74d565fa83c6a347a7cb --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/RSAUtil.java @@ -0,0 +1,339 @@ +package cn.wisenergy.common.utils; + +import java.io.ByteArrayOutputStream; +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.Provider; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.RSAPrivateKeySpec; +import java.security.spec.RSAPublicKeySpec; + +import javax.crypto.Cipher; + +import org.apache.commons.codec.binary.Base64; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.springframework.util.Assert; + +/** + * Utils - RSAåŠ å¯†è§£å¯† + * + * @version 3.0 + */ +public final class RSAUtil { + + /** + * 安全æœåŠ¡æ供者 + */ + private static final Provider PROVIDER = new BouncyCastleProvider(); + + /** + * å¯†é’¥å¤§å° + */ + private static final int KEY_SIZE = 1024; + + /** + * åŠ å¯†è§£å¯†æ¨¡å¼ - å¡«å…… + */ + public static final String RSA_ECB_PKCS1PADDING = "RSA/ECB/PKCS1Padding"; + + /** + * åŠ å¯†è§£å¯†æ¨¡å¼ + */ + public static final String RSA = "RSA"; + + /** + * ä¸å¯å®žä¾‹åŒ– + */ + private RSAUtil() { + } + + /** + * 生æˆå¯†é’¥å¯¹ + * + * @return 密钥对 + */ + public static KeyPair generateKeyPair() { + try { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance( + "RSA", PROVIDER); + keyPairGenerator.initialize(KEY_SIZE, new SecureRandom()); + return keyPairGenerator.generateKeyPair(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + } + } + + /** + * é€šè¿‡å…¬é’¥å’Œæ•°ç»„åŠ å¯† + * + * @param publicKey + * 公钥 + * @param data + * æ•°æ® + * @return åŠ å¯†åŽçš„æ•°æ® + */ + @SuppressWarnings("deprecation") + public static byte[] encrypt(PublicKey publicKey, byte[] data) { + Assert.notNull(publicKey); + Assert.notNull(data); + try { + Cipher cipher = Cipher.getInstance("RSA", PROVIDER); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + int blockSize = cipher.getBlockSize();// èŽ·å¾—åŠ å¯†å—大å°ï¼Œå¦‚ï¼šåŠ å¯†å‰æ•°æ®ä¸º128个byte,而key_size=1024 + // åŠ å¯†å—大å°ä¸º127byte,åŠ å¯†åŽä¸º128个byte;å› æ¤å…±æœ‰2ä¸ªåŠ å¯†å—,第一个127byte第二个为1个byte + int outputSize = cipher.getOutputSize(data.length);// èŽ·å¾—åŠ å¯†å—åŠ å¯†åŽå—å¤§å° + int leavedSize = data.length % blockSize; + int blocksSize = leavedSize != 0 ? data.length / blockSize + 1 + : data.length / blockSize; + byte[] raw = new byte[outputSize * blocksSize]; + int i = 0; + while (data.length - i * blockSize > 0) { + if (data.length - i * blockSize > blockSize) { + cipher.doFinal(data, i * blockSize, blockSize, raw, i + * outputSize); + } else { + cipher.doFinal(data, i * blockSize, data.length - i + * blockSize, raw, i * outputSize); + } + i++; + } + return raw; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 通过公钥和å—ç¬¦ä¸²åŠ å¯† + * + * @param publicKey + * 公钥 + * @param text + * å—符串 + * @return Base64ç¼–ç å—符串 + */ + @SuppressWarnings("deprecation") + public static String encrypt(PublicKey publicKey, String text) { + Assert.notNull(publicKey); + Assert.notNull(text); + byte[] data = encrypt(publicKey, text.getBytes()); + return data != null ? Base64.encodeBase64String(data) : null; + } + + /** + * 通过公钥的模é‡å’ŒæŒ‡æ•°æž„建公钥åŽåŠ 密å—符串 + * + * @param modulus + * @param exponent + * @param text + * @return + */ + public static String encrypt(String modulus, String exponent, String text) { + try { + byte[] aryExponent = Base64.decodeBase64(exponent); + byte[] aryModulus = Base64.decodeBase64(modulus); + BigInteger bigExponent = new BigInteger(1, aryExponent); + BigInteger bigModulus = new BigInteger(1, aryModulus); + RSAPublicKeySpec keySpec = new RSAPublicKeySpec(bigModulus, + bigExponent); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + return encrypt(publicKey, text); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (InvalidKeySpecException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 通过ç§é’¥å’Œæ•°ç»„解密 + * + * @param privateKey + * ç§é’¥ + * @param data + * æ•°æ® + * @return 解密åŽçš„æ•°æ® + */ + @SuppressWarnings({ "deprecation", "static-access" }) + public static byte[] decrypt(PrivateKey privateKey, byte[] data) { + Assert.notNull(privateKey); + Assert.notNull(data); + try { + Cipher cipher = Cipher.getInstance("RSA", PROVIDER); + cipher.init(cipher.DECRYPT_MODE, privateKey); + int blockSize = cipher.getBlockSize(); + ByteArrayOutputStream bout = new ByteArrayOutputStream(64); + int j = 0; + + while (data.length - j * blockSize > 0) { + bout.write(cipher.doFinal(data, j * blockSize, blockSize)); + j++; + } + return bout.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 通过ç§é’¥å’Œæ•°ç»„解密 - æœ‰æ¨¡å¼ + * + * @param mode + * æ¨¡å¼ + * @param privateKey + * ç§é’¥ + * @param data + * æ•°æ® + * @return 解密åŽçš„æ•°æ® + */ + @SuppressWarnings({ "deprecation", "static-access" }) + public static byte[] decrypt(String mode, PrivateKey privateKey, byte[] data) { + Assert.notNull(privateKey); + Assert.notNull(data); + try { + Cipher cipher = Cipher.getInstance(mode, PROVIDER); + cipher.init(cipher.DECRYPT_MODE, privateKey); + int blockSize = cipher.getBlockSize(); + ByteArrayOutputStream bout = new ByteArrayOutputStream(64); + int j = 0; + + while (data.length - j * blockSize > 0) { + bout.write(cipher.doFinal(data, j * blockSize, blockSize)); + j++; + } + return bout.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 通过ç§é’¥å’Œæ•°ç»„解密 - 点ä½å›¾ç”¨ + * + * @param privateKey + * ç§é’¥ + * @param data + * æ•°æ® + * @return 解密åŽçš„æ•°æ® + */ + @SuppressWarnings({ "deprecation", "static-access" }) + public static byte[] decryptForBitmap(PrivateKey privateKey, byte[] data) { + Assert.notNull(privateKey); + Assert.notNull(data); + try { + // 点ä½å›¾ios端使用了默认的填充模å¼: RSA/ECB/PKCS1Padding + Cipher cipher = Cipher + .getInstance("RSA/ECB/PKCS1Padding", PROVIDER); + cipher.init(cipher.DECRYPT_MODE, privateKey); + int blockSize = cipher.getBlockSize(); + ByteArrayOutputStream bout = new ByteArrayOutputStream(64); + int j = 0; + + while (data.length - j * blockSize > 0) { + bout.write(cipher.doFinal(data, j * blockSize, blockSize)); + j++; + } + return bout.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 通过ç§é’¥å’Œå—符串解密 + * + * @param privateKey + * ç§é’¥ + * @param text + * Base64ç¼–ç å—符串 + * @return 解密åŽçš„æ•°æ® + */ + @SuppressWarnings("deprecation") + public static String decrypt(PrivateKey privateKey, String text) { + Assert.notNull(privateKey); + Assert.notNull(text); + byte[] data = decrypt(privateKey, Base64.decodeBase64(text)); + return data != null ? new String(data) : null; + } + + /** + * 通过ç§é’¥å’Œå—符串解密 - æœ‰æ¨¡å¼ + * + * @param mode + * æ¨¡å¼ + * @param privateKey + * ç§é’¥ + * @param text + * Base64ç¼–ç å—符串 + * @return 解密åŽçš„æ•°æ® + */ + @SuppressWarnings("deprecation") + public static String decrypt(String mode, PrivateKey privateKey, String text) { + Assert.notNull(privateKey); + Assert.notNull(text); + byte[] data = decrypt(mode, privateKey, Base64.decodeBase64(text)); + return data != null ? new String(data) : null; + } + + /** + * 通过ç§é’¥å’Œå—符串解密 - 点ä½å›¾ + * + * @param privateKey + * ç§é’¥ + * @param text + * Base64ç¼–ç å—符串 + * @return 解密åŽçš„æ•°æ® + */ + @SuppressWarnings("deprecation") + public static String decryptForBitmap(PrivateKey privateKey, String text) { + Assert.notNull(privateKey); + Assert.notNull(text); + byte[] data = decryptForBitmap(privateKey, Base64.decodeBase64(text)); + return data != null ? new String(data) : null; + } + + /** + * 通过ç§é’¥çš„模é‡å’ŒæŒ‡æ•°æž„建ç§é’¥åŽå’Œå—符串解密 + * + * @param modulus + * @param exponent + * @param text + * @return + */ + public static String decrypt(String modulus, String exponent, String text) { + try { + byte[] aryExponent = Base64.decodeBase64(exponent); + byte[] aryModulus = Base64.decodeBase64(modulus); + BigInteger bigExponent = new BigInteger(1, aryExponent); + BigInteger bigModulus = new BigInteger(1, aryModulus); + RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(bigModulus, + bigExponent); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + return decrypt(privateKey, text); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) { + String exponent = "AQAB"; + String modulus = "AKJ7e1Lhn5kBnQQ++UWl8MJn9dGwCoTdXExlOsI6YVZkq4+R+Qb3gNo5v1TgHgfS2EMQ0YChr2//nJdmKc1w8bAz6XPRD4L2ZXnKDTfTOmKcel1jC7CzNUY5M1ahhEQeI6f367loH2me9UwScBN8rtIeGEGhP8E8DVriTk9g1xFv"; + String password = "admin123"; + System.out.print(encrypt(modulus, exponent, password)); + } +} \ No newline at end of file diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/RedisUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/RedisUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6be32d430da5850bd86fd62172692084f79688b0 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/RedisUtil.java @@ -0,0 +1,88 @@ +package cn.wisenergy.common.utils; + +import com.alibaba.fastjson.JSON; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * Redis工具类 + * + */ +@Component +public class RedisUtil { + @Autowired + private RedisTemplate<String, Object> redisTemplate; + @Autowired + private ValueOperations<String, String> valueOperations; + @Autowired + private HashOperations<String, String, Object> hashOperations; + @Autowired + private ListOperations<String, Object> listOperations; + @Autowired + private SetOperations<String, Object> setOperations; + @Autowired + private ZSetOperations<String, Object> zSetOperations; + /** ä¸è®¾ç½®è¿‡æœŸæ—¶é•¿ */ + public final static long NOT_EXPIRE = -1; + + public void set(String key, Object value){ + set(key, value); + } + + public void set(String key, Object value, long expire){ + valueOperations.set(key, toJson(value), expire, TimeUnit.SECONDS); + } + + public void set(String key, Object value, long expire, TimeUnit var5){ + valueOperations.set(key, toJson(value), expire, var5); + } + + public <T> T get(String key, Class<T> clazz, long expire) { + String value = valueOperations.get(key); + if(expire != NOT_EXPIRE){ + redisTemplate.expire(key, expire, TimeUnit.SECONDS); + } + return value == null ? null : fromJson(value, clazz); + } + + public <T> T get(String key, Class<T> clazz) { + return get(key, clazz, NOT_EXPIRE); + } + + public String get(String key, long expire) { + String value = valueOperations.get(key); + if(expire != NOT_EXPIRE){ + redisTemplate.expire(key, expire, TimeUnit.SECONDS); + } + return value; + } + + public String get(String key) { + return get(key, NOT_EXPIRE); + } + + public Boolean delete(String key) { + return redisTemplate.delete(key); + } + + /** + * Object转æˆJSONæ•°æ® + */ + private String toJson(Object object){ + if(object instanceof Integer || object instanceof Long || object instanceof Float || + object instanceof Double || object instanceof Boolean || object instanceof String){ + return String.valueOf(object); + } + return JSON.toJSONString(object); + } + + /** + * JSONæ•°æ®ï¼Œè½¬æˆObject + */ + private <T> T fromJson(String json, Class<T> clazz){ + return JSON.parseObject(json, clazz); + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/SecretkeyUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/SecretkeyUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..a5b701e320183e7f2509acaf2f71bba673b9bce9 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/SecretkeyUtil.java @@ -0,0 +1,41 @@ +package cn.wisenergy.common.utils; + +import java.util.Random; + +/** + * 生æˆå……值å¡åå¡ç§˜é’¥å·¥å…·ç±» + * @author 86187 + */ +public class SecretkeyUtil { + + //å—符串长度 + static final int LENGTH= 16; + + //开头数å—最å°é•¿åº¦ + static final int MIN_LENGTH_OF_NUMBER= 4; + + //å—æ¯æ‹¼æŽ¥æœ€å¤§ä½ç½® + static final int MAX_LENGTH_OF_STRING=11; + public static String getSecretkey(){ + char[] chars={'a','b','c','d','e','f','g','h','l','j','k','i','m','n','o','p','q','r','s','t','y','u','w','x','v','z'}; + StringBuilder stringBuilder=new StringBuilder(16); + Random random = new Random(); + int i1 =random.nextInt(4)+MIN_LENGTH_OF_NUMBER; + for (int i = 0; i <i1; i++) { + stringBuilder.append(random.nextInt(9)); + } + while (i1<MAX_LENGTH_OF_STRING) { + int i2 =random.nextInt(25); + if (i2 < 26) { + stringBuilder.append(chars[i2]); + i1++; + } + + } + for (int i = MAX_LENGTH_OF_STRING; i <LENGTH ; i++) { + stringBuilder.append(random.nextInt(9)); + } + + return stringBuilder.toString(); + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/SpringUtils.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/SpringUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..c7aabc390fc2ef6d731bc85206a7552ebc9f00f4 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/SpringUtils.java @@ -0,0 +1,72 @@ +package cn.wisenergy.common.utils; + +import org.springframework.beans.factory.DisposableBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +@Component("springUtils") +@Lazy(false) +public final class SpringUtils implements ApplicationContextAware, + DisposableBean { + + /** + * applicationContext + */ + private static ApplicationContext applicationContext; + + /** + * ä¸å¯å®žä¾‹åŒ– + */ + private SpringUtils() { + } + + public void setApplicationContext(ApplicationContext applicationContext) { + SpringUtils.applicationContext = applicationContext; + } + + public void destroy() throws Exception { + applicationContext = null; + } + + /** + * 获å–applicationContext + * + * @return applicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 获å–实例 + * + * @param name + * Beanå称 + * @return 实例 + */ + @SuppressWarnings("deprecation") + public static Object getBean(String name) { + Assert.hasText(name); + return applicationContext.getBean(name); + } + + /** + * 获å–实例 + * + * @param name + * Beanå称 + * @param type + * Bean类型 + * @return 实例 + */ + @SuppressWarnings("deprecation") + public static <T> T getBean(String name, Class<T> type) { + Assert.hasText(name); + Assert.notNull(type); + return applicationContext.getBean(name, type); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/StringUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/StringUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..b97e227ddd427a02a5b88aceb244eeefb0d856fa --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/StringUtil.java @@ -0,0 +1,565 @@ +package cn.wisenergy.common.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * å—符串工具类 + */ +public class StringUtil { + + /** + * String转为Integer + * + * @param str + * @return + */ + public static Integer stringToInteger(String str) { + if (str != null && !str.equalsIgnoreCase("")) { + try { + return new Integer(str); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + return null; + } + + /** + * String转为Long + * + * @param str + * @return + */ + public static Long stringToLong(String str) { + if (str != null && !str.equalsIgnoreCase("")) { + try { + return new Long(str); + } catch (NumberFormatException e) { + } + } + return null; + } + + /** + * å°†å—符串数组转化æˆLong数组 + * + * @param strArr + * @return + */ + public static Long[] strArrToLongArr(String[] strArr) { + Long[] longArr = new Long[strArr.length]; + for (int i = 0; i < strArr.length; i++) { + longArr[i] = stringToLong(strArr[i]); + } + return longArr; + } + + /** + * å°†å—符串转化为Boolean类型 + * + * @param str + * @return + */ + public static Double stringToDouble(String str) { + if (str != null && !str.equalsIgnoreCase("")) { + try { + return new Double(str); + } catch (NumberFormatException e) { + } + } + return null; + } + + /** + * å°†å—符串转化为BigDecimal + * + * @param str + * @return + */ + public static BigDecimal stringToDecimal(String str) { + if (StringUtils.isNotEmpty(str)) { + try { + return new BigDecimal(str); + } catch (NumberFormatException e) { + } + } + return null; + } + + /** + * 是å¦ä¸ºBigDecimal类型 + * + * @param str + * @return + */ + public static boolean isDecimal(String str) { + boolean res = true; + if (StringUtils.isEmpty(str)) { + return false; + } + try { + new BigDecimal(str); + } catch (NumberFormatException e) { + res = false; + } + return res; + } + + /** + * æ ¼å¼åŒ–double为å—符串 + * + * @param num + * @param pattern + * @return + */ + public static String formatNumToString(double num, String pattern) { + DecimalFormat format = new DecimalFormat(pattern); + return format.format(num); + } + + /** + * æ ¼å¼åŒ–long为å—符串 + * + * @param num + * @param pattern + * @return + */ + public static String formatNumToString(long num, String pattern) { + DecimalFormat format = new DecimalFormat(pattern); + return format.format(num); + } + + /** + * æ ¼å¼åŒ–BigDecimal为å—符串 + * + * @param num + * @param pattern + * @return + */ + public static String formatNumToString(BigDecimal num, String pattern) { + DecimalFormat format = new DecimalFormat(pattern); + return format.format(num.doubleValue()); + } + + /** + * æ ¼å¼åŒ–BigDiemalä¸ºå›ºå®šæ ¼å¼çš„å—符串 + * + * @param num + * @return + */ + public static String formatNumToString(BigDecimal num) { + return formatNumToString(num, "#,###.##"); + } + + /** + * æ ¼å¼åŒ–日期 + * + * @param date + * @param pattern + * @return + */ + public static Date formatDate(Date date, String pattern) { + SimpleDateFormat dsf = new SimpleDateFormat(pattern); + String dateStr = dsf.format(date); + try { + return dsf.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + /** + * å°†å—符串åšé‡å¤å¤šæ¬¡çš„拼接 + * + * @param str + * @param n + * @return + */ + public static String dupStr(String str, int n) { + StringBuffer sb = new StringBuffer(""); + for (int i = 1; i <= n; i++) { + sb.append(str); + } + return sb.toString(); + } + + public static String dateToString(Date date) { + return dateToString(date, "yyyy-MM-dd"); + } + + public static String datetimeToString(Date date) { + return dateToString(date, "yyyy-MM-dd HH:mm:ss"); + } + + public static String dateToString(Date date, String pattern) { + if (date != null) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(date); + } else { + return null; + } + } + + public static Date stringToDate(String str) { + return stringToDate(str, "yyyy-MM-dd"); + } + + public static Date stringToDatetime(String str) { + return stringToDate(str, "yyyy-MM-dd HH:mm:ss"); + } + + public static Date stringToDate(String str, String pattern) { + if (StringUtils.isNotEmpty(str)) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + try { + return sdf.parse(str); + } catch (ParseException e) { + return null; + } + } else { + return null; + } + } + + /** + * double类型精度的四èˆäº”å…¥ + * + * @param v + * @param scale + * @return + */ + public static double round(double v, int scale) { + if (scale < 0) { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } else { + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = new BigDecimal("1"); + return b.divide(one, scale, 4).doubleValue(); + } + } + + /** + * æ ¹æ®é•¿åº¦æˆªå–å—符串,超过长度截å–,å¦åˆ™ä¸æˆªå– + * + * @param str + * @param len + * @return + */ + public static String subStrByLen(String str, int len) { + if (StringUtils.isNotEmpty(str)) { + return str.trim().length() > len ? str.trim().substring(0, len) + : str.trim(); + } + return str; + } + + /** + * 转æ¢æ•°ç»„为å—符串,ä¸é—´ç”¨split隔开 + * + * @param arr + * @param split + * @return + */ + public static String arrayToString(String[] arr, String split) { + if (arr == null || arr.length == 0) + return ""; + + StringBuffer buffer = new StringBuffer(""); + + for (int i = 0; i < arr.length; i++) { + + if (StringUtils.isEmpty(arr[i])) + continue; + + buffer.append(arr[i]); + buffer.append(split); + } + + return buffer.length() > 0 ? buffer.substring(0, buffer.length() - 1) + : buffer.toString(); + } + + /** + * 转æ¢å—符串数组为å—符串,默认用逗å·éš”å¼€ + * + * @param arr + * @return + */ + public static String arrToString(String arr[]) { + return arrayToString(arr, ","); + } + + /** + * å°†\r\n转化为<br/>,主è¦ç”¨äºŽè§†å›¾é¡µé¢çš„显示 + * + * @param str + * @return + */ + public static String converRNToBR(String str) { + if (StringUtils.isEmpty(str)) { + return ""; + } + return str.replaceAll("\r\n", "<br/>"); + } + + /** + * 判æ–char类型的å—符是å¦ä¸ä¸ºè¡¨æƒ…å—符 + * + * @param codePoint + * @return + */ + private static boolean isNotEmojiCharacter(char codePoint) { + return (codePoint == 0x0) || + (codePoint == 0x9) || + (codePoint == 0xA) || + (codePoint == 0xD) || + ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || + ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || + ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); + } + + /** + * 过滤emoji 或者 其他éžæ–‡å—类型的å—符 + * + * @param source + * @return + */ + public static String filterEmoji(String source) { + if (source == null) { + return null; + } + int len = source.length(); + StringBuilder buf = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char codePoint = source.charAt(i); + if (isNotEmojiCharacter(codePoint)) { + buf.append(codePoint); + } + } + return buf.toString(); + } + + /** + * 去除å—符串ä¸çš„åŒå¼•å· + * + * @param str + * @return + */ + public static String trimDoubleQuotations(String str) { + if (str == null) { + return null; + } + return str.replaceAll("\"", ""); + } + + /** + * 判æ–å—符是å¦ä¸ºä¸æ–‡ + * + * @param c + * @return + */ + public static boolean isChinese(char c) { + Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); + if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS + || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B + || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS + || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) { + return true; + } + return false; + } + + /** + * 判æ–å—符串是å¦åŒ…括ä¸æ–‡ + * + * @param strName + * @return + */ + public static boolean isContainsChinese(String strName) { + char[] ch = strName.toCharArray(); + for (int i = 0; i < ch.length; i++) { + char c = ch[i]; + if (isChinese(c)) { + return true; + } + } + return false; + } + + /** + * 获å–å—符串长度(汉å算两ä½ï¼‰ + * + * @param s + * @return + */ + public static int getLength(String s) { + int length = 0; + char[] ch = s.toCharArray(); + for (char c : ch) { + if (StringUtil.isChinese(c)) { + length += 2; + } else { + length += 1; + } + } + return length; + } + + + /** + * 获å–å—符串长度(汉å算两ä½ï¼‰ + * + * @param s + * @return + */ + public static int getLengthByUtf8(String s) { + int length = 0; + char[] ch = s.toCharArray(); + for (char c : ch) { + if (StringUtil.isChinese(c)) { + length += 3; + } else { + length += 1; + } + } + return length; + } + + /** + * 指定长度åŽé¢è¡¥æŒ‡å®šå—符 + * + * @param s + * @param len + * @param item + * @return + */ + public static String addChars(String s, int len, String item) { + if (StringUtils.isBlank(s)) { + return ""; + } + + int length = getLength(s); + + if (length >= len) { + return s; + } else { + int count = len - length; + StringBuilder sb = new StringBuilder(s); + for (int i = 0; i < count; i++) { + sb.append(item); + } + return sb.toString(); + } + + } + + /** + * 指定长度åŽé¢è¡¥ç©ºæ ¼ + * + * @param s + * @param len + * @return + */ + public static String addSpace(String s, int len) { + return addChars(s, len, " "); + } + + /** + * 指定å—节长度åŽé¢è¡¥ç©ºæ ¼ + * + * @param s + * @param len + * @return + */ + public static String addSpaceByByteLen(String s, int len) { + if ("".equals(s)) { + return StringUtils.rightPad(s, len); + } + int length = org.apache.commons.codec.binary.StringUtils.getBytesUtf8(s).length; + + int strLength = getLength(s); + + if (len <= length) { + return s; + } + return StringUtils.rightPad(s, len - (length - strLength)); + } + + /** + * æŒ‡å®šç©ºæ ¼å‰é¢è¡¥ç©ºæ ¼ + * + * @param s + * @param len + * @return + */ + public static String addLeftSpace(String s, int len) { + int length = getLength(s); + if (length >= len) { + return s; + } else { + int count = len - length; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + sb.append(" "); + } + sb.append(s); + return sb.toString(); + } + } + + /** + * æŒ‡å®šé•¿åº¦ä¸¤å¤´åŠ ç©ºæ ¼ + * + * @param s + * @param len + * @return + */ + public static String addBothSpace(String s, int len) { + int length = getLength(s); + + if (length >= len) { + return s; + } else { + int count = len - length; + count = count / 2; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + sb.append(" "); + } + StringBuilder sb2 = new StringBuilder(); + sb2.append(sb.toString()); + sb2.append(s); + sb2.append(sb.toString()); + return sb2.toString(); + } + } + + /** + * 把 "1,2,3,4,5,6,7" 转化为list + * + * @param s å…¥å‚ + * @return 结果 + */ + public static List<Integer> strToArray(String s) { + if (StringUtils.isEmpty(s)) { + return new ArrayList<>(); + } + + List<Integer> result = new ArrayList<>(); + String[] str = s.split(","); + for (String string : str) { + result.add(Integer.valueOf(string)); + } + return result; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/TimeUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/TimeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..28de8051313fc7a3ecaf289900bfcff282ca4305 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/TimeUtil.java @@ -0,0 +1,105 @@ +package cn.wisenergy.common.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * æ—¶é—´æ ¼å¼è½¬æ¢å·¥å…·ç±» + */ +public class TimeUtil { + private static final String timeFormat = "yyyy-MM-dd HH:mm"; + private static final String dateFormat = "yyyy-MM-dd"; + + /** + * æ—¶é—´æ—¥æœŸæ ¼å¼ + * + * @param time + * @return + * @throws ParseException + */ + public static Date getTime(String time) throws ParseException { + SimpleDateFormat ft = new SimpleDateFormat(timeFormat); + return ft.parse(time); + } + + /** + * æ—¶é—´æ—¥æœŸæ ¼å¼ + * + * @param time + * @return + */ + public static String getTime(Date time) { + SimpleDateFormat ft = new SimpleDateFormat(timeFormat); + return ft.format(time); + } + + /** + * æ—¥æœŸæ ¼å¼ + * + * @param date + * @return + * @throws ParseException + */ + public static Date getDate(String date) throws ParseException { + SimpleDateFormat ft = new SimpleDateFormat(dateFormat); + return ft.parse(date); + } + + /** + * æ—¥æœŸæ ¼å¼ + * + * @param date + * @return + */ + public static String getDate(Date date) { + SimpleDateFormat ft = new SimpleDateFormat(dateFormat); + return ft.format(date); + } + + /** + * 将日期转化æˆæ¯«ç§’ + * + * @param date + * @return + */ + public static Long getTimeMill(Date date) { + return date.getTime(); + } + + /** + * 将毫秒转化为日期 + * + * @param time + * @return + */ + public static Date getTimeMill(Long time) { + Date date = new Date(); + date.setTime(time); + return date; + } + + /** + * 两个时间相差的分钟数 + * + * @param time1 + * @param time2 + * @return + * @Description: + */ + public static Integer getDistanceMinutes(Date time1, Date time2) { + try { + SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); + String fromDate = simpleFormat.format(time1); + String toDate = simpleFormat.format(time2); + long from = simpleFormat.parse(fromDate).getTime(); + long to = simpleFormat.parse(toDate).getTime(); + int minutes = (int) ((to - from) / (1000 * 60)); + return minutes; + } catch (ParseException e) { + e.printStackTrace(); + return 0; + } + + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/WebUtils.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/WebUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..c310230dbc40e34ac588bf11f52df9aa972b9a53 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/WebUtils.java @@ -0,0 +1,281 @@ +package cn.wisenergy.common.utils; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; + +public class WebUtils { + // 注入日志类 + private static Logger log = LoggerFactory.getLogger(WebUtils.class); + + /** + * ä¸å¯å®žä¾‹åŒ– + */ + private WebUtils() { + } + + /** + * æ·»åŠ cookie + * + * @param request HttpServletRequest + * @param response HttpServletResponse + * @param name cookieå称 + * @param value cookie值 + * @param maxAge 有效期(å•ä½: 秒) + * @param path 路径 + * @param domain 域 + * @param secure 是å¦å¯ç”¨åŠ 密 + */ + public static void addCookie(HttpServletRequest request, HttpServletResponse response, String name, String value, Integer maxAge, String path, String domain, Boolean secure, Boolean httpOnly) { + Assert.notNull(request, "request请求为空"); + Assert.notNull(response, "responseå“应为空"); + Assert.hasText(name, "cookieå称为空"); + try { + name = URLEncoder.encode(name, "UTF-8"); + value = URLEncoder.encode(value, "UTF-8"); + Cookie cookie = new Cookie(name, value); + if (maxAge != null) { + cookie.setMaxAge(maxAge); + } + if (StringUtils.isNotEmpty(path)) { + cookie.setPath(path); + } + if (StringUtils.isNotEmpty(domain)) { + cookie.setDomain(domain); + } + if (secure != null) { + cookie.setSecure(secure); + } + if (httpOnly != null) { + cookie.setHttpOnly(httpOnly); + } + response.addCookie(cookie); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + /** + * æ·»åŠ cookie + * + * @param request HttpServletRequest + * @param response HttpServletResponse + * @param name cookieå称 + * @param value cookie值 + * @param maxAge 有效期(å•ä½: 秒) + */ + public static void addCookie(HttpServletRequest request, HttpServletResponse response, String name, String value, Integer maxAge) { + addCookie(request, response, name, value, maxAge, "/", "", null, null); + } + + /** + * æ·»åŠ cookieã€æ ¹è·¯å¾„】 + * + * @param request + * @param response + * @param name + * @param value + * @param httpOnly + */ + public static void addCookie(HttpServletRequest request, HttpServletResponse response, String name, String value, Boolean httpOnly) { + addCookie(request, response, name, value, null, "/", "", null, httpOnly); + } + + /** + * æ·»åŠ cookie + * + * @param request HttpServletRequest + * @param response HttpServletResponse + * @param name cookieå称 + * @param value cookie值 + */ + public static void addCookie(HttpServletRequest request, HttpServletResponse response, String name, String value) { + addCookie(request, response, name, value, null, "/", "", null, null); + } + + /** + * 获å–cookie + * + * @param request HttpServletRequest + * @param name cookieå称 + * @return è‹¥ä¸å˜åœ¨åˆ™è¿”回null + */ + public static String getCookie(HttpServletRequest request, String name) { + Assert.notNull(request, "Request is null when receiving cookie"); + Assert.hasText(name, "The name of cookie is null when receiving cookie"); + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + try { + name = URLEncoder.encode(name, "UTF-8"); + for (Cookie cookie : cookies) { + if (StringUtils.equals(name, cookie.getName())) { + return URLDecoder.decode(cookie.getValue(), "UTF-8"); + } + } + } catch (UnsupportedEncodingException e) { + log.error("从Requestä¸èŽ·å–Cookie出错:{}", ExceptionUtils.getStackTrace(e)); + } + } + return null; + } + + /** + * 移除cookie + * + * @param request HttpServletRequest + * @param response HttpServletResponse + * @param name cookieå称 + * @param path 路径 + * @param domain 域 + */ + public static void removeCookie(HttpServletRequest request, HttpServletResponse response, String name, String path, String domain) { + Assert.notNull(request, "Request is Null when Removing Cookie"); + Assert.notNull(response, "Response is null when removing Cookie"); + Assert.hasText(name, "The name of cookie is null when removing cookie"); + try { + // åˆå§‹åŒ–å“应Cookie对象 + name = URLEncoder.encode(name, "UTF-8"); + Cookie cookie = new Cookie(name, null); + cookie.setMaxAge(0); // -1 表示关é—æµè§ˆå™¨å¤±æ•ˆ 0: ç«‹å³å¤±æ•ˆ >0: å•ä½æ˜¯ç§’, 多少秒åŽå¤±æ•ˆ + if (StringUtils.isNotEmpty(path)) { + cookie.setPath(path); + } + if (StringUtils.isNotEmpty(domain)) { + cookie.setDomain(domain); + } + response.addCookie(cookie); + } catch (Exception e) { + log.error("从Requestä¸ç§»é™¤Cookie出错:{}", ExceptionUtils.getStackTrace(e)); + } + } + + /** + * 移除cookie + * + * @param request HttpServletRequest + * @param response HttpServletResponse + * @param name cookieå称 + */ + public static void removeCookie(HttpServletRequest request, HttpServletResponse response, String name) { + removeCookie(request, response, name, "/", ""); + } + + /** + * 获å–å‚æ•° + * + * @param queryString 查询å—符串 + * @param encoding ç¼–ç æ ¼å¼ + * @param name å‚æ•°å称 + * @return å‚æ•° + */ + public static String getParameter(String queryString, String encoding, String name) { + String[] parameterValues = getParameterMap(queryString, encoding).get(name); + return parameterValues != null && parameterValues.length > 0 ? parameterValues[0] : null; + } + + /** + * 获å–å‚æ•° + * + * @param queryString 查询å—符串 + * @param encoding ç¼–ç æ ¼å¼ + * @param name å‚æ•°å称 + * @return å‚æ•° + */ + public static String[] getParameterValues(String queryString, String encoding, String name) { + return getParameterMap(queryString, encoding).get(name); + } + + /** + * 获å–å‚æ•° + * + * @param queryString 查询å—符串 + * @param encoding ç¼–ç æ ¼å¼ + * @return å‚æ•° + */ + public static Map<String, String[]> getParameterMap(String queryString, String encoding) { + Map<String, String[]> parameterMap = new HashMap<String, String[]>(); + Charset charset = Charset.forName(encoding); + if (StringUtils.isNotEmpty(queryString)) { + byte[] bytes = queryString.getBytes(charset); + if (bytes != null && bytes.length > 0) { + int ix = 0; + int ox = 0; + String key = null; + String value = null; + while (ix < bytes.length) { + byte c = bytes[ix++]; + switch ((char) c) { + case '&': + value = new String(bytes, 0, ox, charset); + if (key != null) { + putMapEntry(parameterMap, key, value); + key = null; + } + ox = 0; + break; + case '=': + if (key == null) { + key = new String(bytes, 0, ox, charset); + ox = 0; + } else { + bytes[ox++] = c; + } + break; + case '+': + bytes[ox++] = (byte) ' '; + break; + case '%': + bytes[ox++] = (byte) ((convertHexDigit(bytes[ix++]) << 4) + convertHexDigit(bytes[ix++])); + break; + default: + bytes[ox++] = c; + } + } + if (key != null) { + value = new String(bytes, 0, ox, charset); + putMapEntry(parameterMap, key, value); + } + } + } + return parameterMap; + } + + private static void putMapEntry(Map<String, String[]> map, String name, String value) { + String[] newValues = null; + String[] oldValues = map.get(name); + if (oldValues == null) { + newValues = new String[]{value}; + } else { + newValues = new String[oldValues.length + 1]; + System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); + newValues[oldValues.length] = value; + } + map.put(name, newValues); + } + + private static byte convertHexDigit(byte b) { + if ((b >= '0') && (b <= '9')) { + return (byte) (b - '0'); + } + if ((b >= 'a') && (b <= 'f')) { + return (byte) (b - 'a' + 10); + } + if ((b >= 'A') && (b <= 'F')) { + return (byte) (b - 'A' + 10); + } + throw new IllegalArgumentException(); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exception/BaseCustomException.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exception/BaseCustomException.java new file mode 100644 index 0000000000000000000000000000000000000000..096489ed8265642e714fee96fa5ce263cf074447 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exception/BaseCustomException.java @@ -0,0 +1,66 @@ +package cn.wisenergy.common.utils.exception; + +import cn.wisenergy.common.enums.RespCodeEnum; + +/** + * 接å£å¼‚常对象 + */ +public class BaseCustomException extends RuntimeException { + private static final long serialVersionUID = -4974461182923482972L; + // 错误编ç + private String errorCode; + + // 错误编ç ä¿¡æ¯ + private String errorMsg; + + /** + * 应用接å£æœ‰å‚æž„é€ å‡½æ•° + * + * @param errorCode 错误编ç + * @param errorMsg é”™è¯¯ä¿¡æ¯ + */ + public BaseCustomException(String errorCode, String errorMsg) { + super("errorCode:" + errorCode + " errorMsg:" + errorMsg); + this.errorCode = errorCode; + this.errorMsg = errorMsg; + } + + /** + * 应用接å£æœ‰å‚æž„é€ å‡½æ•° + * + * @param baseResponseCodeEnum 基本å“应枚举类 + */ + public BaseCustomException(RespCodeEnum baseResponseCodeEnum) { + super("errorCode:" + baseResponseCodeEnum.getCode() + " errorMsg:" + baseResponseCodeEnum.getMsg()); + this.errorCode = baseResponseCodeEnum.getCode(); + this.errorMsg = baseResponseCodeEnum.getMsg(); + } + + /** + * 获å–错误编ç + */ + public String getErrorCode() { + return errorCode; + } + + /** + * 设置错误编ç + */ + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + /** + * 获å–异常编ç + */ + public String getErrorMsg() { + return errorMsg; + } + + /** + * 设置异常编ç + */ + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exception/Result.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exception/Result.java new file mode 100644 index 0000000000000000000000000000000000000000..01d3f08edcbad748e5da085ab7bac6950790f0d2 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exception/Result.java @@ -0,0 +1,61 @@ +package cn.wisenergy.common.utils.exception; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wyy + * @date 2019-10-11 20:51 + */ +@Data +@ApiModel("返回结果") +public class Result<T> { + // ç»“æžœæ ‡è¯† + @ApiModelProperty(value = "ç»“æžœæ ‡è¯†",example = "success") + private String result; + + // 错误编ç + @ApiModelProperty(value = "错误编ç ",example = "1001") + private String errorCode; + + // é”™è¯¯ä¿¡æ¯ + @ApiModelProperty(value = "错误信æ¯",example = "æ“作æˆåŠŸ") + public String errorMsg; + + // å°è£…æ•°æ®çš„å‚æ•°å称 + @ApiModelProperty(value = "返回结果") + private T data; + + /** + * 结果å‚数枚举 + */ + public enum RESULT_FLG { + SUCCESS("success"), + FAIL("fail"); + + /** + * 值å˜é‡ + */ + private String value; + + /** + * å«æœ‰ç»“æžœå€¼çš„æž„é€ å‡½æ•° + * + * @param value + */ + private RESULT_FLG(String value) { + this.value = value; + } + + /** + * 获å–值 + * + * @return + */ + public String getValue() { + return this.value; + } + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/BigDecimalConvert.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/BigDecimalConvert.java new file mode 100644 index 0000000000000000000000000000000000000000..865548102515e18afb36e2abf21544b9d4f19d6c --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/BigDecimalConvert.java @@ -0,0 +1,38 @@ +package cn.wisenergy.common.utils.exportView.convert; + +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; + +/** + * BigDecimal 转化类 + */ +public class BigDecimalConvert implements Convert { + + private int scale = 2; + + public BigDecimalConvert() { + + } + + public BigDecimalConvert(int scale) { + this.scale = scale; + } + + @Override + public String convert(String value) { + + if (StringUtils.isBlank(value)) { + return ""; + } + + try { + BigDecimal b = new BigDecimal(value); + return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString(); + } catch (Exception e) { + e.printStackTrace(); + } + + return ""; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/Convert.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/Convert.java new file mode 100644 index 0000000000000000000000000000000000000000..2e8604bfd17a64076a6726d408527ec26d7eb2ab --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/Convert.java @@ -0,0 +1,8 @@ +package cn.wisenergy.common.utils.exportView.convert; + +/** + * ç±»åž‹è½¬åŒ–æŽ¥å£ + */ +public interface Convert { + String convert(String value); +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/DateConvert.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/DateConvert.java new file mode 100644 index 0000000000000000000000000000000000000000..fd3c0d8f3e52ced066e605bf3309a784fec4fcce --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/convert/DateConvert.java @@ -0,0 +1,40 @@ +package cn.wisenergy.common.utils.exportView.convert; + +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Locale; + +/** + * 日期类型转化 + */ +public class DateConvert implements Convert { + + private static final SimpleDateFormat SDF = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.US); + + private SimpleDateFormat outSDF = null; + + public DateConvert() { + this(null); + } + + public DateConvert(String pattern) { + if (StringUtils.isBlank(pattern)) { + pattern = "yyyy-MM-dd HH:mm:ss"; + } + outSDF = new SimpleDateFormat(pattern); + } + + @Override + public String convert(String value) { + try { + if (StringUtils.isNotBlank(value)) { + return outSDF.format(SDF.parse(value)); + } + } catch (ParseException e) { + e.printStackTrace(); + } + return ""; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/view/ExcelView.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/view/ExcelView.java new file mode 100644 index 0000000000000000000000000000000000000000..1dbffed50d38d0c08236ee191b6ffc3e9d263a8e --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/view/ExcelView.java @@ -0,0 +1,563 @@ +package cn.wisenergy.common.utils.exportView.view; + +import cn.wisenergy.common.utils.FileUtil; +import cn.wisenergy.common.utils.exportView.convert.Convert; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFRichTextString; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; +import org.springframework.web.servlet.view.document.AbstractXlsxView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * excel视图 + */ +public class ExcelView extends AbstractXlsxView { + + /** + * 日志类 + */ + private Logger log = LoggerFactory.getLogger(this.getClass()); + + /** + * 文件å称 + */ + private String filename; + + /** + * 表å称 + */ + private String sheetName; + + /** + * 属性 + */ + private String[] properties; + + /** + * æ ‡é¢˜ + */ + private String[] titles; + + /** + * å›¾ç‰‡å±žæ€§é›†åˆ + */ + private String[] pictures; + + /** + * 列宽 + */ + private Integer[] widths; + + /** + * 表体高度 + */ + private Float bodyHeight; + + /** + * æ•°æ® + */ + private Collection<?> data; + + /** + * é™„åŠ å†…å®¹ + */ + private String[] contents; + + /** + * æ•°æ®è½¬æ¢map + */ + private Map<String, Convert> convertMap = new HashMap<String, Convert>(); + + /** + * @param filename + * 文件å称 + * @param sheetName + * 表å称 + * @param properties + * 属性 + * @param titles + * æ ‡é¢˜ + * @param widths + * 列宽 + * @param data + * æ•°æ® + * @param contents + * é™„åŠ å†…å®¹ + * @param convertMap + * æ•°æ®è½¬åŒ–map + */ + public ExcelView(String filename, String sheetName, String[] properties, + String[] titles, Integer[] widths, Collection<?> data, + String[] contents, Map<String, Convert> convertMap) { + this.filename = filename; + this.sheetName = sheetName; + this.properties = properties; + this.titles = titles; + this.widths = widths; + this.data = data; + this.contents = contents; + this.convertMap = MapUtils.isEmpty(convertMap) ? this.convertMap + : convertMap; + } + + /** + * @param filename + * 文件å称 + * @param sheetName + * 表å称 + * @param properties + * 属性 + * @param titles + * æ ‡é¢˜ + * @param pictures + * 图片属性 + * @param widths + * 列宽 + * @param bodyHeight + * 表体高度 + * @param data + * æ•°æ® + * @param contents + * é™„åŠ å†…å®¹ + * @param convertMap + * æ•°æ®è½¬åŒ–map + */ + public ExcelView(String filename, String sheetName, String[] properties, + String[] titles, String[] pictures, Integer[] widths, + Float bodyHeight, Collection<?> data, String[] contents, + Map<String, Convert> convertMap) { + this.filename = filename; + this.sheetName = sheetName; + this.properties = properties; + this.titles = titles; + this.pictures = pictures; + this.widths = widths; + this.bodyHeight = bodyHeight; + this.data = data; + this.contents = contents; + this.convertMap = MapUtils.isEmpty(convertMap) ? this.convertMap + : convertMap; + } + + /** + * @param properties + * 属性 + * @param titles + * æ ‡é¢˜ + * @param data + * æ•°æ® + * @param contents + * é™„åŠ å†…å®¹ + */ + public ExcelView(String filename, String[] properties, String[] titles, + Collection<?> data, String[] contents, + Map<String, Convert> convertMap) { + this.filename = filename; + this.properties = properties; + this.titles = titles; + this.data = data; + this.contents = contents; + this.convertMap = MapUtils.isEmpty(convertMap) ? this.convertMap + : convertMap; + } + + /** + * @param properties + * 属性 + * @param titles + * æ ‡é¢˜ + * @param data + * æ•°æ® + */ + public ExcelView(String filename, String[] properties, String[] titles, + Collection<?> data, Map<String, Convert> convertMap) { + this.filename = filename; + this.properties = properties; + this.titles = titles; + this.data = data; + this.convertMap = MapUtils.isEmpty(convertMap) ? this.convertMap + : convertMap; + } + + /** + * @param properties + * 属性 + * @param data + * æ•°æ® + */ + public ExcelView(String[] properties, Collection<?> data) { + this.properties = properties; + this.data = data; + } + + @SuppressWarnings("rawtypes") + @Override + protected void buildExcelDocument(Map<String, Object> map, + Workbook workbook, HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse) throws Exception { + try { + + Assert.notEmpty(properties, "è¡¨æ ¼å¯¼å‡ºä¸å±žæ€§ä¸ºç©º"); + Sheet sheet; + if (StringUtils.isNotEmpty(sheetName)) { + sheet = workbook.createSheet(sheetName); + } else { + sheet = workbook.createSheet(); + } + int rowNumber = 0; + + // 创建表头 + if (titles != null && titles.length > 0) { + // HSSFRow header = sheet.createRow(rowNumber); + Row header = sheet.createRow(rowNumber); + header.setHeight((short) 400); + for (int i = 0; i < properties.length; i++) { + Cell cell = header.createCell(i); + CellStyle cellStyle = workbook.createCellStyle(); + cellStyle + .setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index); + cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); + cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); + cellStyle + .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); + Font font = workbook.createFont(); + font.setFontHeightInPoints((short) 11); + font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + cellStyle.setFont(font); + cell.setCellStyle(cellStyle); + + if (i == 0) { + Drawing patriarch = sheet.createDrawingPatriarch(); + Comment comment = patriarch + .createCellComment(new XSSFClientAnchor(0, 0, + 0, 0, (short) 1, 1, (short) 4, 4)); + comment.setString(new XSSFRichTextString("亿函科技公å¸ç‰ˆæƒæ‰€æœ‰")); + cell.setCellComment(comment); + } + if (titles.length > i && titles[i] != null) { + cell.setCellValue(titles[i]); + } else { + cell.setCellValue(properties[i]); + } + if (widths != null && widths.length > i + && widths[i] != null) { + sheet.setColumnWidth(i, widths[i]); + } else { + sheet.autoSizeColumn(i); + } + } + rowNumber++; + } + + // å†™å…¥æ•°æ® + if (data != null) { + String property; + Convert convert; + Drawing drawing = sheet.createDrawingPatriarch(); + for (Object item : data) { + Row row = sheet.createRow(rowNumber); + // 设置Excelè¡¨æ ¼é«˜åº¦(é™¤æ ‡é¢˜ä»¥å¤–) + if (this.bodyHeight != null) { + row.setHeightInPoints(this.bodyHeight); + } + + for (int i = 0; i < properties.length; i++) { + Cell cell = row.createCell(i); + CellStyle cs = workbook.createCellStyle(); + cs.setAlignment(CellStyle.ALIGN_CENTER); // æ°´å¹³å±…ä¸ + cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // åž‚ç›´å±…ä¸ + cs.setWrapText(true); // 设置自动æ¢è¡Œ + cell.setCellStyle(cs); + + property = properties[i]; + convert = convertMap.get(property); + + String value = null; + if (item instanceof Map) { + Object val = ((Map) item).get(property); + value = val == null ? null : val.toString(); + } else { + value = BeanUtils.getProperty(item, property); + } + if (convert != null) { + value = convert.convert(value); + } + cell.setCellValue(value); + if (convert == null) { + cell.setCellValue(BeanUtils.getProperty(item, + property)); + } else { + cell.setCellValue(convert.convert(BeanUtils + .getProperty(item, property))); + } + + if (rowNumber == 0 || rowNumber == 1) { + if (widths != null && widths.length > i + && widths[i] != null) { + sheet.setColumnWidth(i, widths[i]); + } else { + sheet.autoSizeColumn(i); + } + } + } + + // 处ç†å›¾ç‰‡ + if (pictures != null) { + for (int j = 0; j < pictures.length; j++) { + property = pictures[j]; + String value = null; + if (item instanceof Map) { + Object val = ((Map) item).get(property); + value = val == null ? null : val.toString(); + } else { + value = BeanUtils.getProperty(item, property); + } + if (StringUtils.isNotBlank(value)) { + + // æ¸…ç©ºå›¾ç‰‡åœ°å€ + row.getCell(properties.length - 1 + j) + .setCellValue(""); + + // 将图片æœåŠ¡å™¨ä¸Šçš„图片转æˆbyte数组 + InputStream is = FileUtil + .remotePathToStream(value); + if (is != null) { + byte[] data = IOUtils.toByteArray(is); + // 写图片 + XSSFClientAnchor anchor = new XSSFClientAnchor( + 0, + 0, + 0, + 0, + (short) (properties.length - 1 + j), + row.getRowNum(), + (short) (properties.length + j), + row.getRowNum() + 1); + drawing.createPicture( + anchor, + workbook.addPicture( + data, + XSSFWorkbook.PICTURE_TYPE_JPEG)); + } + } + } + } + + rowNumber++; + } + } + + // å†™å…¥æ±‡æ€»ä¿¡æ¯ + if (contents != null && contents.length > 0) { + rowNumber++; + for (String content : contents) { + Row row = sheet.createRow(rowNumber); + Cell cell = row.createCell(0); + CellStyle cellStyle = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setColor(HSSFColor.GREY_50_PERCENT.index); + cellStyle.setFont(font); + cell.setCellStyle(cellStyle); + cell.setCellValue(content); + rowNumber++; + } + } + + httpServletResponse.setContentType("application/force-download"); + if (StringUtils.isNotEmpty(filename)) { + httpServletResponse.setHeader( + "Content-disposition", + "attachment; filename=" + + URLEncoder.encode(filename, "UTF-8")); + } else { + httpServletResponse.setHeader("Content-disposition", + "attachment"); + } + } catch (Exception e) { + log.error( + "\r\n ************ Excle导出工具类方法ã€buildExcelDocument】报错:{}", + ExceptionUtils.getStackTrace(e)); + } + } + + /** + * 获å–文件å称 + * + * @return 文件å称 + */ + public String getFileName() { + return filename; + } + + /** + * 设置文件å称 + * + * @param filename + * 文件å称 + */ + public void setFileName(String filename) { + this.filename = filename; + } + + /** + * 获å–表å称 + * + * @return 表å称 + */ + public String getSheetName() { + return sheetName; + } + + /** + * 设置表å称 + * + * @param sheetName + * 表å称 + */ + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + + /** + * 获å–属性 + * + * @return 属性 + */ + public String[] getProperties() { + return properties; + } + + /** + * 设置属性 + * + * @param properties + * 属性 + */ + public void setProperties(String[] properties) { + this.properties = properties; + } + + /** + * 获å–æ ‡é¢˜ + * + * @return æ ‡é¢˜ + */ + public String[] getTitles() { + return titles; + } + + /** + * è®¾ç½®æ ‡é¢˜ + * + * @param titles + * æ ‡é¢˜ + */ + public void setTitles(String[] titles) { + this.titles = titles; + } + + /** + * 获å–å›¾ç‰‡å±žæ€§é›†åˆ + */ + public String[] getPictures() { + return pictures; + } + + /** + * è®¾ç½®å›¾ç‰‡å±žæ€§é›†åˆ + */ + public void setPictures(String[] pictures) { + this.pictures = pictures; + } + + /** + * 获å–列宽 + * + * @return 列宽 + */ + public Integer[] getWidths() { + return widths; + } + + /** + * 设置列宽 + * + * @param widths + * 列宽 + */ + public void setWidths(Integer[] widths) { + this.widths = widths; + } + + /** + * 获å–表体高度 + */ + public Float getBodyHeight() { + return bodyHeight; + } + + /** + * 设置表体高度 + */ + public void setBodyHeight(Float bodyHeight) { + this.bodyHeight = bodyHeight; + } + + /** + * 获å–æ•°æ® + * + * @return æ•°æ® + */ + public Collection<?> getData() { + return data; + } + + /** + * è®¾ç½®æ•°æ® + * + * @param data + * æ•°æ® + */ + public void setData(Collection<?> data) { + this.data = data; + } + + /** + * 获å–é™„åŠ å†…å®¹ + * + * @return é™„åŠ å†…å®¹ + */ + public String[] getContents() { + return contents; + } + + /** + * è®¾ç½®é™„åŠ å†…å®¹ + * + * @param contents + * é™„åŠ å†…å®¹ + */ + public void setContents(String[] contents) { + this.contents = contents; + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/view/PdfView.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/view/PdfView.java new file mode 100644 index 0000000000000000000000000000000000000000..74b81d28ba2de2a49f8243256ffdc3db5fcb6ad9 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/exportView/view/PdfView.java @@ -0,0 +1,39 @@ +package cn.wisenergy.common.utils.exportView.view; + +import org.springframework.web.servlet.view.AbstractView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Map; + +/** + * pdf视图 + * Created by yqh on 2017/2/13. + */ +public class PdfView extends AbstractView { + + private String filename; + + public PdfView(String filename) { + super(); + this.setContentType("application/pdf"); + this.filename = filename; + } + + @Override + protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + if (filename != null) { + OutputStream os = httpServletResponse.getOutputStream(); + InputStream is = new FileInputStream(filename); + int len = -1; + byte[] arr = new byte[1024]; + while ((len = is.read(arr)) != -1) { + os.write(arr, 0, len); + } + is.close(); + } + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/file/FilePathConsts.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/file/FilePathConsts.java new file mode 100644 index 0000000000000000000000000000000000000000..32d063fc4113193e8003a7f451e0317e168e19ac --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/file/FilePathConsts.java @@ -0,0 +1,13 @@ +package cn.wisenergy.common.utils.file; + +/** + * @author wyy + * @date 2019-08-21 23:50 + */ +public class FilePathConsts { + // 媒体文件 + public static final String FILE_MEDIA_PATH = "/upload/media"; + + // 二维ç 图片路径 + public static final String FILE_QR_PATH = "/upload/qr"; +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/IDWorker.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/IDWorker.java new file mode 100644 index 0000000000000000000000000000000000000000..54a686ec77ca1274ccdd88295b5c1443f1dce4d3 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/IDWorker.java @@ -0,0 +1,85 @@ +package cn.wisenergy.common.utils.id; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Serializable; + +public class IDWorker implements Serializable { + + private static final long serialVersionUID = -322371382575481443L; + + protected static final Logger LOG = LoggerFactory.getLogger(IDWorker.class); + + //工作ä¸å¿ƒID + private long workerId; + //æ•°æ®ä¸å¿ƒID + private long datacenterId; + //自增长åºåˆ— + private long sequence = 0L; + + //时间戳基数--2016-04-13 10:43 + private long twepoch = 1460515462699L; + + private long workerIdBits = 5L; + private long datacenterIdBits = 5L; + private long maxWorkerId = -1L ^ (-1L << workerIdBits); + private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); + private long sequenceBits = 12L; + + private long workerIdShift = sequenceBits; + private long datacenterIdShift = sequenceBits + workerIdBits; + private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + private long sequenceMask = -1L ^ (-1L << sequenceBits); + + private long lastTimestamp = -1L; + + public IDWorker(long workerId, long datacenterId) { + + if (workerId > maxWorkerId || workerId < 0) { + throw new IllegalArgumentException(String.format("workerId必须在0-%d之间", maxWorkerId)); + } + if (datacenterId > maxDatacenterId || datacenterId < 0) { + throw new IllegalArgumentException(String.format("datacenterId必须在0-%d之间", maxDatacenterId)); + } + this.workerId = workerId; + this.datacenterId = datacenterId; + LOG.info(String.format("IDWorkeråˆå§‹åŒ–完æˆ. 时间戳åç§»é‡ %d, datacenterIdä½æ•° %d, workerIdä½æ•° %d, 自增åºåˆ—ä½æ•° %d, workerid %d", timestampLeftShift, datacenterIdBits, workerIdBits, sequenceBits, workerId)); + } + + public synchronized long nextId() { + long timestamp = timeGen(); + + if (timestamp < lastTimestamp) { + LOG.error(String.format("时钟被修改,拒ç»è¯·æ±‚,直到 %d.", lastTimestamp)); + throw new RuntimeException(String.format("时钟被修改,拒ç»ä¸ºæ¯«ç§’æ•°%d生æˆID", lastTimestamp - timestamp)); + } + + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & sequenceMask; + if (sequence == 0) { + timestamp = tilNextMillis(lastTimestamp); + } + } else { + sequence = 0L; + } + + lastTimestamp = timestamp; + + return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; + } + + protected long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + protected long timeGen() { + return System.currentTimeMillis(); + } +} + diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/LineCodeWorker.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/LineCodeWorker.java new file mode 100644 index 0000000000000000000000000000000000000000..e79396facafacd42758e22033333263a99cc76a3 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/LineCodeWorker.java @@ -0,0 +1,46 @@ +package cn.wisenergy.common.utils.id; + +import cn.wisenergy.common.utils.exception.BaseCustomException; +import org.apache.commons.lang3.StringUtils; + +/** + * æ¡å½¢ç 工具类 + */ +public class LineCodeWorker { + + /** + * æ ¹æ®æ¡å½¢ç 值生æˆè®¡ç®—åŽçš„æ¡å½¢ç + * + * @param lineCode + * @return + */ + public static String encode(String lineCode) { + char[] chars = lineCode.toCharArray(); + int code = 0; + for (char c : chars) { + code = (c - '0') + code; + } + return lineCode + (code % 10); + } + + /** + * æ ¹æ®æ¡å½¢ç 还原为系统æ¡å½¢ç + * + * @param lineCode + * @return + */ + public static String decode(String lineCode) { + if (StringUtils.isNotBlank(lineCode)) { + lineCode = lineCode.trim(); + int len = lineCode.length(); + if (len > 1) { + String preNo = lineCode.substring(0, len - 1); + if (lineCode.equals(encode(preNo))) { + return preNo; + } + } + } + throw new BaseCustomException("verifyLineCode Error", "æ¡å½¢ç 错误!"); + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/OrderNoWorker.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/OrderNoWorker.java new file mode 100644 index 0000000000000000000000000000000000000000..13e68027404c0fba5f22274973aa0eca2c7543ef --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/id/OrderNoWorker.java @@ -0,0 +1,66 @@ +package cn.wisenergy.common.utils.id; + +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * 订å•å·å·¥å…·ç±» + */ +public class OrderNoWorker implements Serializable { + + private static final long serialVersionUID = -5948180296676942804L; + + private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + /** + * 生æˆè®¢å•å· + * + * @return + */ + public synchronized static String get() { + StringBuilder sb = new StringBuilder(); + sb.append(SDF.format(new Date())); + sb.append(RandomStringUtils.randomNumeric(2)); + sb.append(getSecurityCode(sb.toString())); + return sb.toString(); + } + + /** + * 生æˆè®¢å•è¯†åˆ«ç + * + * @param preNo ä¸å«æœ‰è¯†åˆ«ç 的订å•å· + * @return + */ + private static int getSecurityCode(String preNo) { + char[] chars = preNo.toCharArray(); + int code = 0; + for (char c : chars) { + code = (c - '0') + code; + } + return code % 10; + } + + /** + * 验è¯è®¢å•å· + * + * @param orderNo 订å•å· + * @return + */ + public static boolean verifyOrderNo(String orderNo) { + + if (StringUtils.isNotBlank(orderNo)) { + orderNo = orderNo.trim(); + if (orderNo.length() == 24) { + String preNo = orderNo.substring(0, 23); + return orderNo.substring(23).equals(Integer.toString(getSecurityCode(preNo))); + } + } + + return false; + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ip/IpAddress.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ip/IpAddress.java new file mode 100644 index 0000000000000000000000000000000000000000..a4a5a4eb76592f222c8fbdcef2d35844a3cce1e3 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ip/IpAddress.java @@ -0,0 +1,124 @@ +package cn.wisenergy.common.utils.ip; + +import java.io.Serializable; + +/** + * IP地å€ä½ç½®ä¿¡æ¯ + */ +public class IpAddress implements Serializable { + private static final long serialVersionUID = -109739807486030851L; + + /** + * IPåœ°å€ + */ + private String ip; + + /** + * 所属国家 + */ + private String country; + + /** + * 所属çœä»½ + */ + private String province; + + /** + * 所属城市 + */ + private String city; + + /** + * 所属区县 + */ + private String region; + + /** + * 地å€ä¿¡æ¯ + */ + private String addr; + + /** + * 获å–IPåœ°å€ + */ + public String getIp() { + return ip; + } + + /** + * 设置IPåœ°å€ + */ + public void setIp(String ip) { + this.ip = ip; + } + + /** + * 获å–所属国家 + */ + public String getCountry() { + return country; + } + + /** + * 设置所属国家 + */ + public void setCountry(String country) { + this.country = country; + } + + /** + * 获å–所属çœä»½ + */ + public String getProvince() { + return province; + } + + /** + * 设置所属çœä»½ + */ + public void setProvince(String province) { + this.province = province; + } + + /** + * 获å–所属城市 + */ + public String getCity() { + return city; + } + + /** + * 设置所属城市 + */ + public void setCity(String city) { + this.city = city; + } + + /** + * 获å–所属区县 + */ + public String getRegion() { + return region; + } + + /** + * 设置所属区县 + */ + public void setRegion(String region) { + this.region = region; + } + + /** + * 获å–地å€ä¿¡æ¯ + */ + public String getAddr() { + return addr; + } + + /** + * 设置地å€ä¿¡æ¯ + */ + public void setAddr(String addr) { + this.addr = addr; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ip/IpUtils.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ip/IpUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b23d3d9a87f6faf10cf53accb2f533dc847b78c2 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/ip/IpUtils.java @@ -0,0 +1,101 @@ +package cn.wisenergy.common.utils.ip; + +import cn.wisenergy.common.utils.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; + +/** + * IP工具类 + * + * @author WYY + * @date 2018/06/06 + */ +public class IpUtils { + + /** + * IPä¿¡æ¯æŸ¥è¯¢æŽ¥å£åœ°å€ + */ + public static final String GET_IPINFO_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + /** + * 获å–用户真实IP地å€ï¼Œä¸ä½¿ç”¨request.getRemoteAddr()çš„åŽŸå› æ˜¯ + * 有å¯èƒ½ç”¨æˆ·ä½¿ç”¨äº†ä»£ç†è½¯ä»¶æ–¹å¼é¿å…真实IP地å€, + * å¯æ˜¯ï¼Œå¦‚果通过了多级åå‘代ç†çš„è¯ï¼ŒX-Forwarded-For的值并ä¸æ¢ä¸€ä¸ªï¼Œè€Œæ˜¯ä¸€ä¸²IP值, + * 究竟哪个æ‰æ˜¯çœŸæ£çš„用户端的真实IP呢? + * ç”案是å–X-Forwarded-Forä¸ç¬¬ä¸€ä¸ªéžunknown的有效IPå—符串。 + * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100 + * 用户真实IP为: 192.168.1.110 + * + * @param request + * @return 真是IP + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + if (StringUtils.isNotEmpty(ip) && ip.indexOf(",") > -1) { + String[] arr = ip.split(","); + if (arr != null && arr.length > 0) { + for (String s : arr) { + if (StringUtils.isNotEmpty(s) && !StringUtils.equalsIgnoreCase(s, "unknown")) { + ip = s; + break; + } + } + } + } + + return ip; + } + + /** + * 获å–IPä½ç½®ä¿¡æ¯ + * + * @param ipAddress ipåœ°å€ + * @param encodingString æœåŠ¡å™¨ç«¯è¯·æ±‚ç¼–ç 。如GBK,UTF-8ç‰ + * @return IpAddress对象 + * @throws UnsupportedEncodingException + */ + public static IpAddress getAddresses(String ipAddress, String encodingString) throws UnsupportedEncodingException { + // åˆå§‹åŒ–请求å‚æ•° + Map<String, Object> map = new HashMap<>(); + map.put("json", true); + map.put("ip", ipAddress.trim()); + // 检查请求编ç 。如果为空,默认为utf-8 + if (StringUtils.isBlank(encodingString)) { + encodingString = "utf-8"; + } + // å‘é€è¯·æ±‚ + String returnStr = HttpUtil.get(IpUtils.GET_IPINFO_URL, map, encodingString); + if (returnStr != null) { + JSONObject jsonObject = JSONObject.parseObject(returnStr); + IpAddress address = new IpAddress(); + address.setIp(ipAddress); + address.setProvince(jsonObject.get("pro").toString()); + address.setCity(jsonObject.get("city").toString()); + address.setRegion(jsonObject.get("region").toString()); + address.setAddr(jsonObject.get("addr").toString()); + return address; + } + return null; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/math/MathUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/math/MathUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..4760e11857e4afd46ed06b1285f2df8cffa05cf0 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/math/MathUtil.java @@ -0,0 +1,30 @@ +package cn.wisenergy.common.utils.math; + +import java.text.NumberFormat; + +/** + * @ClassName MathUtil + * @Description 计算工具类 + * @Author meng + * @Date 2020/5/7 15:36 + * @Version 1.0 + */ +public class MathUtil { + + /** + * 计算两个数的百分比(ä¿ç•™å°æ•°ç‚¹åŽä¸¤ä½) + * @param num1 被除数 + * @param num2 除数 + * @return + */ + public static String getPercent(Integer num1,Integer num2){ + if(num2 == 0){ + return "0"; + } + NumberFormat numberFormat = NumberFormat.getInstance(); + // 设置精确到å°æ•°ç‚¹åŽ2ä½ + numberFormat.setMaximumFractionDigits(2); + String str = numberFormat.format((double)num1 / (double)num2 * 100); + return str; + } +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/mybatis/DecimalHandler.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/mybatis/DecimalHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..0f77737d738d241fef92b8f9d3ac00a5e2518324 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/mybatis/DecimalHandler.java @@ -0,0 +1,45 @@ +package cn.wisenergy.common.utils.mybatis; + +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.TypeHandler; + +import java.math.BigDecimal; +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * MyBatisDecimal转æ¢å™¨ + * Created by wyy on 2017/2/21. + */ +public class DecimalHandler implements TypeHandler<BigDecimal> { + @Override + public void setParameter(PreparedStatement preparedStatement, int i, BigDecimal bigDecimal, JdbcType jdbcType) throws SQLException { + preparedStatement.setBigDecimal(i, bigDecimal); + } + + @Override + public BigDecimal getResult(ResultSet resultSet, String s) throws SQLException { + return transfer(resultSet.getString(s)); + } + + @Override + public BigDecimal getResult(ResultSet resultSet, int i) throws SQLException { + return transfer(resultSet.getString(i)); + } + + @Override + public BigDecimal getResult(CallableStatement callableStatement, int i) throws SQLException { + return transfer(callableStatement.getString(i)); + } + + private BigDecimal transfer(String val) { + if (val != null) { + val = val.replace(",", ""); + return new BigDecimal(val); + } + return null; + } + +} diff --git a/wisenergy-common/src/main/java/cn/wisenergy/common/utils/reflect/ReflectUtil.java b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/reflect/ReflectUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..f24a3130e49af65fdc76496aadf0506f3f6ee409 --- /dev/null +++ b/wisenergy-common/src/main/java/cn/wisenergy/common/utils/reflect/ReflectUtil.java @@ -0,0 +1,41 @@ +package cn.wisenergy.common.utils.reflect; + +import org.apache.ibatis.plugin.Invocation; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.SystemMetaObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @ClassName ReflectUtil + * @Description å射工具类 + * @Author meng + * @Date 2020/5/7 18:22 + * @Version 1.0 + */ +public class ReflectUtil { + private static final Logger logger = LoggerFactory.getLogger(ReflectUtil.class); + + + /** + * 分离最åŽä¸€ä¸ªä»£ç†çš„ç›®æ ‡å¯¹è±¡ + * + * @param invocation + * @return + */ + public static MetaObject getRealTarget(Invocation invocation) { + MetaObject metaStatementHandler = SystemMetaObject.forObject(invocation.getTarget()); + + while (metaStatementHandler.hasGetter("h")) { + Object object = metaStatementHandler.getValue("h"); + metaStatementHandler = SystemMetaObject.forObject(object); + } + + while (metaStatementHandler.hasGetter("target")) { + Object object = metaStatementHandler.getValue("target"); + metaStatementHandler = SystemMetaObject.forObject(object); + } + + return metaStatementHandler; + } +} diff --git a/wisenergy-common/wisenergy-common.iml b/wisenergy-common/wisenergy-common.iml new file mode 100644 index 0000000000000000000000000000000000000000..53c897ff128505f6a2e80a8bdfff32b0fc9b9578 --- /dev/null +++ b/wisenergy-common/wisenergy-common.iml @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.3.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.glassfish:javax.el:3.0.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" /> + <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> + <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" /> + <orderEntry type="library" name="Maven: org.mockito:mockito-core:2.23.4" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" /> + <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-test:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" /> + <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" /> + <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" /> + <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-devtools:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.16" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.6.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.9.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" /> + <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.54" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" /> + <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi:3.9" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.9" level="project" /> + <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" /> + <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.9" level="project" /> + <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.3.0" level="project" /> + <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> + <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.6.7" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" /> + <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> + <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.8" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> + <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" /> + <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" /> + <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" /> + <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/wisenergy-mapper/.gitignore b/wisenergy-mapper/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/wisenergy-mapper/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/wisenergy-mapper/pom.xml b/wisenergy-mapper/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..fca85df80e5f381e5bdff9da2bed691001218beb --- /dev/null +++ b/wisenergy-mapper/pom.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>wisenergy-parent</artifactId> + <groupId>cn.wisenergy</groupId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>wisenergy-mapper</artifactId> + <version>${moduleVersion.wisenergy-mapper}</version> + <packaging>jar</packaging> + + <!-- 项目ä¾èµ– --> + <dependencies> + <!-- 模å—ä¾èµ– --> + <dependency> + <groupId>cn.wisenergy</groupId> + <artifactId>wisenergy-model</artifactId> + <version>${moduleVersion.wisenergy-model}</version> + </dependency> + </dependencies> + + <!-- MAVEN构建 --> + <build> + <finalName>${project.artifactId}-${moduleVersion.wisenergy-mapper}</finalName> + </build> +</project> \ No newline at end of file diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/AccountMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/AccountMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..012edb9ee8bc913a7423b8d1033a36170cfb6658 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/AccountMapper.java @@ -0,0 +1,16 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.AccountInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.Map; + +public interface AccountMapper extends BaseMapper<AccountInfo> { + /** + * 查询管ç†å‘˜ä¿¡æ¯ + * @param map 查询å‚æ•° + * @return + */ + AccountInfo getAccountInfo(Map<String, Object> map); + +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/AdmissionRuleMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/AdmissionRuleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d68eb4b2a55eabfea5bda09e171bff8cb03678c1 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/AdmissionRuleMapper.java @@ -0,0 +1,18 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.AdmissionRule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 86187 + */ +public interface AdmissionRuleMapper extends BaseMapper<AdmissionRule> { + AdmissionRule add(AdmissionRule admissionRule); + + int edit(AdmissionRule admissionRule); + + int delById(@Param("id") Integer id); + + AdmissionRule getByType(@Param("type") Integer type); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/BannerMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/BannerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..0df8469287b7aa97f295dd16901e2ae7a6bf7cbb --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/BannerMapper.java @@ -0,0 +1,65 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.Banner; +import cn.wisenergy.model.dto.BannerDto; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface BannerMapper extends BaseMapper<Banner> { + /** + * æ·»åŠ å¹¿å‘Š + * + * @param advertising å¹¿å‘Šä¿¡æ¯ + * @return å¹¿å‘Šä¿¡æ¯ + */ + int add(Banner advertising); + + /** + * 编辑广告 + * + * @param advertising å¹¿å‘Šä¿¡æ¯ + * @return 结果 + */ + int edit(Banner advertising); + + /** + * åˆ é™¤å¹¿å‘Š + * + * @param id 广告id + * @return 结果 + */ + int delById(@Param("id") Integer id); + + /** + * 获å–广告列表 + * @param map ç›é€‰å‚æ•° + * @return 广告列表 + */ + List<BannerDto> getList(Map<String,Object> map); + + /** + * 统计广告æ¡æ•° + * @return 广告æ¡æ•° + */ + int count(Map<String,Object> map); + + /** + * 通过广告idæŸ¥è¯¢å¹¿å‘Šä¿¡æ¯ + * @param id + * @return + */ + Banner getById(@Param("id") Integer id); + + /** + * 通过广告ID改å˜æŠ•æ”¾çŠ¶æ€ + * @param id + * @param status + * @return + */ + int editStatus(@Param("id") Integer id, @Param("status") Integer status); + + List<Banner> getTopBanners(@Param("type") Integer type); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/CardMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/CardMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..abf6b1cee96e1d4023cae8a5b9158781afc93712 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/CardMapper.java @@ -0,0 +1,43 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.CardInfo; +import cn.wisenergy.model.dto.ExportCardDto; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 86187 + */ +public interface CardMapper extends BaseMapper<CardInfo> { + /** + * æ·»åŠ å……å€¼å¡åå¡ + * + * @param cardInfos + * @return + */ + int add(List<CardInfo> cardInfos); + + /** + * 编辑 + * @param cardInfo ä¿¡æ¯ + * @return 结果 + */ + int edit(CardInfo cardInfo); + + /** + * æ ¹æ®å¯†ç 获å–充值å¡ä¿¡æ¯ + * + * @param secretKey 密ç + * @return 充值å¡ä¿¡æ¯ + */ + CardInfo getBySecretKey(@Param("secretKey") String secretKey); + + /** + * 通过批次å·èŽ·å–所有å—å¡ + * @param batchNumber æ‰¹æ¬¡å· + * @return åå¡é›†åˆ + */ + List<CardInfo> getList(@Param("batchNumber")String batchNumber); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/GraduationMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/GraduationMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..aede4b6f6d4c058c29e36de8c4c00164917458f7 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/GraduationMapper.java @@ -0,0 +1,16 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.Graduation; +import cn.wisenergy.model.dto.BannerDto; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; +import java.util.Map; + +public interface GraduationMapper extends BaseMapper<Graduation> { + /** + * 获å–广告列表 + * @return æ¯•ä¸šé™¢æ ¡åˆ—è¡¨ + */ + List<Graduation> getList(); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/LoginRecordMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/LoginRecordMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..56cee495249c9959aac0aabdc6a881ec04b09476 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/LoginRecordMapper.java @@ -0,0 +1,32 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.LoginRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +public interface LoginRecordMapper extends BaseMapper<LoginRecord> { + + /** + * æ·»åŠ ç™»å½•ä¿¡æ¯ + * @param loginRecord ç™»å½•ä¿¡æ¯ + * @return ç™»å½•ä¿¡æ¯ + */ + int add(LoginRecord loginRecord); + + /** + * 编辑 + * @param loginRecord ç™»å½•ä¿¡æ¯ + * @return 结果 + */ + int edit(LoginRecord loginRecord); + + /** + * åˆ é™¤ç™»å½•è®°å½• + * @param id 记录id + * @return 结果 + */ + int delById(@Param("id") Integer id); + + LoginRecord getById(@Param("userId") Integer userId); + +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/PayRecordMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/PayRecordMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..f15aa2f1094f0029792b93d947242e01b0d3ec4b --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/PayRecordMapper.java @@ -0,0 +1,22 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.PayRecord; +import cn.wisenergy.model.vo.PayRecordShowVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author 86187 + */ +public interface PayRecordMapper extends BaseMapper<PayRecord> { + int add(PayRecord payRecord); + + List<PayRecordShowVo> getList(Map<String,Object> map); + + int count(Map<String,Object> map); + + List<PayRecord> getById(@Param("userId") Integer userId); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/PriceMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/PriceMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d1af82863f275124ff82e254efc808192eff42b2 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/PriceMapper.java @@ -0,0 +1,20 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.Price; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 86187 + */ +public interface PriceMapper extends BaseMapper<Price> { + int add(Price price); + + List<Price> getList(); + + int count(); + + Price getByMoney(@Param("money") Integer money); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/ProfessionMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/ProfessionMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..14c793ea7405b19f03add49faaa38e19dd14e6bb --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/ProfessionMapper.java @@ -0,0 +1,23 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.Profession; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ProfessionMapper extends BaseMapper<Profession> { + Profession add(Profession profession); + + List<Profession> getList(@Param("type") Integer type); + + Profession getById(@Param("id") Integer id); + + /** + * æ ¹æ®ä¸“业ids,获å–专业å称 + * + * @param ids ids + * @return 专业å称 + */ + List<String> getNameByIds(@Param("list") List<Integer> ids); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/RefillCardMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/RefillCardMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..67b4cc1c965c10fc2c461d08d5b541a0774b0466 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/RefillCardMapper.java @@ -0,0 +1,54 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.RefillCard; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface RefillCardMapper extends BaseMapper<RefillCardMapper> { + + /** + * æ·»åŠ å……å€¼å¡ + * @param refillCard + * @return + */ + int add(RefillCard refillCard); + + /** + * 改å˜æ¿€æ´»çŠ¶æ€ + * @param batchNumber + * @return + */ + int update(@Param("batchNumber") String batchNumber); + + /** + * 获å–充值å¡ä¿¡æ¯ + * @param map + * @return + */ + List<RefillCard> getList(Map<String,Object> map); + + /** + * 获å–充值å¡æ•°é‡ + * @return + */ + Integer getUserNumbers(); + + /** + * 通过ID查询充值å¡ä¿¡æ¯ + * @param id 主键 + * @return 充值å¡ä¿¡æ¯ + */ + RefillCard getById(@Param("id") Integer id); + + int setIsMakeCard(@Param("id") Integer id); + + /** + * 通过批次å·æŸ¥è¯¢å……值å¡ä¿¡æ¯ + * @param batchNumber æ‰¹æ¬¡å· + * @return 充值å¡ä¿¡æ¯ + */ + RefillCard getByBatchNumber(@Param("batchNumber") String batchNumber); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..c24a5ab521f4dd7f28954a3069d328df5aa5038b --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java @@ -0,0 +1,39 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.SchemeInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author 86187 + */ +public interface SchemeMapper extends BaseMapper<SchemeInfo> { + int add(SchemeInfo schemeInfo); + + List<SchemeInfo> getList(Map<String,Object> map); + + /** + * 编辑 + * @param schemeInfo ç¼–è¾‘ä¿¡æ¯ + * @return 结果 + */ + int edit(SchemeInfo schemeInfo); + + /** + * 统计 + * @return æ•°é‡ + */ + int count(); + + /** + * 获å–æ–¹æ¡ˆä¿¡æ¯ + * @param id 方案id + * @return æ–¹æ¡ˆä¿¡æ¯ + */ + SchemeInfo getById(@Param("id") Integer id); + + int getByType(@Param("type") Integer type); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeRecordMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeRecordMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..69b719264dc29639aa75b6a01654e799a8a32a59 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeRecordMapper.java @@ -0,0 +1,62 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.SchemeQueryRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author 86187 + */ +public interface SchemeRecordMapper extends BaseMapper<SchemeQueryRecord> { + + /** + * æ·»åŠ æ–¹æ¡ˆè®°å½• + * + * @param schemeQueryRecord æ–¹æ¡ˆè®°å½•ä¿¡æ¯ + * @return æ–¹æ¡ˆè®°å½•ä¿¡æ¯ + */ + int add(SchemeQueryRecord schemeQueryRecord); + + /** + * 编辑方案记录 + * + * @param schemeQueryRecord æ–¹æ¡ˆè®°å½•ä¿¡æ¯ + * @return 0 失败 1 æˆåŠŸ + */ + int edit(SchemeQueryRecord schemeQueryRecord); + + /** + * 获å–æ–¹æ¡ˆè®°å½•ä¿¡æ¯ + * + * @param id 方案记录id + * @return + */ + int delById(@Param("id") Integer id); + + /** + * 统计方案记录æ¡æ•° + * + * @param map 统计æ¡ä»¶ + * @return 记录æ¡æ•° + */ + int count(Map<String, Object> map); + + /** + * @param userId 用户id + * @param startNum 开始数 + * @param endNum 结æŸæ•° + * @return 列表 + */ + List<SchemeQueryRecord> getByUserId(@Param("userId") Integer userId, @Param("startNum") Integer startNum, + @Param("endNum") Integer endNum); + + /** + * + * @param id 方案查询记录id + * @return æŸ¥è¯¢æ–¹æ¡ˆä¿¡æ¯ + */ + SchemeQueryRecord getById(@Param("id") Integer id); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/ScoreInfoMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/ScoreInfoMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..68e54ac6d2b5ee2afcd35985613569a0b3361ed2 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/ScoreInfoMapper.java @@ -0,0 +1,33 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.ScoreInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +public interface ScoreInfoMapper extends BaseMapper<ScoreInfo> { + /** + * æ·»åŠ è€ƒç”Ÿæˆç»© + * + * @param scoreInfo æˆç»©ä¿¡æ¯ + * @return æˆç»©ä¿¡æ¯ + */ + int add(ScoreInfo scoreInfo); + + /** + * 编辑考生æˆç»© + * + * @param scoreInfo æˆç»©ä¿¡æ¯ + * @return 结果 + */ + int edit(ScoreInfo scoreInfo); + + /** + * åˆ é™¤è€ƒç”Ÿæˆç»© + * + * @param id æˆç»©id + * @return 结果 + */ + int delById(@Param("id") Integer id); + + ScoreInfo getById(@Param("userId") Integer userId); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserLimitMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserLimitMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..574aff73848f32e9d06158234f87500c703d181a --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserLimitMapper.java @@ -0,0 +1,22 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.UserLimit; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 86187 + */ +public interface UserLimitMapper extends BaseMapper<UserLimit> { + int add(UserLimit userLimit); + + int edit(UserLimit userLimit); + + /** + * 获å–æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + * + * @param userId 用户id + * @return æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + */ + UserLimit getByUserId(@Param("userId") Integer userId); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserLimitRecordMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserLimitRecordMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3b529221a6b70ae5b025df9fa1daa1395deb9a88 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserLimitRecordMapper.java @@ -0,0 +1,16 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.UserLimitRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 86187 + */ +public interface UserLimitRecordMapper extends BaseMapper<UserLimitRecord> { + int add(UserLimitRecord userLimitRecord); + + UserLimitRecord edit(UserLimitRecord userLimitRecord); + + UserLimitRecord getByUserId(@Param("userId") Integer userId); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserVolunteerMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserVolunteerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..28f1a000f0f61dbf69e34499061eb2a3fc4440a7 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UserVolunteerMapper.java @@ -0,0 +1,23 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.UserVolunteer; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 86187 + */ +public interface UserVolunteerMapper extends BaseMapper<UserVolunteer> { + + UserVolunteer add(UserVolunteer userVolunteer); + + int edit(UserVolunteer userVolunteer); + + int delById(@Param("id") Integer id); + + int creates(@Param("list") List<UserVolunteer> list); + + List<UserVolunteer> listById(Integer schemeRecordId); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UsersMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UsersMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5b170e3313453dce3906780617630bcd012f5a01 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/UsersMapper.java @@ -0,0 +1,53 @@ +package cn.wisenergy.mapper; + +import cn.hutool.system.UserInfo; +import cn.wisenergy.model.app.User; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author 86187 + * @ Description: + * @ Author : 86187 + * @ Date : 2021/1/6 15:32 + */ +@Mapper +public interface UsersMapper extends BaseMapper<User> { + /** + * æ·»åŠ + * + * @param user ç”¨æˆ·ä¿¡æ¯ + * @return ç”¨æˆ·ä¿¡æ¯ + */ + int add(User user); + + /** + * 编辑 + * + * @param user ç”¨æˆ·ä¿¡æ¯ + * @return 修改是å¦æˆåŠŸ + */ + int edit(User user); + + /** + * åˆ é™¤ + * + * @param id 用户id + * @return åˆ é™¤æ˜¯å¦æˆåŠŸ + */ + int delById(@Param("id") Integer id); + + int countByPhoneAnsUserId(@Param("phone") String phone, @Param("userId") Integer userId); + + List<User> getList(Map<String, Object> map); + + Integer getUserNumbers(Map<String, Object> map); + + User getByPhone(@Param("phone") String phone); + + List<User> test(@Param("list") List<String> list); +} diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/VolunteerMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/VolunteerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..1a40e0549a8b690cd91d04b5b75d160ad7136054 --- /dev/null +++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/VolunteerMapper.java @@ -0,0 +1,24 @@ +package cn.wisenergy.mapper; + +import cn.wisenergy.model.app.Volunteer; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author 86187 + */ +public interface VolunteerMapper extends BaseMapper<Volunteer> { + + Volunteer add(Volunteer volunteer); + + List<Volunteer> getFillList(Map<String,Object> map); + + List<Volunteer> getListByIds(@Param("list") List<Integer> ids); + + int updateBySchemeId(@Param("schemeId") Integer schemeId); + + List<Volunteer> getVolunteerList(Map<String,Object> map); +} diff --git a/wisenergy-mapper/src/main/resources/mapper/AccountInfoMapper.xml b/wisenergy-mapper/src/main/resources/mapper/AccountInfoMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..c8837f4c4bf16037e690a1764bd4e1791563af73 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/AccountInfoMapper.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.wisenergy.mapper.AccountMapper"> + <resultMap id="AccountMap" type="cn.wisenergy.model.app.AccountInfo"> + <id column="id" property="id"/> + <result column="user_name" property="userName"/> + <result column="password" property="password"/> + <result column="head_image" property="headImage"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + account + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_name,password,head_image,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{userName},#{password},#{headImage}, + #{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userName != null">user_name = #{userName},</if> + <if test="password != null">password =#{password},</if> + <if test="headImage != null">head_image =#{headImage},</if> + <if test="isDelete != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userName != null">and user_name = #{userName}</if> + <if test="password != null">and password =#{password}</if> + <if test="headImage != null">and head_image =#{headImage}</if> + <if test="isDelete != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + <select id="getAccountInfo" resultMap="AccountMap" parameterType="map"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + user_name = #{userName} + and + is_delete=0 + </where> + </select> + +</mapper> \ No newline at end of file diff --git a/wisenergy-mapper/src/main/resources/mapper/AdmissionRuleMapper.xml b/wisenergy-mapper/src/main/resources/mapper/AdmissionRuleMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..aedc08cb0d0a006851973953fb48d0935c936070 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/AdmissionRuleMapper.xml @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.AdmissionRuleMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.AdmissionRule"> + <id column="id" property="id"/> + <result column="type" property="type"/> + <result column="culture_max" property="cultureMax"/> + <result column="culture_min" property="cultureMin"/> + <result column="current_year_culture" property="currentYearCulture"/> + <result column="profession_max" property="professionMax"/> + <result column="profession_min" property="professionMin"/> + <result column="current_year_major" property="currentYearMajor"/> + <result column="up_mark" property="upMark"/> + <result column="down_mark" property="downMark"/> + <result column="number" property="number"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + admission_rule + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + type,culture_max, culture_min,current_year_culture,profession_max,profession_min,current_year_major,up_mark, + down_mark,number,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{type},#{cultureMax},#{cultureMin},#{currentYearCulture},#{professionMax}, #{professionMin},#{currentYearMajor}, + #{upMark},#{downMark}, #{number}, #{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="type != null">type = #{type},</if> + <if test="cultureMax != null">culture_max =#{cultureMax},</if> + <if test="cultureMin != null">culture_min =#{cultureMin},</if> + <if test="currentYearCulture != null">current_year_culture =#{currentYearCulture},</if> + <if test="professionMax != null">profession_max =#{professionMax},</if> + <if test="professionMin != null">profession_min =#{professionMin},</if> + <if test="currentYearMajor != null">current_year_major =#{currentYearMajor},</if> + <if test="upMark != null">up_mark = #{upMark},</if> + <if test="downMark != null">down_mark =#{downMark},</if> + <if test="number != null">number = #{number},</if> + <if test="isDelete != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="type != null">and type = #{type}</if> + <if test="cultureMax != null">and culture_max =#{cultureMax}</if> + <if test="cultureMin != null">and culture_min =#{cultureMin}</if> + <if test="currentYearCulture != null">and current_year_culture =#{currentYearCulture}</if> + <if test="professionMax != null">and profession_max =#{professionMax}</if> + <if test="professionMin != null">and profession_min =#{professionMin}</if> + <if test="currentYearMajor != null">and current_year_major =#{currentYearMajor}</if> + <if test="upMark != null">and up_mark = #{upMark}</if> + <if test="downMark != null">and down_mark =#{downMark}</if> + <if test="number != null">and number = #{number}</if> + <if test="isDelete != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.AdmissionRule" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.AdmissionRule"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + + + <select id="getByType" resultType="cn.wisenergy.model.app.AdmissionRule"> + SELECT + <include refid="cols_all"/> + FROM + <include refid="table"/> + where is_delete=0 and type=#{type} + </select> +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/BannerMapper.xml b/wisenergy-mapper/src/main/resources/mapper/BannerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..3034741204fe4648639e4ac731717a6fefbc2303 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/BannerMapper.xml @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.BannerMapper"> + <resultMap id="advertisingMap" type="cn.wisenergy.model.app.Banner"> + <id column="id" property="id"/> + <result column="company_name" property="companyName"/> + <result column="status" property="status"/> + <result column="website" property="website"/> + <result column="is_have_image" property="isHaveImage"/> + <result column="type" property="type"/> + <result column="image" property="image"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + banner + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + company_name,status, website,is_have_image,type,image, create_time,update_time + </sql> + + <sql id="vals"> + #{companyName},#{status},#{website},#{isHaveImage},#{type},#{image},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="companyName != null">company_name = #{companyName},</if> + <if test="status != null">status =#{status},</if> + <if test="website != null">website =#{website},</if> + <if test="isHaveImage != null">is_have_image =#{isHaveImage},</if> + <if test="type != null">type =#{type},</if> + <if test="image != null">image =#{image},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="companyName != null">and company_name = #{companyName}</if> + <if test="status != null">and status =#{status}</if> + <if test="website != null">and website =#{website}</if> + <if test="isHaveImage != null">and is_have_image =#{isHaveImage}</if> + <if test="type != null">and type =#{type}</if> + <if test="image != null">and image =#{image}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.Banner" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.Banner"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + <select id="getList" resultType="cn.wisenergy.model.dto.BannerDto" parameterType="map"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + <if test="status != null">and status =#{status}</if> + <if test="type != null">and type =#{type}</if> + </where> + order by create_time desc + limit #{pageNo},#{pageSize} + </select> + + <select id="count" resultType="java.lang.Integer"> + select count(1) + from + <include refid="table"/> + <where> + <if test="status != null">and status =#{status}</if> + <if test="type != null">and type =#{type}</if> + </where> + </select> + + <select id="getById" resultMap="advertisingMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where id=#{id} + </select> + + <select id="getTopBanners" resultType="cn.wisenergy.model.app.Banner"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where status=1 and type=#{type} + </select> + + <update id="editStatus"> + UPDATE + <include refid="table"/> + <set> + status=#{status} + </set> + <where> + id = #{id} + </where> + </update> +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/CardMapper.xml b/wisenergy-mapper/src/main/resources/mapper/CardMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..48ba10c9cb3d447b5bf90faa69b135eded20ea3a --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/CardMapper.xml @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.CardMapper"> + <resultMap id="cardMap" type="cn.wisenergy.model.app.CardInfo"> + <id column="id" property="id"/> + <result column="batch_number" property="batchNumber"/> + <result column="card_number" property="cardNumber"/> + <result column="limit" property="limit"/> + <result column="secret_key" property="secretKey"/> + <result column="money" property="money"/> + <result column="status" property="status"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + card + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + batch_number,card_number,`limit`, secret_key,money,`status`,is_delete,create_time,update_time + </sql> + + <sql id="createsVal"> + #{i.batchNumber},#{i.cardNumber},#{i.limit},#{i.secretKey},#{i.money},#{i.status}, + #{i.isDelete},now(),now() + </sql> + + <sql id="vals"> + #{batchNumber},#{cardNumber},#{limit},#{secretKey},#{money},#{status}, + #{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="batchNumber != null">batch_number =#{batchNumber},</if> + <if test="cardNumber != null">card_number =#{cardNumber},</if> + <if test="limit != null">`limit` =#{limit},</if> + <if test="secretKey != null">secret_key =#{secretKey},</if> + <if test="money != null">money =#{money},</if> + <if test="status != null">`status` =#{status},</if> + <if test="isDelete != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="batchNumber != null">and batch_number =#{batchNumber}</if> + <if test="cardNumber != null">and card_number =#{cardNumber},</if> + <if test="limit != null">and `limit` =#{limit}</if> + <if test="secretKey != null">and secret_key =#{secretKey}</if> + <if test="money != null">and money =#{money}</if> + <if test="status != null">and `status` =#{status}</if> + <if test="isDelete != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.CardInfo" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + values + <foreach collection="list" item="i" index="index" separator=","> + (<include refid="createsVal"/>) + </foreach> + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.CardInfo"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <select id="getBySecretKey" resultType="cn.wisenergy.model.app.CardInfo"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + secret_key=#{secretKey} + and is_delete=0 + </where> + </select> + + <select id="getList" resultMap="cardMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + batch_Number=#{batchNumber} + and is_delete=0 + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/GraduationMapper.xml b/wisenergy-mapper/src/main/resources/mapper/GraduationMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..caffe66959503815fa5549cad1c979b677774e43 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/GraduationMapper.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.GraduationMapper"> + <resultMap id="graduationMap" type="cn.wisenergy.model.app.Graduation"> + <id column="id" property="id"/> + <result column="school_name" property="schoolName"/> + <result column="position" property="position"/> + <result column="describe" property="describe"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + graduation + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + school_name,`position`,`describe`,create_time,update_time + </sql> + + <sql id="vals"> + #{schoolName},#{position},#{describe},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="schoolName != null">school_name =#{schoolName},</if> + <if test="position != null">`position` =#{position},</if> + <if test="describe != null">`describe` =#{describe},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="schoolName != null">and school_name =#{schoolName},</if> + <if test="position != null">and `position` =#{position},</if> + <if test="describe != null">and `describe` =#{describe},</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <update id="edit" parameterType="cn.wisenergy.model.app.Graduation"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <select id="getList" resultMap="graduationMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/LoginRecordMapper.xml b/wisenergy-mapper/src/main/resources/mapper/LoginRecordMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..518ac7a338acec226b621979cfa644368a0f7620 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/LoginRecordMapper.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.LoginRecordMapper"> + <resultMap id="advertisingMap" type="cn.wisenergy.model.app.LoginRecord"> + <id column="id" property="id"/> + <result column="user_id" property="userId"/> + <result column="type" property="type"/> + <result column="operation_name" property="operationName"/> + <result column="ip" property="ip"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + login_record + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_id,type, operation_name,ip, create_time,update_time + </sql> + + <sql id="vals"> + #{userId},#{type},#{operationName},#{ip},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userId != null">user_id = #{userId},</if> + <if test="type != null">type =#{type},</if> + <if test="operationName != null">operation_name =#{operationName},</if> + <if test="ip != null">ip =#{ip},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userId != null">and user_id = #{userId}</if> + <if test="type != null">and type =#{type}</if> + <if test="operationName != null">and operation_name =#{operationName}</if> + <if test="ip != null">and ip =#{ip}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.LoginRecord" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.LoginRecord"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + <select id="getById" resultMap="advertisingMap"> + select <include refid="cols_all"/> + from <include refid="table"/> + <where> + user_id=#{userId} + and + type=2 + order by update_time desc + limit 0,1 + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/PayRecordMapper.xml b/wisenergy-mapper/src/main/resources/mapper/PayRecordMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..57adbf9eff2b0a14ea7e9d215464e2613c73b2f8 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/PayRecordMapper.xml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.PayRecordMapper"> + <resultMap id="advertisingMap" type="cn.wisenergy.model.app.PayRecord"> + <id column="id" property="id"/> + <result column="user_id" property="userId"/> + <result column="type" property="type"/> + <result column="card_id" property="cardId"/> + <result column="money" property="money"/> + <result column="result" property="result"/> + <result column="pay_limit" property="payLimit"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + pay_record + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_id,type, card_id,money,result,pay_limit, create_time,update_time + </sql> + + <sql id="vals"> + #{userId},#{type},#{cardId},#{money},#{result},#{payLimit},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userId != null">user_id = #{userId},</if> + <if test="type != null">type =#{type},</if> + <if test="cardId != null">card_id =#{cardId},</if> + <if test="money != null">money =#{money},</if> + <if test="result != null">result =#{result},</if> + <if test="payLimit != null">pay_limit =#{payLimit},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userId != null">and user_id = #{userId}</if> + <if test="type != null">and type =#{type}</if> + <if test="cardId != null">and card_id =#{cardId}</if> + <if test="money != null">and money =#{money}</if> + <if test="result != null">and result =#{result}</if> + <if test="payLimit != null">and pay_limit =#{payLimit}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.PayRecord" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + <select id="getList" resultType="cn.wisenergy.model.vo.PayRecordShowVo"> + select + id as recordId,type,result,pay_limit as `limit`,create_time as payTime + from + <include refid="table"/> + <where> + <if test="userId != null"> + user_id=#{userId} + </if> + order by create_time desc + limit #{startNum},#{endNum} + </where> + </select> + + + <select id="count" resultType="java.lang.Integer"> + select count(1) + from + <include refid="table"/> + <where> + <if test="userId != null"> + user_id=#{userId} + </if> + </where> + + </select> + + <select id="getById" resultMap="advertisingMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + user_id=#{userId} + and + result=0 + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/PriceMapper.xml b/wisenergy-mapper/src/main/resources/mapper/PriceMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..f94dd292c0441c56384969491a7e5bf4a14870dc --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/PriceMapper.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.PriceMapper"> + <resultMap id="priceMap" type="cn.wisenergy.model.app.Price"> + <id column="id" property="id"/> + <result column="use_limit" property="useLimit"/> + <result column="money" property="money"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + price + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + use_limit,money, is_delete, create_time,update_time + </sql> + + <sql id="vals"> + #{useLimit},#{money},#{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="useLimit != null">use_limit = #{useLimit},</if> + <if test="money != null">money =#{money},</if> + <if test="isDelete != null">is_delete =#{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="useLimit != null">and use_limit = #{useLimit}</if> + <if test="money != null">and money =#{money}</if> + <if test="isDelete != null">and is_delete =#{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.Price" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + + <select id="getList" resultType="cn.wisenergy.model.app.Price"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where is_delete=0 + order by use_limit + </select> + + <select id="count" resultType="java.lang.Integer"> + select count(1) + from + <include refid="table"/> + where is_delete=0 + </select> + + <select id="getByMoney" resultType="cn.wisenergy.model.app.Price"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where is_delete=0 + and money=#{money} + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/ProfessionMapper.xml b/wisenergy-mapper/src/main/resources/mapper/ProfessionMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e2636996ea17f4d01ebd2fa872f84d1a9bbf019 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/ProfessionMapper.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.ProfessionMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.Profession"> + <id column="id" property="id"/> + <id column="type" property="type"/> + <result column="parent_id" property="parentId"/> + <result column="level" property="level"/> + <result column="name" property="name"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + profession + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + type,parent_id,level, name,create_time,update_time + </sql> + + <sql id="vals"> + #{type},#{parentId},#{level},#{name},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="type != null">type = #{type},</if> + <if test="parentId != null">parent_id = #{parentId},</if> + <if test="level != null">level =#{level},</if> + <if test="name != null">name =#{name},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="type != null">and type = #{type}</if> + <if test="parentId != null">and parent_id = #{parentId}</if> + <if test="level != null">and level =#{level}</if> + <if test="name != null">and name =#{name}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.Profession" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <select id="getList" resultType="cn.wisenergy.model.app.Profession"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + type=#{type} + </where> + </select> + + <select id="getById" resultType="cn.wisenergy.model.app.Profession"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where id=#{id} + </select> + + <select id="getNameByIds" resultType="java.lang.String"> + select name + from + <include refid="table"/> + <where> + id IN + <foreach collection="list" index="index" item="id" separator="," open="(" close=")"> + #{id} + </foreach> + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/RefillCardMapper.xml b/wisenergy-mapper/src/main/resources/mapper/RefillCardMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6388ec75fc0a8afae3926ebda9a96998b7fef4c --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/RefillCardMapper.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.RefillCardMapper"> + <resultMap id="refillCardMap" type="cn.wisenergy.model.app.RefillCard"> + <id column="id" property="id"/> + <result column="batch_number" property="batchNumber"/> + <result column="is_make_card" property="isMakeCard"/> + <result column="card_number" property="cardNumber"/> + <result column="is_activite" property="isActivite"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + refill_card + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + card_number,batch_number,is_make_card, is_activite,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{cardNumber},#{batchNumber},#{isMakeCard},#{isActivite}, + #{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userName != null">card_number = #{cardNumber},</if> + <if test="password != null">batch_number =#{batchNumber},</if> + <if test="phone != null">is_make_card =#{isMakeCard},</if> + <if test="headImage != null">is_activite =#{isMakeCard},</if> + <if test="examType != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="userName != null">and card_number = #{cardNumber}</if> + <if test="password != null"> and batch_number =#{batchNumber}</if> + <if test="phone != null">and is_make_card =#{isMakeCard}</if> + <if test="headImage != null"> and is_activite =#{isMakeCard}</if> + <if test="examType != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.User" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="update" parameterType="java.lang.String"> + UPDATE + <include refid="table"/> + <set> + is_activite =0 + </set> + <where> + batch_number =#{batchNumber} + </where> + </update> + + <select id="getList" resultMap="refillCardMap" parameterType="map"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + is_delete=0 + + order by create_time desc + limit #{pageNo},#{pageSize} + </where> + </select> + + + <select id="getUserNumbers" resultType="java.lang.Integer"> + SELECT COUNT(id) + FROM + <include refid="table"/> + where is_delete=0 + </select> + + <select id="getById" resultMap="refillCardMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where id=#{id} + </select> + + <select id="getByBatchNumber" resultType="cn.wisenergy.model.app.RefillCard"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + where batch_number=#{batchNumber} + </select> + + <update id="setIsMakeCard"> + UPDATE + <include refid="table"/> + <set> + is_make_card =0 + </set> + <where> + id=#{id} + </where> + </update> +</mapper> \ No newline at end of file diff --git a/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml b/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..189775be737ed940579cd265890b77c1984715da --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.SchemeMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.SchemeInfo"> + <id column="id" property="id"/> + <result column="scheme_name" property="schemeName"/> + <result column="upload_time" property="uploadTime"/> + <result column="file_url" property="fileUrl"/> + <result column="type" property="type"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + scheme + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + scheme_name,upload_time,file_url, type,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{schemeName},#{uploadTime},#{fileUrl},#{type},#{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="schemeName != null">scheme_name = #{schemeName},</if> + <if test="uploadTime != null">upload_time =#{uploadTime},</if> + <if test="fileUrl != null">file_url =#{fileUrl},</if> + <if test="type != null">type =#{type},</if> + <if test="isDelete != null">is_delete =#{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="schemeName != null">and scheme_name = #{schemeName}</if> + <if test="uploadTime != null">and upload_time =#{uploadTime}</if> + <if test="fileUrl != null">and file_url =#{fileUrl}</if> + <if test="type != null">and type =#{type}</if> + <if test="isDelete != null">and is_delete =#{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.SchemeInfo" keyProperty="id" + keyColumn="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + + <select id="getList" parameterType="map" resultType="cn.wisenergy.model.app.SchemeInfo"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + is_delete=0 + order by create_time desc + limit #{startNum},#{endNum} + </where> + </select> + + <update id="edit" parameterType="cn.wisenergy.model.app.SchemeInfo"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <select id="count" resultType="java.lang.Integer"> + select count(1) + from + <include refid="table"/> + <where> + is_delete=0 + </where> + </select> + + <select id="getById" resultType="cn.wisenergy.model.app.SchemeInfo"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + id=#{id} + </where> + </select> + + <select id="getByType" resultType="int"> + select count(1) + from + <include refid="table"/> + <where> + type=#{type} + and is_delete=0 + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/SchemeRecordMapper.xml b/wisenergy-mapper/src/main/resources/mapper/SchemeRecordMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..f1a41674d31c36a7ced8b1307e664204aab0c38a --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/SchemeRecordMapper.xml @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.SchemeRecordMapper"> + <resultMap id="recordMap" type="cn.wisenergy.model.app.SchemeQueryRecord"> + <id column="id" property="id"/> + <result column="user_id" property="userId"/> + <result column="major_name" property="majorName"/> + <result column="student_type" property="studentType"/> + <result column="score" property="score"/> + <result column="major_score" property="majorScore"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + scheme_query_record + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_id,major_name, student_type,score,major_score,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{userId},#{majorName},#{studentType},#{score}, #{majorScore},#{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userId != null">user_id = #{userId},</if> + <if test="majorName != null">major_name =#{majorName},</if> + <if test="studentType != null">student_type =#{studentType},</if> + <if test="score != null">score =#{score},</if> + <if test="majorScore != null">major_score =#{majorScore},</if> + <if test="isDelete != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userId != null">and user_id = #{userId}</if> + <if test="majorName != null">and major_name =#{majorName}</if> + <if test="studentType != null">and student_type =#{studentType}</if> + <if test="score != null">and score =#{score}</if> + <if test="majorScore != null">and major_score =#{majorScore}</if> + <if test="isDelete != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.SchemeQueryRecord" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.SchemeQueryRecord"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + <select id="count" resultType="java.lang.Integer"> + select count(1) + from + <include refid="table"/> + <where> + is_delete=0 + <if test="userId != null"> + and user_id=#{userId} + </if> + </where> + </select> + + <select id="getByUserId" resultType="cn.wisenergy.model.app.SchemeQueryRecord"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + is_delete=0 + and user_id=#{userId} + order by create_time desc + limit #{startNum},#{endNum} + </where> + </select> + + <select id="getById" resultMap="recordMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + id=#{id} + </where> + </select> +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/ScoreInfoMapper.xml b/wisenergy-mapper/src/main/resources/mapper/ScoreInfoMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd623bf9fc7a505303b3b5b3fda3a8609239bf3e --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/ScoreInfoMapper.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.ScoreInfoMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.ScoreInfo"> + <id column="id" property="id"/> + <result column="user_id" property="userId"/> + <result column="culture_grade" property="cultureGrade"/> + <result column="major_grade" property="majorGrade"/> + <result column="language_grade" property="languageGrade"/> + <result column="math_grade" property="mathGrade"/> + <result column="english_grade" property="englishGrade"/> + <result column="physics_grade" property="physicsGrade"/> + <result column="chemistry_grade" property="chemistryGrade"/> + <result column="biology_grade" property="biologyGrade"/> + <result column="history_grade" property="historyGrade"/> + <result column="geography_grade" property="geographyGrade"/> + <result column="politics_grade" property="politicsGrade"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + score + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_id,culture_grade, major_grade,language_grade,math_grade,english_grade, physics_grade,chemistry_grade, + biology_grade,history_grade,geography_grade,politics_grade, create_time,update_time + </sql> + + <sql id="vals"> + #{userId},#{cultureGrade},#{majorGrade},#{languageGrade},#{mathGrade},#{englishGrade},#{physicsGrade}, + #{chemistryGrade},#{biologyGrade}, #{historyGrade},#{geographyGrade},#{politicsGrade},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userId != null">user_id = #{userId},</if> + <if test="cultureGrade != null">culture_grade =#{cultureGrade},</if> + <if test="majorGrade != null">major_grade =#{majorGrade},</if> + <if test="languageGrade != null">language_grade =#{languageGrade},</if> + <if test="mathGrade != null">math_grade =#{mathGrade},</if> + <if test="englishGrade != null">english_grade =#{englishGrade},</if> + <if test="physicsGrade != null">physics_grade = #{physicsGrade},</if> + <if test="chemistryGrade != null">chemistry_grade = #{chemistryGrade},</if> + <if test="biologyGrade != null">biology_grade = #{biologyGrade},</if> + <if test="historyGrade != null">history_grade = #{historyGrade},</if> + <if test="geographyGrade != null">geography_grade = #{geographyGrade},</if> + <if test="politicsGrade != null">politics_grade = #{politicsGrade},</if> + update_time =now() + </sql> + + <sql id="updateCondition2"> + user_id = #{userId}, + culture_grade =#{cultureGrade}, + major_grade =#{majorGrade}, + language_grade =#{languageGrade}, + math_grade =#{mathGrade}, + english_grade =#{englishGrade}, + physics_grade = #{physicsGrade}, + chemistry_grade = #{chemistryGrade}, + biology_grade = #{biologyGrade}, + history_grade = #{historyGrade}, + geography_grade = #{geographyGrade}, + politics_grade = #{politicsGrade}, + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userId != null">and user_id = #{userId}</if> + <if test="cultureGrade != null">and culture_grade =#{cultureGrade}</if> + <if test="majorGrade != null">and major_grade =#{majorGrade}</if> + <if test="languageGrade != null">and language_grade =#{languageGrade}</if> + <if test="mathGrade != null">and math_grade =#{mathGrade}</if> + <if test="englishGrade != null">and english_grade =#{englishGrade}</if> + <if test="physicsGrade != null">and physics_grade = #{physicsGrade}</if> + <if test="chemistryGrade != null">and chemistry_grade = #{chemistryGrade}</if> + <if test="biologyGrade != null">and biology_grade = #{biologyGrade}</if> + <if test="historyGrade != null">and history_grade = #{historyGrade}</if> + <if test="geographyGrade != null">and geography_grade = #{geographyGrade}</if> + <if test="politicsGrade != null">and politics_grade = #{politicsGrade}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.ScoreInfo" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.ScoreInfo"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition2"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + <select id="getById" resultMap="userMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + user_id=#{userId} + </where> + </select> +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/UserLimitMapper.xml b/wisenergy-mapper/src/main/resources/mapper/UserLimitMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..a07977b68bc2823f97c2473e6c4668f6e8079064 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/UserLimitMapper.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.UserLimitMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.UserLimit"> + <id column="id" property="id"/> + <result column="user_id" property="userId"/> + <result column="total_limit" property="totalLimit"/> + <result column="use_limit" property="useLimit"/> + <result column="usable_limit" property="usableLimit"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + user_limit + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_id,total_limit, use_limit,usable_limit,create_time,update_time + </sql> + + <sql id="vals"> + #{userId},#{totalLimit},#{useLimit},#{usableLimit},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userId != null">user_id = #{userId},</if> + <if test="totalLimit != null">total_limit =#{totalLimit},</if> + <if test="useLimit != null">use_limit =#{useLimit},</if> + <if test="usableLimit != null">usable_limit =#{usableLimit},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userId != null">and user_id = #{userId}</if> + <if test="totalLimit != null">and total_limit =#{totalLimit}</if> + <if test="useLimit != null">and use_limit =#{useLimit}</if> + <if test="usableLimit != null">and usable_limit =#{usableLimit}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.UserLimit" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.UserLimit"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <select id="getByUserId" resultMap="userMap"> + select <include refid="cols_all"/> + from <include refid="table"/> + <where> + user_id=#{userId} + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/UserLimitRecordMapper.xml b/wisenergy-mapper/src/main/resources/mapper/UserLimitRecordMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f5c2aaadb2c19bad64defe364bbdac65210ab8f --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/UserLimitRecordMapper.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.UserLimitRecordMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.UserLimitRecord"> + <id column="id" property="id"/> + <result column="user_id" property="userId"/> + <result column="user_limit_id" property="userLimitId"/> + <result column="minus_limit" property="minusLimit"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + user_limit_record + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_id,user_limit_id,minus_limit, create_time,update_time + </sql> + + <sql id="vals"> + #{userId},#{userLimitId},#{minusLimit},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userId != null">user_id = #{userId},</if> + <if test="userLimitId != null">user_limit_id =#{userLimitId},</if> + <if test="minusLimit != null">minus_limit =#{minusLimit},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userId != null">and user_id = #{userId}</if> + <if test="userLimitId != null">and user_limit_id =#{userLimitId}</if> + <if test="minusLimit != null">and minus_limit =#{minusLimit}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.UserLimitRecord" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.UserLimitRecord"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <select id="getByUserId" resultMap="userMap"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + user_id=#{userId} + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/UserVolunteerMapper.xml b/wisenergy-mapper/src/main/resources/mapper/UserVolunteerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..96f3f0ad5914f4d26e85fc687e000351251a7ce3 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/UserVolunteerMapper.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.UserVolunteerMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.UserVolunteer"> + <id column="id" property="id"/> + <result column="scheme_record_id" property="schemeRecordId"/> + <result column="user_id" property="userId"/> + <result column="volunteer_id" property="volunteerId"/> + </resultMap> + + <sql id="table"> + user_volunteer + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + scheme_record_id,user_id, volunteer_id + </sql> + + <sql id="createsVal"> + #{i.scheme_record_id},#{i.user_id},#{i.volunteer_id},now(), now() + </sql> + + <sql id="vals"> + #{schemeRecordId},#{userId},#{volunteerId} + </sql> + + <sql id="updateCondition"> + <if test="schemeRecordId != null">scheme_record_id = #{schemeRecordId},</if> + <if test="userId != null">user_id =#{userId},</if> + <if test="volunteerId != null">volunteer_id =#{volunteerId},</if> + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="schemeRecordId != null">and scheme_record_id = #{schemeRecordId}</if> + <if test="userId != null">and user_id =#{userId}</if> + <if test="volunteerId != null">and volunteer_id =#{volunteerId}</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.UserVolunteer" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <!-- 批é‡åˆ›å»ºæŽ¥å£ --> + <insert id="creates" parameterType="list"> + INSERT INTO + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + VALUES + <foreach collection="list" item="i" index="index" separator=","> + (<include refid="createsVal"/>) + </foreach> + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.UserVolunteer"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + <select id="listById" resultType="cn.wisenergy.model.app.UserVolunteer"> + select * from + <include refid="table"/> + where scheme_record_id = #{schemeRecordId} + </select> + +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/UsersMapper.xml b/wisenergy-mapper/src/main/resources/mapper/UsersMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..84053848a9298422a0852ff6c4673d054fe37192 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/UsersMapper.xml @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.UsersMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.User"> + <id column="id" property="id"/> + <result column="user_name" property="userName"/> + <result column="password" property="password"/> + <result column="phone" property="phone"/> + <result column="uuid" property="uuid"/> + <result column="head_image" property="headImage"/> + <result column="sex" property="sex"/> + <result column="school" property="school"/> + <result column="exam_type" property="examType"/> + <result column="source" property="source"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + user + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + user_name,password, phone,uuid,head_image,sex,school, exam_type,source,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{userName},#{password},#{phone},#{uuid},#{headImage},#{sex},#{school},#{examType}, #{source}, + #{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="userName != null">user_name = #{userName},</if> + <if test="password != null">password =#{password},</if> + <if test="phone != null">phone =#{phone},</if> + <if test="uuid != null">uuid =#{uuid},</if> + <if test="headImage != null">head_image =#{headImage},</if> + <if test="sex != null">sex =#{sex},</if> + <if test="school != null">school =#{school},</if> + <if test="examType != null">exam_type = #{examType},</if> + <if test="source != null">source = #{source},</if> + <if test="isDelete != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="userName != null">and user_name = #{userName}</if> + <if test="password != null">and password =#{password}</if> + <if test="phone != null">and phone =#{phone}</if> + <if test="uuid != null">and uuid =#{uuid}</if> + <if test="headImage != null">and head_image =#{headImage}</if> + <if test="sex != null">and sex =#{sex}</if> + <if test="school != null">and school =#{school}</if> + <if test="examType != null">and exam_type = #{examType}</if> + <if test="source != null">and source = #{source}</if> + <if test="isDelete != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.User" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + <update id="edit" parameterType="cn.wisenergy.model.app.User"> + UPDATE + <include refid="table"/> + <set> + <include refid="updateCondition"/> + </set> + <where> + id = #{id} + </where> + </update> + + <delete id="delById" parameterType="java.lang.Integer"> + delete from + <include refid="table"/> + where id = #{id} + </delete> + + <select id="countByPhoneAnsUserId" resultType="java.lang.Integer"> + SELECT COUNT(1) + FROM + <include refid="table"/> + WHERE phone=#{phone} and id !=#{userId} and is_delete=0 + </select> + + <select id="getList" resultMap="userMap" parameterType="map"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + is_delete=0 + + <if test="startTime != null"> + and create_time + between #{startTime} + </if> + + <if test="endTime != null">and #{endTime}</if> + + <if test="userName != null">and user_name like ('%' #{userName} '%')</if> + + <if test="phone != null">and phone like ('%' #{phone} '%')</if> + order by create_time desc + limit #{pageNo},#{pageSize} + </where> + </select> + + <select id="getUserNumbers" resultType="java.lang.Integer"> + SELECT COUNT(id) + FROM + <include refid="table"/> + <where> + is_delete=0 + + <if test="startTime != null"> + and create_time + between #{startTime} + </if> + <if test="endTime != null">and #{endTime}</if> + + <if test="userName != null">and user_name like ('%' #{userName} '%')</if> + + <if test="phone != null">and phone like ('%' #{phone} '%')</if> + </where> + + </select> + + <select id="getByPhone" resultType="cn.wisenergy.model.app.User"> + SELECT + <include refid="cols_all"/> + FROM + <include refid="table"/> + where is_delete=0 and phone=#{phone} + </select> + + + <select id="test" resultType="cn.wisenergy.model.app.User"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + <if test="list != null"> + <foreach collection="list" index="index" item="id" separator="or" open="(" close=")"> + user_name LIKE CONCAT('%',#{id},'%') + </foreach> + </if> + </where> + </select> +</mapper> diff --git a/wisenergy-mapper/src/main/resources/mapper/VolunteerMapper.xml b/wisenergy-mapper/src/main/resources/mapper/VolunteerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..81205c2f6191018156efc906d3d39b5bb72ced38 --- /dev/null +++ b/wisenergy-mapper/src/main/resources/mapper/VolunteerMapper.xml @@ -0,0 +1,175 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="cn.wisenergy.mapper.VolunteerMapper"> + <resultMap id="userMap" type="cn.wisenergy.model.app.Volunteer"> + <id column="id" property="id"/> + <result column="type" property="type"/> + <result column="scheme_id" property="schemeId"/> + <result column="major_name" property="majorName"/> + <result column="academy" property="academy"/> + <result column="course_demand" property="courseDemand"/> + <result column="nature" property="nature"/> + <result column="year_limit" property="yearLimit"/> + <result column="plan_num" property="planNum"/> + <result column="cast_archives_num" property="castArchivesNum"/> + <result column="launch_num" property="launchNum"/> + <result column="lowest_mark" property="lowestMark"/> + <result column="lowest_rank" property="lowestRank"/> + <result column="is_delete" property="isDelete"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <sql id="table"> + volunteer + </sql> + + <sql id="cols_all"> + id, + <include refid="cols_exclude_id"/> + </sql> + + <sql id="cols_exclude_id"> + type,scheme_id,major_name,academy, course_demand,nature,year_limit,plan_num, + cast_archives_num,launch_num,lowest_mark, + lowest_rank,is_delete,create_time,update_time + </sql> + + <sql id="vals"> + #{type},#{scheme},#{majorName},#{academy},#{courseDemand},#{nature},#{yearLimit},#{planNum},#{castArchivesNum}, + #{launchNum}, + #{lowestMark}, #{lowestRank},#{isDelete},now(),now() + </sql> + + <sql id="updateCondition"> + <if test="type != null">type = #{type},</if> + <if test="scheme != null">scheme = #{scheme},</if> + <if test="majorName != null">major_name = #{majorName},</if> + <if test="academy != null">academy =#{academy},</if> + <if test="courseDemand != null">course_demand =#{courseDemand},</if> + <if test="nature != null">nature =#{nature},</if> + <if test="yearLimit != null">year_limit =#{yearLimit},</if> + <if test="planNum != null">plan_num =#{planNum},</if> + <if test="castArchivesNum != null">cast_archives_num = #{castArchivesNum},</if> + <if test="launchNum != null">launch_num = #{launchNum},</if> + <if test="lowestMark != null">lowest_mark = #{lowestMark},</if> + <if test="lowestRank != null">lowestMark = #{lowestRank},</if> + <if test="isDelete != null">is_delete = #{isDelete},</if> + update_time =now() + </sql> + + <sql id="criteria"> + <if test="id != null">id = #{id}</if> + <if test="type != null">and type = #{type}</if> + <if test="scheme != null">and scheme = #{scheme}</if> + <if test="majorName != null">and major_name = #{majorName}</if> + <if test="academy != null">and academy =#{academy}</if> + <if test="courseDemand != null">and course_demand =#{courseDemand}</if> + <if test="nature != null">and nature =#{nature}</if> + <if test="yearLimit != null">and year_limit =#{yearLimit}</if> + <if test="planNum != null">and plan_num =#{planNum}</if> + <if test="castArchivesNum != null">and cast_archives_num = #{castArchivesNum}</if> + <if test="launchNum != null">and launch_num = #{launchNum}</if> + <if test="lowestMark != null">and lowest_mark = #{lowestMark}</if> + <if test="lowestRank != null">and lowestMark = #{lowestRank}</if> + <if test="isDelete != null">and is_delete = #{isDelete}</if> + <if test="createTime != null">and create_time >= #{createTime}</if> + <if test="updateTime != null">and #{updateTime} >= update_time</if> + </sql> + + <insert id="add" parameterType="cn.wisenergy.model.app.Volunteer" keyProperty="id" useGeneratedKeys="true"> + insert into + <include refid="table"/> + (<include refid="cols_exclude_id"/>) + value( + <include refid="vals"/> + ) + </insert> + + + <update id="updateBySchemeId"> + UPDATE + <include refid="table"/> + <set> + is_delete=1 + </set> + <where> + scheme_id = #{schemeId} + and is_delete=0 + </where> + </update> + + <select id="getFillList" resultType="cn.wisenergy.model.app.Volunteer"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + is_delete =0 + <if test="upGrade != null"> + and #{upGrade} > lowest_mark + </if> + <if test="downGrade != null"> + and lowest_mark >#{downGrade} + </if> + <if test="type != null"> + and type =#{type} + </if> + <if test="volunteerIds != null and volunteerIds.size > 0 "> + and id NOT IN + <foreach collection="volunteerIds" index="index" item="id" separator="," open="(" close=")"> + #{id} + </foreach> + </if> + order by major_name,lowest_mark desc + limit #{number} + </where> + </select> + + <select id="getListByIds" resultType="cn.wisenergy.model.app.Volunteer"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + id IN + <foreach collection="list" index="index" item="id" separator="," open="(" close=")"> + #{id} + </foreach> + </where> + </select> + + <select id="getVolunteerList" resultType="cn.wisenergy.model.app.Volunteer"> + select + <include refid="cols_all"/> + from + <include refid="table"/> + <where> + is_delete =0 + <if test="upGrade != null"> + and #{upGrade} > lowest_mark + </if> + <if test="downGrade != null"> + and lowest_mark >#{downGrade} + </if> + <if test="type != null"> + and type =#{type} + </if> + <if test="classNames != null"> + and + <foreach collection="classNames" index="index" item="id" separator="or" open="(" close=")"> + course_demand LIKE CONCAT('%',#{id},'%') + </foreach> + </if> + <if test="professionNames != null"> + and + <foreach collection="professionNames" index="index" item="id" separator="or" open="(" close=")"> + major_name LIKE CONCAT('%',#{id},'%') + </foreach> + </if> + order by lowest_mark desc + </where> + </select> + +</mapper> diff --git a/wisenergy-mapper/wisenergy-mapper.iml b/wisenergy-mapper/wisenergy-mapper.iml new file mode 100644 index 0000000000000000000000000000000000000000..c78ab650843c5cbde2242a0132ac8711122b796b --- /dev/null +++ b/wisenergy-mapper/wisenergy-mapper.iml @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="wisenergy-model" /> + <orderEntry type="module" module-name="wisenergy-common" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.3.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.glassfish:javax.el:3.0.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" /> + <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> + <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" /> + <orderEntry type="library" name="Maven: org.mockito:mockito-core:2.23.4" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" /> + <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-test:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" /> + <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" /> + <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" /> + <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" /> + <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.16" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.6.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.9.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" /> + <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.54" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" /> + <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.6.7" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.23" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" /> + <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> + <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.8" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> + <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" /> + <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" /> + <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" /> + <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> + <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/wisenergy-model/.gitignore b/wisenergy-model/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/wisenergy-model/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/wisenergy-model/pom.xml b/wisenergy-model/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..d056f60a3c30c8257a36ef3d399a88dd894ab09e --- /dev/null +++ b/wisenergy-model/pom.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>wisenergy-parent</artifactId> + <groupId>cn.wisenergy</groupId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>wisenergy-model</artifactId> + <version>${moduleVersion.wisenergy-model}</version> + <packaging>jar</packaging> + + <!-- 项目ä¾èµ– --> + <dependencies> + <dependency> + <groupId>cn.wisenergy</groupId> + <artifactId>wisenergy-common</artifactId> + <version>1.0.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>io.swagger</groupId> + <artifactId>swagger-annotations</artifactId> + <version>1.5.23</version> + <scope>compile</scope> + </dependency> + </dependencies> + + <!-- MAVEN构建 --> + <build> + <finalName>${project.artifactId}-${moduleVersion.wisenergy-model}</finalName> + </build> +</project> \ No newline at end of file diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/AccountInfo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/AccountInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..df2f74082dc17966460ce60f13703c2489355ef2 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/AccountInfo.java @@ -0,0 +1,57 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 管ç†å‘˜å®žä½“ç±» + */ +@Data +@ApiModel(value = "AccountInfo") +public class AccountInfo implements Serializable { + + private static final long serialVersionUID = 3050641578536493424L; + /** + * 管ç†å‘˜ä¸»é”®id + */ + @ApiModelProperty(name ="id",value = "管ç†å‘˜ä¸»é”®id") + private Integer id; + + /** + * 管ç†å‘˜è´¦å· + */ + @ApiModelProperty(name = "name",value = "管ç†å‘˜è´¦å·") + private String userName; + + /** + * 管ç†å‘˜å¯†ç + */ + @ApiModelProperty(name="password",value = "管ç†å‘˜å¯†ç ") + private String password; + + /** + * å¤´åƒ + */ + @ApiModelProperty(name = "headImage",value = "头åƒ") + private String headImage; + + /** + * 是å¦åˆ 除 + */ + @ApiModelProperty(name = "isDelete",value = "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤") + private Integer isDelete; + /** + * 创建时间 + */ + @ApiModelProperty(name = "createTime",value = "创建时间") + private Date createTime; + /** + * 修改时间 + */ + @ApiModelProperty(name = "updateTime",value = "修改时间") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/AdmissionRule.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/AdmissionRule.java new file mode 100644 index 0000000000000000000000000000000000000000..f680751f09891c7bd64c557100f63b4603f2228b --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/AdmissionRule.java @@ -0,0 +1,87 @@ +package cn.wisenergy.model.app; + +import cn.wisenergy.model.common.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: 录å–规则实体类 + * @ Author : 86187 + * @ Date : 2021/1/19 10:43 + */ +@Data +@ApiModel(value = "AdmissionRule") +public class AdmissionRule extends BaseEntity implements Serializable { + private static final long serialVersionUID = -9211670648343824241L; + + /** + * 录å–规则id + */ + @ApiModelProperty(value = "录å–规则id", name = "id") + private Integer id; + + /** + * 方案类型:1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 4:本科体育 5:专科专业分类6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批 + */ + @ApiModelProperty(value = "方案类型:1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 4:本科体育 " + + "5:专科专业分类6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批", name = "type") + private Integer type; + + /** + * 文化æˆç»©æœ€é«˜åˆ† + */ + @ApiModelProperty(value = "文化æˆç»©æœ€é«˜åˆ†", name = "cultureMax") + private Double cultureMax; + + /** + * 文化æˆç»©æœ€ä½Žåˆ† + */ + @ApiModelProperty(value = "文化æˆç»©æœ€ä½Žåˆ†", name = "cultureMin") + private Double cultureMin; + + /** + * 本年文化课录å–线 + */ + @ApiModelProperty(value = "本年文化课录å–线", name = "currentYearCulture") + private Double currentYearCulture; + + /** + * 专业æˆç»©æœ€é«˜åˆ† + */ + @ApiModelProperty(value = "专业æˆç»©æœ€é«˜åˆ†", name = "professionMax") + private Double professionMax; + + /** + * 专业æˆç»©æœ€ä½Žåˆ† + */ + @ApiModelProperty(value = "专业æˆç»©æœ€ä½Žåˆ†", name = "professionMin") + private Double professionMin; + + /** + * 本年专业课录å–线 + */ + @ApiModelProperty(value = "本年文化课录å–线", name = "currentYearMajor") + private Double currentYearMajor; + + /** + * å‘上浮动分数 + */ + @ApiModelProperty(value = "å‘上浮动分数", name = "upMark") + private Double upMark; + + /** + * å‘下浮动分数 + */ + @ApiModelProperty(value = "å‘下浮动分数", name = "downMark") + private Double downMark; + + /** + * 展示志愿总数 + */ + @ApiModelProperty(value = "展示志愿总数", name = "number") + private Integer number; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/Banner.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Banner.java new file mode 100644 index 0000000000000000000000000000000000000000..7a30f8a71baa7df8ae2ac608178c65458854bfb0 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Banner.java @@ -0,0 +1,74 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ Description: 广告实体类 + * @ Author : 86187 + * @ Date : 2021/1/7 16:01 + */ +@Data +@ApiModel(value = "Advertising") +public class Banner implements Serializable { + + private static final long serialVersionUID = 5513428780946937905L; + + /** + * 广告id + */ + @ApiModelProperty(value = "广告id",name = "id") + private Integer id; + + /** + * åˆä½œå…¬å¸å称 + */ + @ApiModelProperty(value = "åˆä½œå…¬å¸å称",name = "companyName") + private String companyName; + + /** + * æŠ•æ”¾çŠ¶æ€ 0:暂åœä¸ 1ï¼šæŠ•æ”¾ä¸ + */ + @ApiModelProperty(value = "æŠ•æ”¾çŠ¶æ€ 0:暂åœä¸ 1:投放ä¸",name = "status") + private Integer status; + + /** + * ç½‘å€ + */ + @ApiModelProperty(value = "网å€",name = "website") + private String website; + + /** + * 是å¦æœ‰å®£ä¼ 图 0:没有 1:有 + */ + @ApiModelProperty(value = "是å¦æœ‰å®£ä¼ 图 0:没有 1:有",name = "isHaveImage") + private Integer isHaveImage; + + /** + * 广告类型: 1:顶部广告 2:底部广告 + */ + @ApiModelProperty(value = "广告类型: 1:顶部广告 2:底部广告",name = "type") + private Integer type; + + /** + * 广告图片url + */ + @ApiModelProperty(value = "广告图片url",name = "image") + private String image; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "createTime") + private Date createTime; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/CardInfo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/CardInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..398f06c1ac81fef4e419594f45201cb614fe97c0 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/CardInfo.java @@ -0,0 +1,73 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 充值å¡å—å¡å®žä½“ç±» + */ +@Data +@ApiModel(value = "CardInfo") +public class CardInfo implements Serializable { + /** + * åå¡id + */ + @ApiModelProperty(value = "åå¡id",name = "id") + private Integer id; + + /** + * æ‰¹æ¬¡å· + */ + @ApiModelProperty(value = "批次å·",name = "batchNumber") + private String batchNumber; + + /** + * æ‰¹æ¬¡å· + */ + @ApiModelProperty(value = "批次å·",name = "batchNumber") + private String cardNumber; + + /** + * 次数 + */ + @ApiModelProperty(value = "次数",name = "limit") + private Integer limit; + + /** + * 秘钥 + */ + @ApiModelProperty(value = "秘钥",name = "secretKey") + private String secretKey ; + + /** + * å¡çš„é‡‘é¢ + */ + @ApiModelProperty(value = "å¡çš„金é¢",name = "money") + private String money; + + /** + * çŠ¶æ€ + */ + @ApiModelProperty(value = "çŠ¶æ€ 0:未使用 1:已使用",name = "status") + private Integer status; + + /** + * 是å¦åˆ 除 + */ + @ApiModelProperty(name = "isDelete",value = "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤") + private Integer isDelete; + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "creteTime") + private Date createTime; + /** + *更改时间 + */ + @ApiModelProperty(value = "更改时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/Graduation.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Graduation.java new file mode 100644 index 0000000000000000000000000000000000000000..9b7ea999a66221dacba6c8aee3b66cab38be5801 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Graduation.java @@ -0,0 +1,53 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * æ¯•ä¸šé™¢æ ¡å®žä½“ç±» + */ +@Data +@ApiModel(value = "Graduation") +public class Graduation implements Serializable { + private static final long serialVersionUID = 7511175256020154565L; + /** + * é™¢æ ¡ä¸»é”®id + */ + @ApiModelProperty(value = "é™¢æ ¡ä¸»é”®id",name = "id") + private Integer id; + + /** + * å¦æ ¡å称 + */ + @ApiModelProperty(value = "å¦æ ¡å称",name = "schoolName") + private String schoolName; + + /** + * å¦æ ¡åœ°å€ + */ + @ApiModelProperty(value = "å¦æ ¡åœ°å€",name = "position") + private String position; + + /** + * å¦æ ¡æè¿° + */ + @ApiModelProperty(value = "å¦æ ¡æè¿°",name = "describe") + private String describe; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "creteTime") + private Date createTime; + + /** + *更改时间 + */ + @ApiModelProperty(value = "更改时间",name = "updateTime") + private Date updateTime; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/LoginRecord.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/LoginRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..731b884ba4f4054205bfbe0fcaf577ee3d04eca4 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/LoginRecord.java @@ -0,0 +1,61 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ Description: 用户登录æ“作记录实体类 + * @ Author : 86187 + * @ Date : 2021/1/7 15:09 + */ +@Data +@ApiModel(value = "LoginRecord") +public class LoginRecord implements Serializable { + private static final long serialVersionUID = 3450614328514828031L; + + /** + * 用户æ“作记录id + */ + @ApiModelProperty(value = "用户æ“作记录id", name = "id") + private Integer id; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 类型 1:用户祖册 2:用户登录 3:用户退出 + */ + @ApiModelProperty(value = "类型 1:用户祖册 2:用户登录 3:用户退出", name = "type") + private Integer type; + + /** + * æ“作å称 + */ + @ApiModelProperty(value = "æ“作å称", name = "operationName") + private String operationName; + + /** + * ip + */ + @ApiModelProperty(value = "ip", name = "ip") + private String ip; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间", name = "createTime") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间", name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/PayRecord.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/PayRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..ca05c64930016e736cd53ef45447cfbbd0ad3fe2 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/PayRecord.java @@ -0,0 +1,73 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 充值记录实体类 +*@ Author : 86187 +*@ Date : 2021/1/8 14:48 + * @author 86187 + */ +@Data +@ApiModel(value = "PayRecord") +public class PayRecord implements Serializable { + private static final long serialVersionUID = -7865361068703566832L; + + /** + * 充值记录id + */ + @ApiModelProperty(value = "充值记录id",name = "id") + private Integer id; + + /** + * 充值类型 1ï¼šæ”¯ä»˜å® 2:微信 3ï¼šå……å€¼å¡ + */ + @ApiModelProperty(value = "充值类型 1ï¼šæ”¯ä»˜å® 2:微信 3:充值å¡",name = "type") + private Integer type; + + /** + * 充值å¡id + */ + @ApiModelProperty(value = "充值å¡id",name = "cardId") + private Integer cardId; + + /** + * 充值用户id + */ + @ApiModelProperty(value = "充值用户id",name = "userId") + private Integer userId; + + /** + * å……å€¼æ‰€èŠ±é‡‘é¢ + */ + @ApiModelProperty(value = "充值所花金é¢",name = "money") + private Integer money; + + /** + * 充值结果 0:æˆåŠŸ 1:失败 + */ + @ApiModelProperty(value = "充值结果 0:æˆåŠŸ 1:失败",name = "result") + private Integer result; + /** + * 充值次数 + */ + @ApiModelProperty(value = "充值次数",name = "limit") + private Integer payLimit; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "creteTime") + private Date createTime; + + /** + *更改时间 + */ + @ApiModelProperty(value = "更改时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/Price.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Price.java new file mode 100644 index 0000000000000000000000000000000000000000..c6ba14b836e4261c3f5d7a665eb6301dd25040ea --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Price.java @@ -0,0 +1,60 @@ +package cn.wisenergy.model.app; + +import cn.wisenergy.model.common.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author 86187 + * @ Description: ä»·æ ¼è¡¨ + * @ Author : 86187 + * @ Date : 2021/1/24 9:50 + */ +@Data +@ApiModel(value = "Price") + +public class Price implements Serializable { + private static final long serialVersionUID = 1112644645559505970L; + + /** + * ä»·æ ¼id + */ + @ApiModelProperty(value = "ä»·æ ¼id", name = "id") + private Integer id; + + /** + * å¯æŸ¥è¯¢æ¬¡æ•° + */ + @ApiModelProperty(value = "å¯æŸ¥è¯¢æ¬¡æ•°", name = "useLimit") + private Integer useLimit; + + /** + * è´ä¹°éœ€è¦çš„é’± + */ + @ApiModelProperty(value = "è´ä¹°éœ€è¦çš„é’±", name = "money") + private Integer money; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + private Date updateTime; + + /** + * åˆ é™¤æ ‡è®° + */ + @ApiModelProperty("是å¦åˆ 除 1,åˆ é™¤;0,æœªåˆ é™¤") + private Integer isDelete; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/Profession.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Profession.java new file mode 100644 index 0000000000000000000000000000000000000000..aba405527e16f9e9cc42ac5e74998b4df3e9800d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Profession.java @@ -0,0 +1,78 @@ +package cn.wisenergy.model.app; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import springfox.documentation.annotations.ApiIgnore; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @ Description: 专业实体类 + * @ Author : 86187 + * @ Date : 2021/1/13 10:37 + */ +@Data +@ApiModel(value = "profession") +public class Profession implements Serializable { + private static final long serialVersionUID = 4215915155490456186L; + + /** + * 专业id + */ + @ApiModelProperty(value = "专业id", name = "id") + private Integer id; + + /** + * 方案类型:1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 4:本科体育 5:专科专业分类6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批 + */ + @ApiModelProperty(value = "方案类型:1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 4:本科体育 5:专科专业分类6:" + + "专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批", name = "type") + private Integer type; + + /** + * 父id + */ + @ApiModelProperty(value = "专业id", name = "id") + private Integer parentId; + + /** + * ç‰çº§ + */ + @ApiModelProperty(value = "ç‰çº§", name = "level") + private Integer level; + + /** + * 专业å称 + */ + @ApiModelProperty(value = "专业å称", name = "name") + private String name; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间", name = "createTime") + private Date createTime; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间", name = "updateTime") + private Date updateTime; + + /** + * å专业 + */ + @ApiModelProperty(value = "å专业", name = "updateTime") + private List<Profession> children; + + /** + * 是å¦é€‰ä¸ false : æœªé€‰ä¸ true : é€‰ä¸ + */ + @ApiModelProperty(value = "是å¦é€‰ä¸ false : æœªé€‰ä¸ true : 选ä¸", name = "checked") + @TableField(exist = false) + private Boolean checked =false; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/RefillCard.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/RefillCard.java new file mode 100644 index 0000000000000000000000000000000000000000..f2e2bac9234b653a440e6b707fee5eb87c998e23 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/RefillCard.java @@ -0,0 +1,59 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(value = "RefillCard") +public class RefillCard { + /** + * 充值å¡id + */ + @ApiModelProperty(value = "充值å¡id",name = "id") + private Integer id; + + /** + * æ‰¹æ¬¡å· + */ + @ApiModelProperty(value = "批次å·",name = "batchNumber") + private String batchNumber; + + /** + * 是å¦å·²åˆ¶å¡ 0ï¼šå·²åˆ¶å¡ 1ï¼šæœªåˆ¶å¡ + */ + @ApiModelProperty(value = "是å¦å·²åˆ¶å¡ 0ï¼šå·²åˆ¶å¡ 1:未制å¡",name = "isMakeCard") + private Integer isMakeCard; + + /** + * å¡æ•°é‡ + */ + @ApiModelProperty(value = "å¡æ•°é‡",name = "cardNumber") + private Integer cardNumber ; + + /** + * 是å¦å·²æ¿€æ´» + */ + @ApiModelProperty(value = "是å¦å·²æ¿€æ´» 0:已激活 1:未激活 ",name = "isActivite") + private Integer isActivite; + + /** + * 是å¦åˆ 除 + */ + @ApiModelProperty(value = "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤",name = "isDelete") + private Integer isDelete; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "creteTime") + private Date createTime; + + /** + *更改时间 + */ + @ApiModelProperty(value = "更改时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..4d71a8a7d5913b2469d19239335e2e3fdd85b6f2 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java @@ -0,0 +1,70 @@ +package cn.wisenergy.model.app; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author 86187 + */ +@Data +@ApiModel(value = "SchemeInfo") +@TableName("scheme") +public class SchemeInfo implements Serializable { + private static final long serialVersionUID = 7020644673356401949L; + /** + * 方案id + */ + @ApiModelProperty(value = "方案id", name = "id") + private Integer id; + + /** + * 方案å称 + */ + @ApiModelProperty(value = "方案å称", name = "schemeName") + private String schemeName; + + /** + * ä¸Šä¼ æ—¶é—´ + */ + @ApiModelProperty(value = "ä¸Šä¼ æ—¶é—´", name = "uploadTime") + private Date uploadTime; + + /** + * ä¸Šä¼ url + */ + @ApiModelProperty(value = "ä¸Šä¼ æ—¶é—´", name = "uploadTime") + private String fileUrl; + + /** + * 1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 + * 4:本科体育 5:专科专业分类6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批 + */ + @ApiModelProperty(value = "1:本科文化一批 2:本科美术一批 3:文å¦ç¼–导本科一批 4:本科体育 " + + "5:专科专业分类6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批", name = "type") + private Integer type; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + private Date updateTime; + + /** + * åˆ é™¤æ ‡è®° + */ + @ApiModelProperty("是å¦åˆ 除 1,åˆ é™¤;0,æœªåˆ é™¤") + private Integer isDelete; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeQueryRecord.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeQueryRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..ae889f6a5490a43cf3cefb27849377cb71a637f9 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeQueryRecord.java @@ -0,0 +1,79 @@ +package cn.wisenergy.model.app; + +import cn.wisenergy.model.common.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ Description: 方案查询记录 + * @ Author : 86187 + * @ Date : 2021/1/8 10:22 + * @author 86187 + */ +@Data +@ApiModel(value = "SchemeQueryRecord") +@TableName("scheme_query_record") +public class SchemeQueryRecord implements Serializable { + + private static final long serialVersionUID = 6600452699328342752L; + + /** + * 方案查询记录id + */ + @ApiModelProperty(value = "方案查询记录id", name = "id") + private Integer id; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 专业å称 + */ + @ApiModelProperty(value = "专业å称", name = "majorName") + private String majorName; + + /** + * 考生类型 1:本科 + */ + @ApiModelProperty(value = "考生类型 1:本科", name = "studentType") + private Integer studentType; + + /** + * 考生文化分数 + */ + @ApiModelProperty(value = "考生文化分数", name = "score") + private String score; + + /** + * 考生专业分数 + */ + @ApiModelProperty(value = "考生专业分数", name = "majorScore") + private String majorScore; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + private Date updateTime; + + /** + * åˆ é™¤æ ‡è®° + */ + @ApiModelProperty("是å¦åˆ 除 1,åˆ é™¤;0,æœªåˆ é™¤") + private Integer isDelete; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/ScoreInfo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/ScoreInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..e4a73c63f71b643b3d77878f57e15d55027a00b6 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/ScoreInfo.java @@ -0,0 +1,111 @@ +package cn.wisenergy.model.app; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 用户æˆç»©å®žä½“ç±» +*@ Author : 86187 +*@ Date : 2021/1/7 14:56 + * @author 86187 + */ +@Data +@ApiModel(value = "ScoreInfo") +@TableName("score") +public class ScoreInfo implements Serializable { + private static final long serialVersionUID = -8644045186424617919L; + + /** + * æˆç»©id + */ + @ApiModelProperty(value = "æˆç»©id",name = "id") + private Integer id; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id",name = "userId") + private Integer userId; + + /** + * 文化æˆç»© + */ + @ApiModelProperty(value = "文化æˆç»©",name = "cultureGrade") + private Double cultureGrade; + + /** + * 专业æˆç»© + */ + @ApiModelProperty(value = "专业æˆç»©",name = "majorGrade") + private Double majorGrade; + + /** + * è¯æ–‡æˆç»© + */ + @ApiModelProperty(value = "è¯æ–‡æˆç»©",name = "languageGrade") + private Double languageGrade; + + /** + * æ•°å¦æˆç»© + */ + @ApiModelProperty(value = "æ•°å¦æˆç»©",name = "mathGrade") + private Double mathGrade; + + /** + * 英è¯æˆç»© + */ + @ApiModelProperty(value = "英è¯æˆç»©",name = "englishGrade") + private Double englishGrade; + + /** + * 物ç†æˆç»© + */ + @ApiModelProperty(value = "物ç†æˆç»©",name = "physicsGrade") + private Double physicsGrade; + + /** + * 化å¦æˆç»© + */ + @ApiModelProperty(value = "化å¦æˆç»©",name = "chemistryGrade") + private Double chemistryGrade; + + /** + * 生物æˆç»© + */ + @ApiModelProperty(value = "生物æˆç»©",name = "biologyGrade") + private Double biologyGrade; + + /** + * 历å²æˆç»© + */ + @ApiModelProperty(value = "历å²æˆç»©",name = "historyGrade") + private Double historyGrade; + + /** + * 地ç†æˆç»© + */ + @ApiModelProperty(value = "地ç†æˆç»©",name = "geographyGrade") + private Double geographyGrade; + + /** + * 政治æˆç»© + */ + @ApiModelProperty(value = "政治æˆç»©",name = "politicsGrade") + private Double politicsGrade; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "creteTime") + private Date createTime; + /** + *更改时间 + */ + @ApiModelProperty(value = "更改时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/User.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/User.java new file mode 100644 index 0000000000000000000000000000000000000000..c0af97cfa7797fee3d0ec0dadbe160dccc5ae144 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/User.java @@ -0,0 +1,100 @@ +package cn.wisenergy.model.app; + +import cn.wisenergy.model.common.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author 86187 + * @ Description : 用户实体类 + * @ Author : lcc + * @ CreateDate : 2020/11/8 19:59 + */ +@Data +@ApiModel(value = "AccountUsers") +@TableName("user") +public class User implements Serializable { + private static final long serialVersionUID = 2525339404301884673L; + + /** + * 主键id + */ + @ApiModelProperty(name = "id", value = "用户主键id") + private Integer id; + + /** + * 用户å称 + */ + @ApiModelProperty(name = "name", value = "用户å") + private String userName; + + /** + * 密ç + */ + @ApiModelProperty(name = "password", value = "用户密ç ") + private String password; + + /** + * 电è¯å·ç + */ + @ApiModelProperty(name = "phone", value = "手机å·") + private String phone; + + /** + * å¤´åƒ + */ + @ApiModelProperty(name = "headImage", value = "头åƒ") + private String headImage; + + /** + * 微信uuid + */ + @ApiModelProperty(name = "微信uuid", value = "uuid") + private String uuid; + + /** + * 性别 + */ + @ApiModelProperty(name = "sex", value = "用户性别:0:男,1:女") + private Integer sex; + + /** + * å¦æ ¡ + */ + @ApiModelProperty(name = "school", value = "æ¯•ä¸šé™¢æ ¡") + private String school; + + /** + * å¦ç”Ÿç±»åž‹ + */ + @ApiModelProperty(name = "examType", value = "考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生") + private Integer examType; + + /** + * æ¥æº 1:PC 2: APP + */ + @ApiModelProperty(name = "source", value = "æ¥æº 1:PC 2: APP") + private Integer source; + + /** + * 是å¦åˆ 除 + */ + @ApiModelProperty(name = "isDelete", value = "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤") + private Integer isDelete; + /** + * 创建时间 + */ + @ApiModelProperty(name = "createTime", value = "创建时间") + private Date createTime; + /** + * 修改时间 + */ + @ApiModelProperty(name = "updateTime", value = "修改时间") + private Date updateTime; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserLimit.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserLimit.java new file mode 100644 index 0000000000000000000000000000000000000000..f4877081e0f2323a8459116cd95dc574aa6acf9d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserLimit.java @@ -0,0 +1,58 @@ +package cn.wisenergy.model.app; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author 86187 + */ +@Data +@ApiModel(value = "UserLimit") +public class UserLimit implements Serializable { + private static final long serialVersionUID = 3956830394491346594L; + /** + * 用户å¡ç‚¹id + */ + @ApiModelProperty(value = "用户å¡ç‚¹id",name = "id") + private Integer id; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id",name = "userId") + private Integer userId; + + /** + * 总次数 + */ + @ApiModelProperty(value = "总次数",name = "totalLimit") + private Integer totalLimit; + + /** + * 已使次数 + */ + @ApiModelProperty(value = "已使次数",name = "useLimit") + private Integer useLimit ; + + /** + * å¯ç”¨æ¬¡æ•° + */ + @ApiModelProperty(value = "å¯ç”¨æ¬¡æ•°",name = "usableLimit") + private Integer usableLimit; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间",name = "creteTime") + private Date createTime; + + /** + *更改时间 + */ + @ApiModelProperty(value = "更改时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserLimitRecord.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserLimitRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..9d09afa8a296c7f8fa2c1562244e60c5ac5c761b --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserLimitRecord.java @@ -0,0 +1,58 @@ +package cn.wisenergy.model.app; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author 86187 + * @ Description: 用户扣å‡æŸ¥è¯¢æ¬¡æ•°è®°å½•å®žä½“ç±» + * @ Author : 86187 + * @ Date : 2021/1/27 14:49 + */ +@Data +@ApiModel("UserLimitRecord") +@TableName("user_limit_record") +public class UserLimitRecord implements Serializable { + private static final long serialVersionUID = 6832626172862202016L; + + /** + * 用户扣å‡æŸ¥è¯¢æ¬¡æ•°è®°å½•id + */ + @ApiModelProperty(value = "用户扣å‡æŸ¥è¯¢æ¬¡æ•°è®°å½•id", name = "id") + private Integer id; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户扣å‡æŸ¥è¯¢æ¬¡æ•°è®°å½•id", name = "id") + private Integer userId; + + /** + * 用户查询信æ¯id + */ + @ApiModelProperty(value = "用户查询信æ¯id", name = "userLimitId") + private Integer userLimitId; + + /** + * 扣å‡æ¬¡æ•° + */ + @ApiModelProperty(value = "扣å‡æ¬¡æ•°", name = "minusLimit") + private Integer minusLimit; + + /** + * 扣å‡æ—¶é—´ + */ + @ApiModelProperty(value = "扣å‡æ—¶é—´", name = "createTime") + private Date createTime; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间", name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserVolunteer.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserVolunteer.java new file mode 100644 index 0000000000000000000000000000000000000000..f009c78fcdfe3c58cdedbe8feba730b1376913a9 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/UserVolunteer.java @@ -0,0 +1,39 @@ +package cn.wisenergy.model.app; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author 86187 + */ +@Data +@ApiModel(value = "UserVolunteer") +@TableName("user_volunteer") +public class UserVolunteer { + /** + * 用户方案id + */ + @ApiModelProperty(value = "用户方案id",name = "id") + private Integer id; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id",name = "userId") + private Integer userId; + + /** + * 方案记录id + */ + @ApiModelProperty(value = "方案记录id",name = "schemeRecordId") + private Integer schemeRecordId; + + /** + * å¿—æ„¿id + */ + @ApiModelProperty(value = "å¿—æ„¿id",name = "volunteerId") + private Integer volunteerId; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/Volunteer.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Volunteer.java new file mode 100644 index 0000000000000000000000000000000000000000..2fb69c3e645566c9e1e6d6735595b66127a849c9 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/Volunteer.java @@ -0,0 +1,149 @@ +package cn.wisenergy.model.app; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ContentLoopMerge; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ Description: 志愿实体类 + * @ Author : 86187 + * @ Date : 2021/1/7 15:15 + * @author 86187 + */ +@Data +@Builder +@ApiModel(value = "Volunteer") +@NoArgsConstructor +@AllArgsConstructor +@ExcelIgnoreUnannotated +public class Volunteer implements Serializable { + private static final long serialVersionUID = -7880251929353475087L; + + /** + * 志愿主键id + */ + @ApiModelProperty(value = "志愿主键id", name = "id") + private Integer id; + + /** + * 方案类型:1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 4:本科体育 5:专科专业分类6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批 + */ + @ApiModelProperty(value = "方案类型:1:本科文化一批 2:本科美术一批 3:艺术本科批文å¦ç¼–导 4:本科体育 " + + "5:专科专业分类 6:专科美术一批 7:专科文å¦ç¼–导一批 8:专科体育一批", name = "type") + private Integer type; + + /** + * 方案id + */ + @ApiModelProperty(value = "方案id", name = "schemeId") + private Integer schemeId; + + /** + * 专业å称 + */ + @ApiModelProperty(value = "专业", name = "majorName") + @ExcelProperty(value = "专业") + private String majorName; + + /** + * é™¢æ ¡ + */ + @ApiModelProperty(value = "é™¢æ ¡", name = "academy") + @ExcelProperty(value = "é™¢æ ¡") + private String academy; + + /** + * 选考科目è¦æ±‚ + */ + @ApiModelProperty(value = "选考科目è¦æ±‚", name = "courseDemand") + @ExcelProperty(value = "选考科目è¦æ±‚") + private String courseDemand; + + /** + * å¦æ ¡æ€§è´¨ + */ + @ApiModelProperty(value = "å¦æ ¡æ€§è´¨", name = "nature") + @ExcelProperty(value = "å¦æ ¡æ€§è´¨") + private String nature; + + /** + * å¦å¹´åˆ¶ï¼ˆå¹´ï¼‰ + */ + @ApiModelProperty(value = "å¦å¹´åˆ¶ï¼ˆå¹´ï¼‰", name = "yearLimit") + @ExcelProperty(value = "å¦åˆ¶ï¼ˆå¹´ï¼‰") + private Integer yearLimit; + + /** + * 计划数 + */ + @ApiModelProperty(value = "计划数", name = "planNum") + @ExcelProperty(value = "计划数") + private Integer planNum; + + /** + * 计划投档数 + */ + @ApiModelProperty(value = "投档计划数", name = "castArchivesNum") + @ExcelProperty(value = "投档计划数") + private Integer castArchivesNum; + + /** + * 投出数 + */ + @ApiModelProperty(value = "投出数", name = "launchNum") + @ExcelProperty(value = "投出数") + private Integer launchNum; + + /** + * 最低分 + */ + @ApiModelProperty(value = "最低分", name = "lowestMark") + @ExcelProperty(value = "最低分") + private String lowestMark; + + /** + * 最低ä½æ¬¡ + */ + @ApiModelProperty(value = "最低ä½æ¬¡", name = "lowestRank") + @ExcelProperty(value = "最低ä½æ¬¡") + private String lowestRank; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + private Date updateTime; + + /** + * åˆ é™¤æ ‡è®° + */ + @ApiModelProperty("是å¦åˆ 除 1,åˆ é™¤;0,æœªåˆ é™¤") + private Integer isDelete; + + /** + * 方案查询时间 + */ + @ApiModelProperty(value = "方案查询时间",name = "queryTime") + @TableField(exist = false) + @ContentLoopMerge(eachRow = 4,columnExtend=4) + private Date queryTime; + + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/common/BaseEntity.java b/wisenergy-model/src/main/java/cn/wisenergy/model/common/BaseEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..a3928463021f1a9a23c5e736b273623c312f00d9 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/common/BaseEntity.java @@ -0,0 +1,35 @@ +package cn.wisenergy.model.common; + +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@JsonAutoDetect(creatorVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE) +public abstract class BaseEntity implements Serializable { + + private static final long serialVersionUID = 7151370108706942192L; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + private Date updateTime; + + /** + * åˆ é™¤æ ‡è®° + */ + @ApiModelProperty("是å¦åˆ 除 1,åˆ é™¤;0,æœªåˆ é™¤") + private Integer isDelete; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/AccountDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/AccountDto.java new file mode 100644 index 0000000000000000000000000000000000000000..e068efea34f8ff4139c6428687dff744d658cf5d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/AccountDto.java @@ -0,0 +1,32 @@ +package cn.wisenergy.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(value = "AccountDto") +public class AccountDto implements Serializable { + private static final long serialVersionUID = -6722696621467423127L; + + /** + * 管ç†å‘˜ä¸»é”®id + */ + @ApiModelProperty(name ="id",value = "管ç†å‘˜ä¸»é”®id") + private Integer id; + + /** + * 管ç†å‘˜è´¦å· + */ + @ApiModelProperty(name = "name",value = "管ç†å‘˜è´¦å·") + private String userName; + + /** + * å¤´åƒ + */ + @ApiModelProperty(name = "headImage",value = "头åƒ") + private String headImage; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/BannerDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/BannerDto.java new file mode 100644 index 0000000000000000000000000000000000000000..dfdd7963e6f3cf869b7e72e1612b464d57d6765d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/BannerDto.java @@ -0,0 +1,52 @@ +package cn.wisenergy.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author 86187 + */ +@Data +@ApiModel(value = "BannerDto") +public class BannerDto { + + /** + * 广告id + */ + @ApiModelProperty(value = "广告id",name = "id") + private Integer id; + + + /** + * 广告类型: 1:顶部广告 2:底部广告 + */ + @ApiModelProperty(value = "广告类型: 1:顶部广告 2:底部广告",name = "type") + private Integer type; + + /** + * æŠ•æ”¾çŠ¶æ€ 0:暂åœä¸ 1ï¼šæŠ•æ”¾ä¸ + */ + @ApiModelProperty(value = "æŠ•æ”¾çŠ¶æ€ 0:暂åœä¸ 1:投放ä¸",name = "status") + private Integer status; + + /** + * ç½‘å€ + */ + @ApiModelProperty(value = "网å€",name = "website") + private String website; + + /** + * 广告图片url + */ + @ApiModelProperty(value = "广告图片url",name = "image") + private String image; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间",name = "updateTime") + private Date updateTime; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/ExportCardDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/ExportCardDto.java new file mode 100644 index 0000000000000000000000000000000000000000..0c903dd4109c713e3b092fbbadbff56b00e4a21d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/ExportCardDto.java @@ -0,0 +1,51 @@ +package cn.wisenergy.model.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentLoopMerge; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * 充值å¡åå¡å¯¼å‡ºå®žä½“ç±»dto + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +//内容高度 +@ContentRowHeight(25) +//表头行高度 +@HeadRowHeight(25) +//列的宽度 +@ColumnWidth(25) +public class ExportCardDto implements Serializable { + + private static final long serialVersionUID = 2062796530315436172L; + + /** + * å¡å· + */ + @ExcelProperty(value = "å¡å·") + private String cardNumber; + + /** + * 密ç + */ + @ExcelProperty(value = "密ç ") + private String secretKey; + + /** + * çŠ¶æ€ + */ + @ExcelProperty(value = "状æ€") + private String status; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/PayPageDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/PayPageDto.java new file mode 100644 index 0000000000000000000000000000000000000000..99b2bc313a2e1752dc2ba69413b8e9b562cfba34 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/PayPageDto.java @@ -0,0 +1,21 @@ +package cn.wisenergy.model.dto; +/** + * @ Description: 支付页é¢æŽ¥å£è¯·æ±‚å‚æ•°Dto + * @ Author : 86187 + * @ Date : 2021/2/1 13:57 + */ + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +/** + * @author 86187 + */ +@Data +@ApiModel("PayPageDto") +public class PayPageDto { + /** + * æ”¯ä»˜é‡‘é¢ ï¼šé‡‘é¢ä¸èƒ½ä¸º0 + */ + private Integer total; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/PayQueryDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/PayQueryDto.java new file mode 100644 index 0000000000000000000000000000000000000000..7e330ead7d39dc141ff4cd2af7759662031f5f83 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/PayQueryDto.java @@ -0,0 +1,22 @@ +package cn.wisenergy.model.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +/** + * @author 86187 + */ +@Data +@ApiModel() +public class PayQueryDto { + /** + * 支付å®äº¤æ˜“å· + */ + private String tradeNo; + + /** + * 商户订å•å· + */ + private String outTradeNo; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/RefillCardDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/RefillCardDto.java new file mode 100644 index 0000000000000000000000000000000000000000..c590bcf97691969e37cb4253231a8dd46de2dabf --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/RefillCardDto.java @@ -0,0 +1,40 @@ +package cn.wisenergy.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "RefillCardDto") +public class RefillCardDto { + /** + * 充值å¡id + */ + @ApiModelProperty(value = "充值å¡id",name = "id") + private Integer id; + + /** + * æ‰¹æ¬¡å· + */ + @ApiModelProperty(value = "批次å·",name = "batchNumber") + private String batchNumber; + + /** + * 是å¦å·²åˆ¶å¡ 0ï¼šå·²åˆ¶å¡ 1ï¼šæœªåˆ¶å¡ + */ + @ApiModelProperty(value = "是å¦å·²åˆ¶å¡ 0ï¼šå·²åˆ¶å¡ 1:未制å¡",name = "isMakeCard") + private Integer isMakeCard; + + /** + * å¡æ•°é‡ + */ + @ApiModelProperty(value = "å¡æ•°é‡",name = "cardNumber") + private Integer cardNumber ; + + /** + * 是å¦å·²æ¿€æ´» + */ + @ApiModelProperty(value = "是å¦å·²æ¿€æ´» 0:已激活 1:未激活 ",name = "isActivite") + private Integer isActivite; + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/UserCommitDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/UserCommitDto.java new file mode 100644 index 0000000000000000000000000000000000000000..3cb7209bf5a9681b1c90a95b4026c9daa2ca4ea0 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/UserCommitDto.java @@ -0,0 +1,71 @@ +package cn.wisenergy.model.dto; + +import cn.wisenergy.model.app.ScoreInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: 用户æ交Dto + * @ Author : 86187 + * @ Date : 2021/1/12 15:39 + */ +@Data +@ApiModel(value = "UserCommitDto") +public class UserCommitDto implements Serializable { + + private static final long serialVersionUID = 361307736335983629L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 用户å称 + */ + @ApiModelProperty(value = "用户å称", name = "userName") + private String userName; + + /** + * ç”¨æˆ·å¤´åƒ + */ + @ApiModelProperty(value = "用户头åƒ", name = "headImage") + private String headImage; + + + /** + * 性别 + */ + @ApiModelProperty(value = "å¦æ ¡", name = "school") + private Integer sex; + + /** + * å¦æ ¡ + */ + @ApiModelProperty(value = "å¦æ ¡", name = "school") + private String school; + + /** + * 考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生 + */ + @ApiModelProperty(value = "考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生", name = "studentType") + private Integer studentType; + + /** + * 用户æ¥æº 1:PC 2:APP + */ + @ApiModelProperty(value = "用户æ¥æº 1:PC 2:APP", name = "source") + private Integer source; + + + /** + * å¦ç”Ÿæˆç»©ä¿¡æ¯ + */ + @ApiModelProperty(value = "å¦ç”Ÿæˆç»©ä¿¡æ¯", name = "scoreInfo") + private ScoreInfo scoreInfo; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/dto/UserInfoDto.java b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/UserInfoDto.java new file mode 100644 index 0000000000000000000000000000000000000000..000937f8429adc1bf4ebde349968fe6427d1874d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/dto/UserInfoDto.java @@ -0,0 +1,121 @@ +package cn.wisenergy.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ Description: 用户列表展示dto + * @ Author : 86187 + * @ Date : 2021/1/7 10:47 + * @author 86187 + */ +@Data +@ApiModel(value = "UserInfoDto") +public class UserInfoDto implements Serializable { + + private static final long serialVersionUID = 4791446858538524520L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 用户å称 + */ + @ApiModelProperty(value = "用户å称", name = "userName") + private String userName; + + /** + * 性别 0:男 1:女 + */ + @ApiModelProperty(value = "性别 0:男 1:女", name = "sex") + private Integer sex; + + /** + * 考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生 + */ + @ApiModelProperty(value = "考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生", name = "examType") + private Integer examType; + + /** + * 登录æ¥æº + */ + @ApiModelProperty(name ="source",value = "登录æ¥æºï¼š1 PC,2 WAP") + private Integer source; + + /** + * 手机 + */ + @ApiModelProperty(value = "手机å·", name = "phone") + private String phone; + + /** + * 文化æˆç»© + */ + @ApiModelProperty(value = "文化æˆç»©", name = "cultureGrade") + private String cultureGrade; + + /** + * 专业æˆç»© + */ + @ApiModelProperty(value = "专业æˆç»©", name = "majorGrade") + private String majorGrade; + + /** + * 用户剩余查询次数 + */ + @ApiModelProperty(value = "用户剩余查询次数", name = "queryLimit") + private Integer queryLimit; + + /** + * ç”¨æˆ·å……å€¼æ€»é‡‘é¢ + */ + @ApiModelProperty(value = "用户充值总金é¢", name = "moneyAmount") + private String moneyAmount; + + /** + * 用户充值次数 + */ + @ApiModelProperty(value ="充值å¡å……值总次数",name = "RechargeTimes") + private int rechargeTimes; + + /** + * ç”¨æˆ·å¾®ä¿¡å……å€¼æ€»é‡‘é¢ + */ + @ApiModelProperty(value ="用户微信充值总金é¢",name = "WeChatMoney") + private String weChatMoney; + + /** + * 用户支付å®å……å€¼æ€»é‡‘é¢ + */ + @ApiModelProperty(value ="用户支付å®å……值总金é¢",name = "AlipayMoney") + private String alipayMoney; + + /** + * ip + */ + @ApiModelProperty(value = "ip", name = "ip") + private String ip; + + /** + * 注册时间 + */ + @ApiModelProperty(value = "注册时间", name = "registerTime") + private Date registerTime; + + /** + * 用户最åŽç™»é™†æ—¶é—´ + */ + @ApiModelProperty(value = "用户最åŽç™»é™†æ—¶é—´", name = "lastLoginTime") + private Date lastLoginTime; + + + + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/CardStatus.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/CardStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..c1340bf0b60a9e435a7b82e9be08ca2db5acd5e8 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/CardStatus.java @@ -0,0 +1,43 @@ +package cn.wisenergy.model.enums; + +/** + * 充值å¡çŠ¶æ€æžšä¸¾ + * + * @author 86187 + */ + +public enum CardStatus { + //未使用 + NO_USE(0, "未使用"), + + //已使用 + ALREADY_USED(1, "已使用"); + private Integer code; + + private String desc; + + CardStatus(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getDescription() { + return desc; + } + + public Integer getCode() { + return code; + } + + public static String getNameByCode(Integer code) { + if (null == code) { + return null; + } + for (SceneType type : SceneType.values()) { + if (type.getCode().intValue() == code.intValue()) { + return type.name(); + } + } + return null; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/OperationTypeEnum.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/OperationTypeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..3baca748f7bd2a8943fe11f5c3c9d1e737bcfa3e --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/OperationTypeEnum.java @@ -0,0 +1,53 @@ +package cn.wisenergy.model.enums; + +/** + * @ Description: æ“作枚举类 + * @ Author : 86187 + * @ Date : 2021/1/15 9:58 + */ +public enum OperationTypeEnum { + /** + * 用户登录相关-æ“作枚举类 + */ + USER_REGISTER(1, "用户祖册"), + USER_LOGIN(2, "用户登录"), + USER_OUT(3, "用户退出"); + + private Integer code; + + private String desc; + + OperationTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public static String getByCode(Integer code) { + if (null == code) { + return null; + } + + for (OperationTypeEnum operation : OperationTypeEnum.values()) { + if (operation.getCode().intValue() == code.intValue()) { + return operation.getDesc(); + } + } + return null; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/PayType.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/PayType.java new file mode 100644 index 0000000000000000000000000000000000000000..ecf2f2c70007577ef983d1329c8d784223621211 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/PayType.java @@ -0,0 +1,47 @@ +package cn.wisenergy.model.enums; + +/** + * 支付方å¼æžšä¸¾ç±» + * + * @author 86187 + */ + +public enum PayType { + + //æ”¯ä»˜å® + ALI_PAY(1, "支付å®"), + + //微信 + WE_CHAT(2, "微信"), + + //å……å€¼å¡ + REFILL_CARD(3, "充值å¡"); + private Integer code; + + private String desc; + + PayType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getDescription() { + return desc; + } + + public Integer getCode() { + return code; + } + + public static String getNameByCode(Integer code) { + if (null == code) { + return null; + } + for (SceneType type : SceneType.values()) { + if (type.getCode().intValue() == code.intValue()) { + return type.name(); + } + } + return null; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SceneType.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SceneType.java new file mode 100644 index 0000000000000000000000000000000000000000..c2830c3fa2217d31321c4da2222c5c7546ecd814 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SceneType.java @@ -0,0 +1,51 @@ +package cn.wisenergy.model.enums; + +/** + * 图片验è¯ç 业务类型 + * + * @author zh + * @version v2.0 + * @since v7.0 + * 2018å¹´3月19æ—¥ 下åˆ4:35:32 + */ +public enum SceneType { + + //验è¯ç 登录 + LOGIN(1, "验è¯ç 登录"), + //手机注册 + REGISTER(2, "手机注册"), + //修改密ç + MODIFY_PASSWORD(3, "修改密ç "), + //找回密ç + FIND_PASSWORD(4, "找回密ç "), + + RESET_PASSWORD(5, "çŸä¿¡é‡ç½®å¯†ç "); + private Integer code; + + private String desc; + + SceneType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getDescription() { + return desc; + } + + public Integer getCode() { + return code; + } + + public static String getNameByCode(Integer code) { + if (null == code) { + return null; + } + for (SceneType type : SceneType.values()) { + if (type.getCode().intValue() == code.intValue()) { + return type.name(); + } + } + return null; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SchemeTypeEnums.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SchemeTypeEnums.java new file mode 100644 index 0000000000000000000000000000000000000000..33c239b466a26e94d8f06dfc00a7af2f7a7791cd --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SchemeTypeEnums.java @@ -0,0 +1,53 @@ +package cn.wisenergy.model.enums; + +/** +*@ Description: 方案类型枚举 +*@ Author : 86187 +*@ Date : 2021/1/13 14:19 + * @author 86187 + */ +public enum SchemeTypeEnums { + /** + * 方案类型枚举 + */ + UNDERGRADUATE_CULTURE(1,"本科文化一批"), + + UNDERGRADUATE_ARTS(2,"本科美术一批"), + + UNDERGRADUATE_LITERATURE(3,"æ–‡å¦ç¼–导本科一批"), + + UNDERGRADUATE_SPORTS(4,"本科体育一批"), + + JUNIOR_COLLEGE_MAJOR(5,"专科文化一批"), + + JUNIOR_COLLEGE_ARTS(6,"专科美术一批"), + + JUNIOR_COLLEGE_LITERATURE(7,"æ–‡å¦ç¼–导专科一批"), + + JUNIOR_COLLEGE_SPORTS(8,"专科体育一批"); + + private Integer code; + + private String desc; + + SchemeTypeEnums(Integer code,String desc){ + this.code=code; + this.desc=desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SourceType.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SourceType.java new file mode 100644 index 0000000000000000000000000000000000000000..88eaca8fb03fa62d25497cd227744c59d9e1dc7d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/SourceType.java @@ -0,0 +1,51 @@ +package cn.wisenergy.model.enums; + +/** + * @author 86187 + * @ Description: 账户注册æ¥æºä¿¡æ¯ 枚举 + * @ Author : 86187 + * @ Date : 2021/2/9 10:48 + */ +public enum SourceType { + + //PC + PC(1, "PC"), + + APP(2, "APP"); + private Integer code; + + private String desc; + + SourceType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public static String getByCode(Integer code) { + if (null == code) { + return null; + } + for (SourceType type : SourceType.values()) { + if (type.code.intValue() == code) { + return type.getDesc(); + } + } + return null; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public void setCode(Integer code) { + this.code = code; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/StudentClassEnum.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/StudentClassEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..8fa384ad97975b9ff240b6b98c77b3226030a959 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/StudentClassEnum.java @@ -0,0 +1,46 @@ +package cn.wisenergy.model.enums; + +/** + * @author 86187 + * @ Description: 考生å¦ç§‘枚举 + * @ Author : 86187 + * @ Date : 2021/1/19 15:02 + */ +public enum StudentClassEnum { + //ç‰©ç† + PHYSICS_GRADE(1, "物ç†"), + //åŒ–å¦ + CHEMISTRY_GRADE(2, "化å¦"), + //生物 + BIOLOGY_GRADE(3, "生物"), + //åŽ†å² + HISTORY_GRADE(4, "历å²"), + + GEOGRAPHY_GRADE(5, "地ç†"), + POLITICS_GRADE(6, "政治"), + UNLIMITED(7, "ä¸é™"); + private Integer code; + + private String desc; + + StudentClassEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public void setCode(Integer code) { + this.code = code; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/StudentType.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/StudentType.java new file mode 100644 index 0000000000000000000000000000000000000000..aa385efe13669d840ea0b2d573834639c6fd5ece --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/StudentType.java @@ -0,0 +1,43 @@ +package cn.wisenergy.model.enums; + +/** + * @author 86187 + * @ Description: 考生类型枚举 + * @ Author : 86187 + * @ Date : 2021/1/18 20:36 + */ +public enum StudentType { + + /** + * 考生类型枚举 + */ + CULTURE_STUDENT(1, "文化课考生"), + ART_STUDENT(2, "美术生"), + SPORTS_STUDENT(3, "体育生"), + LITERATURE_STUDENT(4, "æ–‡å¦ç¼–导生"); + + private Integer code; + + private String desc; + + StudentType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/enums/TemplateType.java b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/TemplateType.java new file mode 100644 index 0000000000000000000000000000000000000000..bed8e509cf29f8a35518798107a81f8244f1e814 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/enums/TemplateType.java @@ -0,0 +1,35 @@ +package cn.wisenergy.model.enums; + +/** + * @author 86187 + * @ Description: çŸä¿¡æ¨¡æ¿ç¼–å·æžšä¸¾ + * @ Author : 86187 + * @ Date : 2021/1/26 15:37 + */ +public enum TemplateType { + ; + private Integer code; + + private String desc; + + TemplateType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AccountLoginVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AccountLoginVo.java new file mode 100644 index 0000000000000000000000000000000000000000..71a1bfa3de65a6a56f11bd23d0d5726e50e7e33f --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AccountLoginVo.java @@ -0,0 +1,24 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +@Data +@ApiModel(value = "AccountInfo") +public class AccountLoginVo implements Serializable { + private static final long serialVersionUID = -3802879442149734552L; + + /** + * 管ç†å‘˜è´¦å· + */ + @ApiModelProperty(name = "name",value = "管ç†å‘˜è´¦å·") + private String userName; + + /** + * 管ç†å‘˜å¯†ç + */ + @ApiModelProperty(name="password",value = "管ç†å‘˜å¯†ç ") + private String password; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AddLimitVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AddLimitVo.java new file mode 100644 index 0000000000000000000000000000000000000000..1cce10039c4170391384262f18bf9b07c63f622d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AddLimitVo.java @@ -0,0 +1,44 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: æ·»åŠ ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°Vo + * @ Author : 86187 + * @ Date : 2021/1/27 10:19 + */ +@Data +@ApiModel(value = "AddLimitVo") +public class AddLimitVo implements Serializable { + private static final long serialVersionUID = -1402670785302226482L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 支付类型 1ï¼šæ”¯ä»˜å® 2:微信 3ï¼šå……å€¼å¡ + */ + @ApiModelProperty(value = "支付类型 1ï¼šæ”¯ä»˜å® 2:微信 3:充值å¡", name = "payType") + private Integer payType; + + /** + * æ”¯ä»˜é‡‘é¢ + */ + @ApiModelProperty(value = "支付金é¢", name = "payMoney") + private Integer payMoney; + + /** + * 充值å¡å¯†ç + */ + @ApiModelProperty(value = "充值å¡å¯†ç ", name = "password") + private String password; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AdvertisingQueryVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AdvertisingQueryVo.java new file mode 100644 index 0000000000000000000000000000000000000000..17a86f5465711acd9674e6a4940d476557b16a77 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/AdvertisingQueryVo.java @@ -0,0 +1,65 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 广告分页查询Vo +*@ Author : 86187 +*@ Date : 2021/1/7 17:13 +*/ +@Data +@ApiModel(value = "AdvertisingQueryVo") +public class AdvertisingQueryVo implements Serializable { + private static final long serialVersionUID = 8066049220539686367L; + + /** + * å…³é”®è¯ + */ + @ApiModelProperty(value = "关键è¯", name = "keyword") + private String keyword; + + /** + * 广告类型: 1:顶部广告 2:底部广告 + */ + @ApiModelProperty(value = "广告类型: 1:顶部广告 2:底部广告",name = "type") + private Integer type; + + /** + * æŠ•æ”¾çŠ¶æ€ 0:暂åœä¸ 1ï¼šæŠ•æ”¾ä¸ + */ + @ApiModelProperty(value = "æŠ•æ”¾çŠ¶æ€ 0:暂åœä¸ 1:投放ä¸",name = "status") + private Integer status; + + /** + * 开始时间 + */ + @ApiModelProperty(value = "开始时间", name = "startTime") + private Date startTime; + + /** + * 结æŸæ—¶é—´ + */ + @ApiModelProperty(value = "结æŸæ—¶é—´", name = "endTime") + private Date endTime; + + /** + * 起始页 + */ + @ApiModelProperty(value = "起始页", name = "pageNo") + private Integer pageNo; + + /** + * é¡µå¤§å° + */ + @ApiModelProperty(value = "页大å°", name = "pageSize") + private Integer pageSize; + + private Integer startNum; + + private Integer endNum; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/LoginOutVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/LoginOutVo.java new file mode 100644 index 0000000000000000000000000000000000000000..534925766073eff57d9b1830e43abaf3e4ce595d --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/LoginOutVo.java @@ -0,0 +1,21 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + */ +@Data +@ApiModel("LoginOutVo") +public class LoginOutVo implements Serializable { + private static final long serialVersionUID = -307447260120718038L; + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/MinusLimitVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/MinusLimitVo.java new file mode 100644 index 0000000000000000000000000000000000000000..a2702ed20da7992d24e9c0aae103c83028a69f78 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/MinusLimitVo.java @@ -0,0 +1,27 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: 查询次数扣å‡Vo + * @ Author : 86187 + * @ Date : 2021/1/28 17:06 + */ +@Data +@ApiModel("MinusLimitVo") +public class MinusLimitVo implements Serializable { + private static final long serialVersionUID = 8276489379012215568L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/PayRecordQueryVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/PayRecordQueryVo.java new file mode 100644 index 0000000000000000000000000000000000000000..8f1fa07d8db1aaaa01ec1447f28bbf0416f8bf50 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/PayRecordQueryVo.java @@ -0,0 +1,47 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 充值记录查询Vo +*@ Author : 86187 +*@ Date : 2021/1/13 17:16 +*/ +@Data +@ApiModel(value = "PayRecordQueryVo") +public class PayRecordQueryVo implements Serializable { + private static final long serialVersionUID = 4964338614574527324L; + + /** + * å…³é”®è¯ + */ + @ApiModelProperty(value = "关键è¯", name = "keyword") + private String keyword; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 起始页 + */ + @ApiModelProperty(value = "起始页", name = "pageNo") + private Integer pageNo; + + /** + * é¡µå¤§å° + */ + @ApiModelProperty(value = "页大å°", name = "pageSize") + private Integer pageSize; + + private Integer startNum; + + private Integer endNum; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/PayRecordShowVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/PayRecordShowVo.java new file mode 100644 index 0000000000000000000000000000000000000000..fc0e4036c358f51d6d2ee02df0ab2724ff31ba5c --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/PayRecordShowVo.java @@ -0,0 +1,51 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 充值记录展示Vo +*@ Author : 86187 +*@ Date : 2021/1/13 17:14 + * @author 86187 + */ +@Data +@ApiModel(value = "PayRecordShowVo") +public class PayRecordShowVo implements Serializable { + private static final long serialVersionUID = 3279446872102807035L; + + /** + * 充值记录id + */ + @ApiModelProperty(value = "充值记录id",name = "") + private Integer recordId; + + /** + * 充值类型 1ï¼šæ”¯ä»˜å® 2:微信 3ï¼šå……å€¼å¡ + */ + @ApiModelProperty(value = "充值类型 1ï¼šæ”¯ä»˜å® 2:微信 3:充值å¡",name = "type") + private Integer type; + + /** + * 充值结果 0:æˆåŠŸ 1:失败 + */ + @ApiModelProperty(value = "充值结果 0:æˆåŠŸ 1:失败",name = "result") + private Integer result; + /** + * 充值次数 + */ + @ApiModelProperty(value = "充值次数",name = "limit") + private Integer limit; + + /** + * 充值时间 + */ + @ApiModelProperty(value = "充值时间",name = "payTime") + private Date payTime; + + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeQueryVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeQueryVo.java new file mode 100644 index 0000000000000000000000000000000000000000..4b2dd9a7eade1cfa9d50ff27fd7c060c5d7d6363 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeQueryVo.java @@ -0,0 +1,37 @@ +package cn.wisenergy.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 方案列表查询Vo +*@ Author : 86187 +*@ Date : 2021/1/25 11:30 + * @author 86187 + */ +@Data +@ApiModel("SchemeQueryVo") +public class SchemeQueryVo implements Serializable { + private static final long serialVersionUID = 2326078022046306092L; + + /** + * 起始页 + */ + @ApiModelProperty(value = "起始页", name = "pageNo") + private Integer pageNo; + + /** + * é¡µå¤§å° + */ + @ApiModelProperty(value = "页大å°", name = "pageSize") + private Integer pageSize; + + private Integer startNum; + + private Integer endNum; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeRecordQueryVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeRecordQueryVo.java new file mode 100644 index 0000000000000000000000000000000000000000..149cfe29c6b145617f6984fdd30661dc1fc4bc81 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeRecordQueryVo.java @@ -0,0 +1,48 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 方案查询记录分页Vo +*@ Author : 86187 +*@ Date : 2021/1/13 9:34 + * @author 86187 + */ +@Data +@ApiModel(value = "SchemeRecordQueryVo") +public class SchemeRecordQueryVo implements Serializable { + private static final long serialVersionUID = -6962244667676123937L; + + /** + * å…³é”®è¯ + */ + @ApiModelProperty(value = "关键è¯", name = "keyword") + private String keyword; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 起始页 + */ + @ApiModelProperty(value = "起始页", name = "pageNo") + private Integer pageNo; + + /** + * é¡µå¤§å° + */ + @ApiModelProperty(value = "页大å°", name = "pageSize") + private Integer pageSize; + + private Integer startNum; + + private Integer endNum; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeVo.java new file mode 100644 index 0000000000000000000000000000000000000000..e11f4ea82442d54250b63b2f4acde33d9d732a1f --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SchemeVo.java @@ -0,0 +1,58 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: 方案查询Vo + * @ Author : 86187 + * @ Date : 2021/1/13 14:53 + */ +@Data +@ApiModel(value = "SchemeQueryVo") +public class SchemeVo implements Serializable { + + private static final long serialVersionUID = 717382532110305837L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 大专业å称 + */ + @ApiModelProperty(value = "大专业å称:如 ‘法å¦ã€æ–‡å¦ã€å¤–è¯â€™", name = "bigMajorNames") + private String bigMajorNames; + + /** + * 专业ids + */ + @ApiModelProperty(value = "专业ids,如'1,2,3,4,5,6...'", name = "professionIds") + private String professionIds; + + /** + * 文化课æˆç»© + */ + @ApiModelProperty(value = "文化课æˆç»©", name = "cultureGrade") + private String cultureGrade; + + /** + * 专业课æˆç»© + */ + @ApiModelProperty(value = "专业课æˆç»©", name = "majorGrade") + private String majorGrade; + + /** + * 是å¦å±•ç¤ºå…¨éƒ¨ 0:å¦ 1:是 + */ + @ApiModelProperty(value = "是å¦å±•ç¤ºå…¨éƒ¨ 0:å¦ 1:是", name = "isShowAll") + private Integer isShowAll; + + +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SendSmsVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SendSmsVo.java new file mode 100644 index 0000000000000000000000000000000000000000..6b3dcc0a1b79ec737b762399b8664f36d1507df5 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/SendSmsVo.java @@ -0,0 +1,37 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: å‘é€çŸä¿¡éªŒè¯ç Vo + * @ Author : 86187 + * @ Date : 2021/1/26 15:06 + */ +@Data +@ApiModel(value = "SendSmsVo") +public class SendSmsVo implements Serializable { + private static final long serialVersionUID = -1072677301838222102L; + + /** + * 手机å·ç + */ + @ApiModelProperty(value = "手机å·ç ", name = "phone") + private String phone; + + /** + * æ¥æº 1:PC 2:APP + */ + @ApiModelProperty(value = "æ¥æº 1:PC 2:APP", name = "source") + private Integer source; + + /** + * 场景 1:çŸä¿¡ç™»å½• 2:çŸä¿¡æ³¨å†Œ 3:çŸä¿¡ä¿®æ”¹å¯†ç 4:çŸä¿¡æ‰¾å›žå¯†ç 5:çŸä¿¡é‡ç½®å¯†ç + */ + @ApiModelProperty(value = "场景 1:çŸä¿¡ç™»å½• 2:çŸä¿¡æ³¨å†Œ 3:çŸä¿¡ä¿®æ”¹å¯†ç 4:çŸä¿¡æ‰¾å›žå¯†ç 5:çŸä¿¡é‡ç½®å¯†ç ", name = "scene") + private Integer scene; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UpdatePasswordVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UpdatePasswordVo.java new file mode 100644 index 0000000000000000000000000000000000000000..c667f6929c7dddf5cef4f84baadc0df42adfce41 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UpdatePasswordVo.java @@ -0,0 +1,37 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @ Description: 修改账户密ç Vo + * @ Author : 86187 + * @ Date : 2021/1/18 14:35 + * @author 86187 + */ +@Data +@ApiModel(value = "UpdatePasswordVo") +public class UpdatePasswordVo implements Serializable { + private static final long serialVersionUID = 5543462178133500983L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 新密ç + */ + @ApiModelProperty(value = "新密ç ", name = "newPassword") + private String newPassword; + + /** + * 旧密ç + */ + @ApiModelProperty(value = "旧密ç ", name = "oldPassword") + private String oldPassword; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserInfoVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserInfoVo.java new file mode 100644 index 0000000000000000000000000000000000000000..ecee4067b91e0e5ed84db573357c0353b73bc766 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserInfoVo.java @@ -0,0 +1,49 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @ Description: 用户信æ¯Vo + * @ Author : 86187 + * @ Date : 2021/1/7 11:14 + * @author 86187 + */ +@Data +@ApiModel(value = "UserInfoVo") +public class UserInfoVo implements Serializable { + private static final long serialVersionUID = 6175769905046107052L; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 用户å称 + */ + @ApiModelProperty(value = "用户å称", name = "userName") + private String userName; + + /** + * 性别 0:男 1:女 + */ + @ApiModelProperty(value = "性别 0:男 1:女", name = "sex") + private Integer sex; + + /** + * 考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生 + */ + @ApiModelProperty(value = "考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生", name = "studentType") + private Integer studentType; + + /** + * 手机 + */ + @ApiModelProperty(value = "手机å·", name = "phone") + private String phone; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserLoginVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserLoginVo.java new file mode 100644 index 0000000000000000000000000000000000000000..04f0f3688fc07ad0ae8a3c491082dfe0857da40b --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserLoginVo.java @@ -0,0 +1,49 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: 用户登录Vo + * @ Author : 86187 + * @ Date : 2021/1/15 14:27 + */ +@Data +@ApiModel(value = "UserLoginVo") +public class UserLoginVo implements Serializable { + private static final long serialVersionUID = 2206962675782086034L; + + /** + * 手机å·ç + */ + @ApiModelProperty(value = "手机å·ç ", name = "phone") + private String phone; + + /** + * 密ç + */ + @ApiModelProperty(value = "密ç ", name = "password") + private String password; + + /** + * 验è¯ç + */ + @ApiModelProperty(value = "验è¯ç ", name = "code") + private String code; + + /** + * 场景类型:1:验è¯ç 登录 2:手机注册 3:修改密ç 4:找回密ç + */ + @ApiModelProperty(value = "场景类型:1:验è¯ç 登录 2:手机注册 3:修改密ç 4:找回密ç 5:çŸä¿¡é‡ç½®å¯†ç ", name = "scene") + private Integer scene; + + /** + * æ¥æºï¼š 1:PC 2:APP + */ + @ApiModelProperty(value = "æ¥æºï¼š 1:PC 2:APP", name = "source") + private Integer source; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserQueryVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserQueryVo.java new file mode 100644 index 0000000000000000000000000000000000000000..3c95c8b4009e7287fc149771fa079c4058c66aec --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserQueryVo.java @@ -0,0 +1,70 @@ +package cn.wisenergy.model.vo; + +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** +*@ Description: 用户分页查询Vo +*@ Author : 86187 +*@ Date : 2021/1/7 11:30 +*/ +@Data +@ApiModel(value = "UserQueryVo") +public class UserQueryVo implements Serializable { + private static final long serialVersionUID = -3717746916267660740L; + + /** + * å…³é”®è¯ + */ + @ApiModelProperty(value = "关键è¯", name = "keyword") + private String keyword; + + /** + * 开始时间 + */ + @ApiModelProperty(value = "开始时间", name = "startTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + /** + * 结æŸæ—¶é—´ + */ + @ApiModelProperty(value = "结æŸæ—¶é—´", name = "endTime") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; + + /** + * 起始页 + */ + @ApiModelProperty(value = "起始页", name = "pageNo") + private Integer pageNo; + + /** + * é¡µå¤§å° + */ + @ApiModelProperty(value = "页大å°", name = "pageSize") + private Integer pageSize; + + /** + * 用户å称 + */ + @ApiModelProperty(value= "用户å" ,name="userName") + private String userName; + + /** + * 电è¯å·ç + */ + @ApiModelProperty(name = "phone",value = "手机å·") + private String phone; + + private Integer startNum; + + private Integer endNum; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserRegisterVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserRegisterVo.java new file mode 100644 index 0000000000000000000000000000000000000000..95ec11cee42201fbef59732f7e394a7db36c24a7 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserRegisterVo.java @@ -0,0 +1,50 @@ +package cn.wisenergy.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 86187 + * @ Description: 用户注册Vo + * @ Author : 86187 + * @ Date : 2021/1/14 11:39 + */ +@Data +@ApiModel(value = "UserRegisterVo") +public class UserRegisterVo implements Serializable { + + private static final long serialVersionUID = -1105034143432359192L; + + /** + * 手机å·ç + */ + @ApiModelProperty(value = "手机å·ç ", name = "phone") + private String phone; + + /** + * 密ç + */ + @ApiModelProperty(value = "密ç ", name = "password") + private String password; + + /** + * 验è¯ç + */ + @ApiModelProperty(value = "验è¯ç ", name = "smCode") + private String smCode; + + /** + * æ¥æº 1:PC 2:APP + */ + @ApiModelProperty(value = "æ¥æº 1:PC 2:APP", name = "source") + private Integer source; + + /** + * 场景 1:登录 2:注册 3:修改密ç 4:找回密ç 5:é‡ç½®å¯†ç + */ + @ApiModelProperty(value = "场景 1:登录 2:注册 3:修改密ç 4:找回密ç 5:é‡ç½®å¯†ç ", name = "scene") + private Integer scene; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserShowVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserShowVo.java new file mode 100644 index 0000000000000000000000000000000000000000..23beac104b674860322a1d9e64d4129dcffa0781 --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/UserShowVo.java @@ -0,0 +1,54 @@ +package cn.wisenergy.model.vo; + +import cn.wisenergy.model.app.ScoreInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** +*@ Description: 用户对外展示信æ¯Vo +*@ Author : 86187 +*@ Date : 2021/1/12 15:29 +*/ +@Data +@ApiModel(value = "UserShowVo") +public class UserShowVo implements Serializable { + private static final long serialVersionUID = 2451826421351862268L; + /** + * 用户id + */ + @ApiModelProperty(value = "用户id",name = "id") + private Integer id; + + /** + * 用户å称 + */ + @ApiModelProperty(value = "用户å称",name = "userName") + private String userName; + + /** + * 性别 + */ + @ApiModelProperty(value = "性别",name = "sex") + private Integer sex; + + /** + * 毕业高ä¸å¦æ ¡ + */ + @ApiModelProperty(value = "毕业高ä¸å¦æ ¡",name = "school") + private String school; + + /** + * 考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生 + */ + @ApiModelProperty(value = "考生类型 1:文化课考生 2:美术生 3:体育生 4:文å¦ç¼–导考生",name = "studentType") + private Integer studentType; + + /** + * å¦ç”Ÿæˆç»©ä¿¡æ¯ + */ + @ApiModelProperty(value = "å¦ç”Ÿæˆç»©ä¿¡æ¯",name = "scoreInfo") + private ScoreInfo scoreInfo; +} diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/vo/VolunteerVo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/VolunteerVo.java new file mode 100644 index 0000000000000000000000000000000000000000..abc88cf9986820f832ee52e664617ccb3a5a4f9c --- /dev/null +++ b/wisenergy-model/src/main/java/cn/wisenergy/model/vo/VolunteerVo.java @@ -0,0 +1,42 @@ +package cn.wisenergy.model.vo; + +import cn.wisenergy.model.app.Volunteer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @ Description: 方案查询志愿列表 + * @ Author : 86187 + * @ Date : 2021/1/13 14:57 + */ +@Data +@ApiModel(value = "VolunteerVo") +public class VolunteerVo { + /** + * 用户id + */ + @ApiModelProperty(value = "用户id", name = "userId") + private Integer userId; + + /** + * 方案记录id + */ + @ApiModelProperty(value = "方案记录id", name = "recordId") + private Integer recordId; + + /** + * 返回志愿总数 + */ + @ApiModelProperty(value = "返回志愿总数", name = "total") + private Integer total; + + /** + * å¿—æ„¿ä¿¡æ¯åˆ—表 + */ + @ApiModelProperty(value = "å¿—æ„¿ä¿¡æ¯åˆ—表", name = "volunteers") + private List<Volunteer> volunteers; +} diff --git a/wisenergy-model/wisenergy-model.iml b/wisenergy-model/wisenergy-model.iml new file mode 100644 index 0000000000000000000000000000000000000000..39926f845879dc98fa1be8badb8c82898cd280e3 --- /dev/null +++ b/wisenergy-model/wisenergy-model.iml @@ -0,0 +1,172 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="wisenergy-common" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.3.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.glassfish:javax.el:3.0.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" /> + <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> + <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" /> + <orderEntry type="library" name="Maven: org.mockito:mockito-core:2.23.4" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" /> + <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-test:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" /> + <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" /> + <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" /> + <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" /> + <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.16" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.6.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.9.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" /> + <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.54" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" /> + <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi:3.9" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.9" level="project" /> + <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" /> + <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.9" level="project" /> + <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.3.0" level="project" /> + <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> + <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.6.7" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.23" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" /> + <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> + <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.8" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> + <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" /> + <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" /> + <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/wisenergy-parent.iml b/wisenergy-parent.iml new file mode 100644 index 0000000000000000000000000000000000000000..450c2b6687897331929b6ba3703fbd4f63c73156 --- /dev/null +++ b/wisenergy-parent.iml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" /> + <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> + <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.8" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> + <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" /> + <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" /> + <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" /> + <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> + <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/wisenergy-service/.gitignore b/wisenergy-service/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/wisenergy-service/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/wisenergy-service/pom.xml b/wisenergy-service/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..79b1ecdeab26bef450b1028f7901f93ac6c66bb8 --- /dev/null +++ b/wisenergy-service/pom.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>wisenergy-parent</artifactId> + <groupId>cn.wisenergy</groupId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>wisenergy-service</artifactId> + <version>${moduleVersion.wisenergy-service}</version> + <packaging>jar</packaging> + + <!-- 项目ä¾èµ– --> + <dependencies> + <dependency> + <groupId>cn.wisenergy</groupId> + <artifactId>wisenergy-mapper</artifactId> + <version>${moduleVersion.wisenergy-mapper}</version> + </dependency> + <!--综åˆå®‰é˜²ç®¡ç†å¹³å°æ供了OpenAPI安全认è¯åº“(Javaã€C++)快速实现接å£è°ƒç”¨ã€‚--> + <dependency> + <groupId>com.hikvision.ga</groupId> + <artifactId>artemis-http-client</artifactId> + <version>1.1.3</version> + </dependency> + <dependency> + <groupId>org.jetbrains</groupId> + <artifactId>annotations</artifactId> + <version>20.1.0</version> + <scope>compile</scope> + </dependency> + + <!-- çŸä¿¡--> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>aliyun-java-sdk-core</artifactId> + <version>4.5.3</version> + </dependency> + + <!--阿里支付 https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --> + <dependency> + <groupId>com.alipay.sdk</groupId> + <artifactId>alipay-sdk-java</artifactId> + <version>4.11.33.ALL</version> + </dependency> + + <!--微信支付--> + <dependency> + <groupId>com.squareup.okhttp3</groupId> + <artifactId>okhttp</artifactId> + <version>3.6.0</version> + </dependency> + + <dependency> + <groupId>com.github.wechatpay-apiv3</groupId> + <artifactId>wechatpay-apache-httpclient</artifactId> + <version>0.2.1</version> + </dependency> + + <!--pdf导出 --> + <dependency> + <groupId>com.itextpdf</groupId> + <artifactId>itextpdf</artifactId> + <version>5.5.13</version> + </dependency> + + <dependency> + <groupId>com.itextpdf</groupId> + <artifactId>itext-asian</artifactId> + <version>5.2.0</version> + </dependency> + </dependencies> + + <!-- MAVEN构建 --> + <build> + <finalName>${project.artifactId}-${moduleVersion.wisenergy-mapper}</finalName> + </build> + +</project> \ No newline at end of file diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/AccountSerivce.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/AccountSerivce.java new file mode 100644 index 0000000000000000000000000000000000000000..9e32531ef5c1178534b429750aada998367a49fa --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/AccountSerivce.java @@ -0,0 +1,14 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.dto.AccountDto; +import cn.wisenergy.model.vo.AccountLoginVo; + +public interface AccountSerivce { + /** + * 查询管ç†å‘˜ä¿¡æ¯ + * @param accountLoginVo 查询å‚æ•° + * @return 管ç†å‘˜ä¿¡æ¯ + */ + R<AccountDto> getAccountInfo(AccountLoginVo accountLoginVo); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/BannerService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/BannerService.java new file mode 100644 index 0000000000000000000000000000000000000000..34e34dbc7aae675e43bc61009001fc98fd0d65d6 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/BannerService.java @@ -0,0 +1,67 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Banner; +import cn.wisenergy.model.dto.BannerDto; +import cn.wisenergy.model.vo.AdvertisingQueryVo; +import com.github.pagehelper.PageInfo; +import com.sun.org.apache.xpath.internal.operations.Bool; + +import java.util.List; + +/** + * @ Description: 广告接å£å®šä¹‰ + * @ Author : 86187 + * @ Date : 2021/1/7 17:08 + */ +public interface BannerService { + /** + * æ·»åŠ å¹¿å‘Š + * + * @param advertising å¹¿å‘Šä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> add(Banner advertising); + + /** + * 编辑广告 + * + * @param advertising å¹¿å‘Šä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> edit(Banner advertising); + + /** + * 获å–详情 + * + * @param id 广告id + * @return 详情 + */ + R<Banner> getById(Integer id); + + /** + * 获å–广告分页列表 + * + * @param advertisingQueryVo 分页å‚æ•° + * @return 分页结果集 + */ + R<PageInfo<BannerDto>> getList(AdvertisingQueryVo advertisingQueryVo); + + /** + * 开始/æš‚åœæŠ•æ”¾å¹¿å‘Š + * + * @param id 广告id + * @param status 1 :投放 2:暂åœæŠ•æ”¾ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> editStatus(Integer id, Integer status); + + R<List<Banner>> getTopBanners(Integer type); + + /** + * 工具广告idåˆ é™¤å¹¿å‘Š + * @param id 广告id + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> delBanner(Integer id); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/Daosupport.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/Daosupport.java new file mode 100644 index 0000000000000000000000000000000000000000..43fa6c53c075dad5e77ec93e8252d1d1792bd3f4 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/Daosupport.java @@ -0,0 +1,26 @@ +package cn.wisenergy.service.app; + +import java.util.List; + +public interface Daosupport { + + /** + * 查询å•ä¸€ç»“果集<br/> + * 并将结果转为<code>int</code>型返回 + * @param sql 查询的sqlè¯å¥ï¼Œç¡®å®šç»“果为一行一列,且为数å—åž‹ + * @param args 对应sqlè¯å¥ä¸çš„å‚数值 + * @return + */ + Integer queryForInt(String sql, Object... args); + + + /** + * 查询多行结果集<br/> + * 并将结果转为<code>List<T></code> + * @param sql 查询的sqlè¯å¥ + * @param clazz <code><T></code>çš„Class对象 + * @param args 对应sqlè¯å¥ä¸çš„å‚数值 + * @return 列表ä¸å…ƒç´ 为<code>T</code>çš„<code>List</code> + */ + <T> List<T> queryForList(String sql, Class<T> clazz, Object... args); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/GraduationSerivce.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/GraduationSerivce.java new file mode 100644 index 0000000000000000000000000000000000000000..4a3514ead0e8b31de63f5f66a671028da5523cfa --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/GraduationSerivce.java @@ -0,0 +1,11 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Graduation; + +import java.util.List; + +public interface GraduationSerivce { + + R<List<Graduation>> getList(); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/PayRecordService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/PayRecordService.java new file mode 100644 index 0000000000000000000000000000000000000000..71763cf1c8019912c83d464cc0d048ee2260638d --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/PayRecordService.java @@ -0,0 +1,30 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.PayRecord; +import cn.wisenergy.model.vo.PayRecordQueryVo; +import cn.wisenergy.model.vo.PayRecordShowVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.pagehelper.PageInfo; + +/** +*@ Description: 充值记录接å£å®šä¹‰ +*@ Author : 86187 +*@ Date : 2021/1/13 17:13 + * @author 86187 + */ +public interface PayRecordService { + /** + * 获å–用户充值列表 + * @param payRecordQueryVo + * @return + */ + R<PageInfo<PayRecordShowVo>> getList(PayRecordQueryVo payRecordQueryVo); + + /** + * æ·»åŠ å……å€¼è®°å½• + * @param payRecord å……å€¼è®°å½•ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> add(PayRecord payRecord); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/PriceService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/PriceService.java new file mode 100644 index 0000000000000000000000000000000000000000..9dddc0741a14da9cf9b320e5769a85ca8057bada --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/PriceService.java @@ -0,0 +1,14 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Price; + +import java.util.List; + +/** + * @author 86187 + */ +public interface PriceService { + + R<List<Price>> getList(); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/ProfessionService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/ProfessionService.java new file mode 100644 index 0000000000000000000000000000000000000000..770c24ae42010d27530afc77495f379ffd73dce8 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/ProfessionService.java @@ -0,0 +1,20 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Profession; + +import java.util.List; + +/** +*@ Description: 专业接å£å®šä¹‰ +*@ Author : 86187 +*@ Date : 2021/1/13 10:54 +*/ +public interface ProfessionService { + + /** + * 获å–ä¸“ä¸šæ ‘ç»“æž„ + * @return æ ‘åˆ—è¡¨ + */ + R<List<Profession>> getTree(Integer type,Integer userId); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/RefillCardService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/RefillCardService.java new file mode 100644 index 0000000000000000000000000000000000000000..0885ea29fd05aed8bb051ebe81ae508cd7b0961e --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/RefillCardService.java @@ -0,0 +1,48 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.RefillCard; +import cn.wisenergy.model.dto.RefillCardDto; +import com.github.pagehelper.PageInfo; + +import javax.servlet.http.HttpServletResponse; + + +public interface RefillCardService { + /** + * æ·»åŠ å……å€¼å¡ + * @param refillCard 充值å¡ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> add(RefillCard refillCard); + + /** + * 改å˜æ¿€æ´»çŠ¶æ€ + * @param batchNumber 充值å¡æ‰¹æ¬¡å· + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> update(String batchNumber); + + /** + * 查询充值å¡ä¿¡æ¯ + * @param pageNo 当å‰é¡µæ•° + * @param pageSize æ¯é¡µæ˜¾ç¤ºæ¡æ•° + * @return 充值å¡ä¿¡æ¯ç»“果集 + */ + R<PageInfo<RefillCardDto>> getList(Integer pageNo, Integer pageSize); + + /** + * 生æˆå¡ç‰‡ + * @param id :充值å¡id + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> createCard(Integer id); + + /** + * 导出excel + * @param batchNumber æ‰¹æ¬¡å· + * @param response + * @return Excelæ•°æ® + */ + R<Boolean> createExcel(String batchNumber, HttpServletResponse response); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeRecordService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeRecordService.java new file mode 100644 index 0000000000000000000000000000000000000000..427a8bb5a9d45fcb64dc95c47dd351d8701986ef --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeRecordService.java @@ -0,0 +1,52 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.SchemeQueryRecord; +import cn.wisenergy.model.app.Volunteer; +import cn.wisenergy.model.vo.SchemeRecordQueryVo; +import com.github.pagehelper.PageInfo; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +public interface SchemeRecordService { + /** + * æ·»åŠ æ–¹æ¡ˆæŸ¥è¯¢è®°å½• + * + * @param schemeQueryRecord æ–¹æ¡ˆä¿¡æ¯ + * @return æ–¹æ¡ˆä¿¡æ¯ + */ + R<SchemeQueryRecord> add(SchemeQueryRecord schemeQueryRecord); + + /** + * 获å–方案查询列表 + * + * @param schemeRecordQueryVo 查询æ¡ä»¶ + * @return 方案查询列表 + */ + R<PageInfo<SchemeQueryRecord>> getList(SchemeRecordQueryVo schemeRecordQueryVo); + + /** + * 获å–用户方案志愿列表 + * @param userId 用户id + * @param recordId 方案记录id + * @return 方案志愿列表 + */ + R<List<Volunteer>> getVolunteerList(Integer userId,Integer recordId); + + /** + * 方案pdf导出 + * @param userId 用户id + * @param recordId 方案查询记录id + * @return 0:导出æˆåŠŸï¼Œ1:导出失败 + */ + R<Boolean> export(Integer userId, Integer recordId, HttpServletResponse response); + + /** + * 方案excel导出 + * @param userId 用户id + * @param recordId 方案查询记录id + * @return 0:导出æˆåŠŸï¼Œ1:导出失败 + */ + R<Boolean> createExcel(Integer userId, Integer recordId, HttpServletResponse response); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java new file mode 100644 index 0000000000000000000000000000000000000000..764bd471f863a86ad9fa70011c1a5268158cbe79 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java @@ -0,0 +1,53 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.SchemeInfo; +import cn.wisenergy.model.vo.SchemeQueryVo; +import cn.wisenergy.model.vo.SchemeVo; +import cn.wisenergy.model.vo.VolunteerVo; +import com.github.pagehelper.PageInfo; + +import java.util.List; + + +/** + * @ Description: 方案接å£å®šä¹‰ + * @ Author : 86187 + * @ Date : 2021/1/13 14:50 + */ +public interface SchemeService { + + /** + * 方案查询 + * + * @param schemeVo 查询å‚æ•° + * @return 方案查询结果列表 + */ + R<VolunteerVo> getList(SchemeVo schemeVo); + + /** + * æ ¹æ®æ–¹æ¡ˆidï¼Œåˆ é™¤æ–¹æ¡ˆ + * + * @param schemeId 方案id + * @return + */ + R<Boolean> deleteById(Integer schemeId); + + /** + * 方案列表查询 + * + * @param schemeVo 查询å‚æ•° + * @return 方案查询结果列表 + */ + R<PageInfo<SchemeInfo>> getSchemeList(SchemeQueryVo schemeVo); + + /** + * 获å–方案下载路径 + * + * @param schemeId 方案id + * @return 方案下载路径 + */ + R<String> download(Integer schemeId); + + List<Integer> ceishi(Integer id); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/SendSmsSerVice.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SendSmsSerVice.java new file mode 100644 index 0000000000000000000000000000000000000000..8c0a40f757a7f3b203d0aeaa3d2e5d835b5ae23f --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SendSmsSerVice.java @@ -0,0 +1,33 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.vo.SendSmsVo; + +/** + * @author 86187 + * @ Description: çŸä¿¡éªŒè¯ç 接å£å®šä¹‰ + * @ Author : 86187 + * @ Date : 2021/1/15 15:44 + */ +public interface SendSmsSerVice { + + /** + * å‘é€çŸä¿¡éªŒè¯ç + * + * @param sendSmsVo å…¥å‚ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + * @throws Exception 异常 + */ + R<Boolean> sendSmCode(SendSmsVo sendSmsVo) throws Exception; + + /** + * 验è¯æ‰‹æœºéªŒè¯ç :外部调用 + * + * @param phone 手机å·ç + * @param code 手机验è¯ç + * @param type 场景类型 1:验è¯ç 登录 2:手机注册 3:修改密ç 4:找回密ç + * @param source æ¥æº PC/APP + * @return 是å¦é€šè¿‡æ ¡éªŒ true通过,falseä¸é€šè¿‡ + */ + R<Boolean> valid(String phone, String code, Integer type, String source); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserLimitService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserLimitService.java new file mode 100644 index 0000000000000000000000000000000000000000..d6016f99a0e904138ee36381c9bd81000601bf13 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserLimitService.java @@ -0,0 +1,38 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.UserLimit; +import cn.wisenergy.model.vo.AddLimitVo; + + +/** + * @author 86187 + * @ Description: 用户查询次数接å£å®šä¹‰ + * @ Author : 86187 + * @ Date : 2021/1/14 9:33 + */ +public interface UserLimitService { + /** + * 获å–ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + * + * @param userId 用户id + * @return ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + */ + R<UserLimit> getByUserId(Integer userId); + + /** + * æ·»åŠ ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•° + * + * @param addLimitVo å‚æ•° + * @return true or false + */ + R<Boolean> addLimit(AddLimitVo addLimitVo); + + /** + * å‡å°‘用户查询次数 + * + * @param userId 用户id + * @return true or false + */ + R<Boolean> minusLimit(Integer userId); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserLoginService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserLoginService.java new file mode 100644 index 0000000000000000000000000000000000000000..fd44eaf736f15c4c52509aa1253ad17e9d3fa53b --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserLoginService.java @@ -0,0 +1,71 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.vo.UpdatePasswordVo; +import cn.wisenergy.model.vo.UserInfoVo; +import cn.wisenergy.model.vo.UserLoginVo; +import cn.wisenergy.model.vo.UserRegisterVo; + +/** + * @author 86187 + * @ Description: 用户登录 + * @ Author : 86187 + * @ Date : 2021/1/7 14:20 + */ +public interface UserLoginService { + /** + * ç”¨æˆ·æ³¨å†ŒæŽ¥å£ + * + * @param userRegisterVo ç”¨æˆ·ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<UserInfoVo> register(UserRegisterVo userRegisterVo); + + /** + * 手机验è¯ç 登录 + * + * @param userLoginVo ç™»å½•ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<UserInfoVo> loginCode(UserLoginVo userLoginVo); + + /** + * 手机-密ç 登录 + * + * @param userLoginVo ç™»å½•ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<UserInfoVo> login(UserLoginVo userLoginVo); + + /** + * 退出登录 + * + * @param userId 用户id + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> loginOut(Integer userId); + + /** + * 修改密ç + * + * @param updateVo 修改密ç ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> updatePassword(UpdatePasswordVo updateVo); + + /** + * é‡ç½®å¯†ç + * + * @param userId 用户id + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> resetPassword(Integer userId); + + /** + * çŸä¿¡é‡ç½®å¯†ç + * + * @param userLoginVo ç™»å½•ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> smsResetPassword(UserLoginVo userLoginVo); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserService.java new file mode 100644 index 0000000000000000000000000000000000000000..0b42c4086dfecd0828732cfe4b85a6602078f36b --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserService.java @@ -0,0 +1,71 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.User; +import cn.wisenergy.model.dto.UserCommitDto; +import cn.wisenergy.model.dto.UserInfoDto; +import cn.wisenergy.model.vo.UserInfoVo; +import cn.wisenergy.model.vo.UserQueryVo; +import cn.wisenergy.model.vo.UserShowVo; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @ Description: ç”¨æˆ·æŽ¥å£ + * @ Author : 86187 + * @ Date : 2021/1/6 16:08 + */ +public interface UserService { + + + /** + * 获å–用户列表 + * + * @param queryVo 查询æ¡ä»¶ + * @return ç”¨æˆ·åˆ—è¡¨é›†åˆ + */ + R<PageInfo<UserInfoDto>> getUserList(UserQueryVo queryVo); + + /** + * æäº¤ä¸ªäººä¿¡æ¯ + * + * @param userInfo ç”¨æˆ·ä¿¡æ¯ + * @return ç”¨æˆ·ä¿¡æ¯ + */ + R<UserInfoVo> commitUserInfo(UserCommitDto userInfo); + + /** + * ç¼–è¾‘ç”¨æˆ·ä¿¡æ¯ + * + * @param user ç”¨æˆ·ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> edit(UserCommitDto user); + + /** + * åˆ é™¤ç”¨æˆ· + * + * @param userId 用户id + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> delete(Integer userId); + + /** + * 获å–ç”¨æˆ·ä¿¡æ¯ + * + * @param id 用户id + * @return ç”¨æˆ·ä¿¡æ¯ + */ + R<UserShowVo> getById(Integer id); + + /** + * 获å–ç”¨æˆ·ä¿¡æ¯ + * @param phone 电è¯å·ç + * @return ç”¨æˆ·ä¿¡æ¯ + */ + User getByPhone(String phone); + + R<List<User>> test(); + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserVolunteerService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserVolunteerService.java new file mode 100644 index 0000000000000000000000000000000000000000..96ca419902bb23622d8f34ad4fe4823f0992c41c --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/UserVolunteerService.java @@ -0,0 +1,11 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.model.app.UserVolunteer; +import com.baomidou.mybatisplus.extension.service.IService; + + +/** + * @author 86187 + */ +public interface UserVolunteerService extends IService<UserVolunteer> { +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java new file mode 100644 index 0000000000000000000000000000000000000000..e6354c53f8ce95386735ba24cb44db3624c076fd --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java @@ -0,0 +1,50 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.SchemeInfo; +import cn.wisenergy.model.app.Volunteer; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + * @author 86187 + */ +public interface VolunteerService extends IService<Volunteer> { + /** + * 批é‡æ·»åŠ å¿—æ„¿ + * + * @param list å¿—æ„¿åˆ—è¡¨ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + R<Boolean> batchAdd(List<Volunteer> list); + + /** + * Excel批é‡æ·»åŠ 方案志愿 + * @param file 志愿文件 + * @param type 方案类型 + * @param schemeName 方案å称 + * @param response ç›¸åº”æ•°æ® + * @throws IOException 异常 + */ + void excelAdd(MultipartFile file, Integer type, String schemeName, String fileUrl,HttpServletResponse response) throws IOException; + + /** + * Excel批é‡æ·»åŠ 方案志愿 + * @param response ç›¸åº”æ•°æ® + * @throws IOException 异常 + */ + void excelTemplate(HttpServletResponse response) throws IOException; + + /** + * Excel批é‡æ·»åŠ 方案志愿 + * @param file 志愿文件 + * @param response ç›¸åº”æ•°æ® + * @throws IOException 异常 + */ + void ceshi(MultipartFile file, HttpServletResponse response) throws IOException; + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/WxPayService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/WxPayService.java new file mode 100644 index 0000000000000000000000000000000000000000..be72d605a2875db58d42abaf2b730a4996d97693 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/WxPayService.java @@ -0,0 +1,38 @@ +package cn.wisenergy.service.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.dto.PayPageDto; +import cn.wisenergy.model.dto.PayQueryDto; + +import javax.crypto.IllegalBlockSizeException; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; +import java.security.spec.InvalidKeySpecException; + +/** + * @author 86187 + */ +public interface WxPayService { + + /** + * å¾®è¡Œæ”¯ä»˜æŽ¥å£ + * @param payPageDto å…¥å‚ + * @return + */ + R<String> wxPay(PayPageDto payPageDto) throws UnsupportedEncodingException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException; + + + /** + * 微信支付-交易查询 + * @param payQueryDto å…¥å‚ + * @return + */ + R<String> queryWx(PayQueryDto payQueryDto) throws UnsupportedEncodingException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException; + + + R<String> wx_Pay(PayPageDto payPageDto) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException, IllegalBlockSizeException; + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/AccountSerivceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/AccountSerivceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c8e9a39dc8cc5ac6b5786425c4d55722235fc591 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/AccountSerivceImpl.java @@ -0,0 +1,58 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.Md5Util; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.AccountMapper; +import cn.wisenergy.model.app.AccountInfo; +import cn.wisenergy.model.dto.AccountDto; +import cn.wisenergy.model.vo.AccountLoginVo; +import cn.wisenergy.service.app.AccountSerivce; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.HashMap; + +@Slf4j +@Service +public class AccountSerivceImpl implements AccountSerivce { + + @Autowired + private AccountMapper accountMapper; + + @Override + public R<AccountDto> getAccountInfo(AccountLoginVo accountLoginVo) { + log.info("AccountSerivceImpl[].getAccountInfo[].input.param:accountLoginVo:"+accountLoginVo); + + if (null==accountLoginVo) { + return R.error("è´¦å·æˆ–密ç 为空"); + } + //判æ–å‚数是å¦ä¸ºç©º + if (StringUtils.isEmpty(accountLoginVo.getUserName())||StringUtils.isEmpty(accountLoginVo.getPassword())) { + return R.error("è´¦å·æˆ–密ç 为空"); + } + + //创建å‚数容器map + HashMap<String, Object> map = new HashMap<>(4); + map.put("userName",accountLoginVo.getUserName()); + + //查询管ç†è€…ä¿¡æ¯ + AccountInfo accountInfo = accountMapper.getAccountInfo(map); + if (null==accountInfo) { + return R.error("用户ä¸å˜åœ¨"); + } + + //å°†åŠ å¯†è¿‡åŽçš„密ç ä¸Žä¼ è¾“æ•°æ®è¿›è¡Œæ¯”较 + String s = Md5Util.digestMD5(accountInfo.getPassword()); + if (!accountLoginVo.getPassword().equals(s)) { + return R.error("密ç 或者用户å错误"); + } + //查询超过则进行数æ®copy + AccountDto accountDto = new AccountDto(); + BeanUtils.copyProperties(accountInfo,accountDto); + //è¿”å›žæ•°æ® + return R.ok(accountDto); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/BannerServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/BannerServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..cb703a9e9f5b77f4275d5705e147745f9f8aabd8 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/BannerServiceImpl.java @@ -0,0 +1,159 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.BannerMapper; +import cn.wisenergy.model.app.Banner; +import cn.wisenergy.model.dto.BannerDto; +import cn.wisenergy.model.vo.AdvertisingQueryVo; +import cn.wisenergy.service.app.BannerService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; + +/** + * @ Description: 广告接å£æ˜¯å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/7 17:07 + */ +@Slf4j +@Service +public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> implements BannerService { + + + @Autowired + private BannerMapper bannerMapper; + + @Override + public R<Boolean> add(Banner advertising) { + log.info("BannerServiceImpl[].add[].input.param:advertising:" + advertising); + //判æ–是å¦å˜åœ¨å¹¿å‘Šå›¾ç‰‡ï¼Œç»™å®šåˆå§‹å€¼ + if (!StringUtils.isEmpty(advertising.getImage())) { + advertising.setIsHaveImage(1); + } else { + advertising.setIsHaveImage(0); + } + advertising.setStatus(1); + + //æ•°æ®æ·»åŠ + int count = bannerMapper.add(advertising); + if (count == 0) { + return R.ok(1, false); + } + return R.ok(0, true); + } + + @Override + public R<Boolean> edit(Banner advertising) { + log.info("BannerServiceImpl[].getById[].input.param:advertising" + advertising); + + if (null == advertising) { + return R.error("输入的å‚数有误"); + } + + int edit = bannerMapper.edit(advertising); + + //判æ–æ•°æ®æ˜¯å¦ä¿®æ”¹æˆåŠŸ + if (edit == 0) { + return R.ok(1,false); + } + + return R.ok(0, true); + } + + @Override + public R<Banner> getById(Integer id) { + log.info("BannerServiceImpl[].getById[].input.param:id" + id); + if (null == id) { + return R.error("ä¼ å…¥å‚æ•°æ— æ•ˆ"); + } + Banner banner = bannerMapper.getById(id); + + if (null == banner) { + return R.error("æ•°æ®èŽ·å–失败"); + } + + return R.ok(banner); + } + + @Override + public R<PageInfo<BannerDto>> getList(AdvertisingQueryVo advertisingQueryVo) { + log.info("BannerServiceImpl[].getList[].input.param:advertisingQueryVo:" + advertisingQueryVo); + if (null == advertisingQueryVo) { + return R.error("输入å‚æ•°æ— æ•ˆ"); + } + + //æ•°æ®éªŒè¯ + Integer pageNo = advertisingQueryVo.getPageNo(); + Integer pageSize = advertisingQueryVo.getPageSize(); + if (null == pageSize || pageSize == 0) { + pageSize = 10; + } + if (null == pageNo || pageNo == 0) { + pageNo = 1; + } + + //å°è£…å‚æ•° + HashMap<String, Object> map = new HashMap<>(4); + map.put("pageNo", (pageNo - 1)*pageSize); + map.put("pageSize", pageSize); + map.put("status",null==advertisingQueryVo.getStatus()?null:advertisingQueryVo.getStatus()); + map.put("type",null==advertisingQueryVo.getType()?null:advertisingQueryVo.getType()); + + //查询数æ®; + List<BannerDto> list = bannerMapper.getList(map); + + PageInfo<BannerDto> pageInfo = new PageInfo<>(); + pageInfo.setTotal(bannerMapper.count(map)); + pageInfo.setPageNum(pageNo); + pageInfo.setPageSize(pageSize); + pageInfo.setList(list); + return R.ok(pageInfo); + } + + @Override + public R<Boolean> editStatus(Integer id, Integer status) { + log.info("BannerServiceImpl[].putIn[].input.param,status:{},id" + status, id); + //判æ–æ•°æ®æ˜¯å¦æ£ç¡® + if (null == id || null == status) { + return R.error("缺少é‡è¦æ•°æ®"); + } + + //ä¿®æ”¹å¹¿å‘ŠçŠ¶æ€ + int i = bannerMapper.editStatus(id, status); + + //判æ–æ•°æ®æ˜¯å¦ä¿®æ”¹æˆåŠŸ + if (i == 0) { + return R.ok(1,false); + } + return R.ok(0, true); + } + + @Override + public R<List<Banner>> getTopBanners(Integer type) { + log.info("BannerServiceImpl[]getTopBanners[]input.param.type:" + type); + if (null == type) { + return R.error("å‚æ•°ä¸èƒ½ä¸ºç©º!"); + } + return R.ok(bannerMapper.getTopBanners(type)); + } + + @Override + public R<Boolean> delBanner(Integer id) { + log.info("BannerServiceImpl[]delBanner[]input.param.id:" + id); + if (null==id) { + return R.error("å‚数为空"); + } + int i = bannerMapper.delById(id); + + if (i==0) { + return R.ok(1,false); + } + return R.ok(0,true); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/DaoSupportImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/DaoSupportImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..73b1bf23cb3a3b205566d1c2d401a1ce63a63aa5 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/DaoSupportImpl.java @@ -0,0 +1,49 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.service.app.Daosupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class DaoSupportImpl implements Daosupport { + + private JdbcTemplate jdbcTemplate; + + /** + * 日志记录 + */ + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 实例化jdbcTemplate + */ + public DaoSupportImpl(JdbcTemplate jdbcTemplate){ + this.jdbcTemplate= jdbcTemplate; + } + + @Override + public Integer queryForInt(String sql, Object... args) { + try { + Integer value = jdbcTemplate.queryForObject(sql, Integer.class, args); + return value==null?0:value; + }catch(EmptyResultDataAccessException e){ + return 0; + } catch (RuntimeException e) { + this.logger.error(e.getMessage(), e); + throw e; + } + } + + @Override + public <T> List<T> queryForList(String sql, Class<T> clazz, Object... args) { + + return this.jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(clazz), args); + + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/GraduationSerivceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/GraduationSerivceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..42da225f8cfe10caabcb6985578165939c4a77aa --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/GraduationSerivceImpl.java @@ -0,0 +1,27 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.GraduationMapper; +import cn.wisenergy.model.app.Graduation; +import cn.wisenergy.service.app.GraduationSerivce; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class GraduationSerivceImpl implements GraduationSerivce { + + @Autowired + private GraduationMapper graduationMapper; + + @Override + public R<List<Graduation>> getList() { + + List<Graduation> list = graduationMapper.getList(); + + return R.ok(list); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/PayRecordServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/PayRecordServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..47d0dcc8883641cf47e32d54a000485c334a776b --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/PayRecordServiceImpl.java @@ -0,0 +1,97 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.constant.CommonAttributes; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.PayRecordMapper; +import cn.wisenergy.model.app.PayRecord; +import cn.wisenergy.model.vo.PayRecordQueryVo; +import cn.wisenergy.model.vo.PayRecordShowVo; +import cn.wisenergy.service.app.PayRecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @ Description: 充值记录实现 + * @ Author : 86187 + * @ Date : 2021/1/13 17:18 + * @author 86187 + */ +@Service +@Slf4j +public class PayRecordServiceImpl extends ServiceImpl<PayRecordMapper, PayRecord> implements PayRecordService { + + @Autowired + private PayRecordMapper payRecordMapper; + + + @Override + public R<PageInfo<PayRecordShowVo>> getList(PayRecordQueryVo queryVo) { + log.info("volunteer-service[]PayRecordServiceImpl[]getList[]input.param.queryVo:" + queryVo); + if (null == queryVo || null == queryVo.getUserId()) { + return R.error("å‚æ•°ä¸èƒ½ä¸ºç©º!"); + } + + pageHandle(queryVo); + + Map<String, Object> map = new HashMap<>(16); + map.put("userId", queryVo.getUserId()); + int total = payRecordMapper.count(map); + + map.put("startNum", queryVo.getStartNum()); + map.put("endNum", queryVo.getEndNum()); + List<PayRecordShowVo> list = payRecordMapper.getList(map); + + + PageInfo<PayRecordShowVo> info = new PageInfo<>(); + info.setPageSize(queryVo.getPageSize()); + info.setPageNum(queryVo.getPageNo()); + info.setTotal(total); + info.setList(list); + return R.ok(info); + } + + @Override + public R<Boolean> add(PayRecord payRecord) { + log.info("volunteer-service[]PayRecordServiceImpl[]payRecord[]input.param.payRecord:" + payRecord); + if (null == payRecord) { + return R.ok(1, false); + } + + //ä¿å˜å……å€¼è®°å½•ä¿¡æ¯ + int count = payRecordMapper.add(payRecord); + if (count == 0) { + return R.ok(1, false); + } + + return R.ok(0, true); + } + + /** + * 分页处ç†æ–¹æ³• + * + * @param orderQueryVo å‚æ•° + */ + private void pageHandle(PayRecordQueryVo orderQueryVo) { + Integer pageNum = orderQueryVo.getPageNo(); + Integer pageSize = orderQueryVo.getPageSize(); + if (null == pageSize || pageSize == 0) { + pageSize = 10; + } + if (null == pageNum || pageNum == 0) { + pageNum = 1; + } + Integer endNum = pageSize; + Integer startNum = (pageNum - CommonAttributes.NUM_ONE) * pageSize; + orderQueryVo.setEndNum(endNum); + orderQueryVo.setStartNum(startNum); + orderQueryVo.setPageNo(pageNum); + orderQueryVo.setPageSize(pageSize); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/PriceServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/PriceServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..fa0c53a24cd2d8aa50266c49da434ebc4ac44c93 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/PriceServiceImpl.java @@ -0,0 +1,28 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.PriceMapper; +import cn.wisenergy.model.app.Price; +import cn.wisenergy.service.app.PriceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 86187 + */ +@Service +@Slf4j +public class PriceServiceImpl extends ServiceImpl<PriceMapper, Price> implements PriceService { + @Autowired + private PriceMapper priceMapper; + + @Override + public R<List<Price>> getList() { + + return R.ok(priceMapper.getList()); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/ProfessionServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/ProfessionServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..fdb0b31d167c70dc1cdcdf5c3726de5de2db2728 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/ProfessionServiceImpl.java @@ -0,0 +1,180 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.AdmissionRuleMapper; +import cn.wisenergy.mapper.ProfessionMapper; +import cn.wisenergy.mapper.ScoreInfoMapper; +import cn.wisenergy.model.app.AdmissionRule; +import cn.wisenergy.model.app.Profession; +import cn.wisenergy.model.app.ScoreInfo; +import cn.wisenergy.model.enums.SchemeTypeEnums; +import cn.wisenergy.model.enums.StudentType; +import cn.wisenergy.service.app.ProfessionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author 86187 + * @ Description: 专业接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/13 10:52 + */ +@Service +@Slf4j +public class ProfessionServiceImpl extends ServiceImpl<ProfessionMapper, Profession> implements ProfessionService { + + @Autowired + private ProfessionMapper professionMapper; + + @Autowired + private ScoreInfoMapper scoreInfoMapper; + + @Autowired + private AdmissionRuleMapper admissionRuleMapper; + + @Override + public R<List<Profession>> getTree(Integer type, Integer userId) { + log.info("volunteer-service[]ProfessionServiceImpl[]getTree[]input.method"); + if (null == type || null == userId) { + return R.error("å…¥å‚为空!"); + } + + //获å–方案类型 + Integer schemeType = getSchemeType(type, userId); + if (null == schemeType) { + return R.error("考生æˆç»©ä¿¡æ¯ä¸å˜åœ¨!"); + } + + //获å–所有专业 + List<Profession> rootList = professionMapper.getList(schemeType); + + //æž„é€ æ ‘å½¢æŽ¥å£ï¼šé€’å½’ + List<Profession> streetList = getStreetList(rootList); + + return R.ok(streetList); + } + + private List<Profession> getStreetList(List<Profession> list) { + List<Profession> rootList = new ArrayList<>(); + List<Profession> childrenList = new ArrayList<>(); + + //1|éåŽ†å‡ºæ ¹èŠ‚ç‚¹å’Œå节点 + for (Profession profession : list) { + if (profession.getLevel() == 1) { + rootList.add(profession); + } else { + childrenList.add(profession); + } + } + + //2.é历集åˆï¼ŒèŽ·å–æ ¹èŠ‚ç‚¹ä¸‹çš„å节点 + for (Profession profession : rootList) { + List<Profession> children = setChildren(profession.getId(), childrenList); + profession.setChildren(children); + } + return rootList; + } + + private List<Profession> setChildren(Integer id, List<Profession> list) { + List<Profession> children = new ArrayList<>(); + for (Profession profession : list) { + if (id.equals(profession.getParentId())) { + children.add(profession); + } + } + + for (int i = 0; i < children.size(); i++) { + Integer autoId = children.get(i).getId(); + List<Profession> childrenList = setChildren(autoId, list); + children.get(i).setChildren(childrenList); + } + return children; + } + + + private Integer getSchemeType(Integer type, Integer userId) { + //获å–用户æˆç»© + ScoreInfo scoreInfo = scoreInfoMapper.getById(userId); + if (null == scoreInfo) { + return null; + } + + //type==1 文化生 + if (StudentType.CULTURE_STUDENT.getCode().equals(type)) { + //获å–文化课本科一批规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()); + if (null == firstRule) { + return null; + } + + //本科类比文化分 = 本年录å–分 -去年录å–分 + 考生分数 + double firstCulture = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + scoreInfo.getCultureGrade(); + if (scoreInfo.getCultureGrade() >= firstCulture) { + return SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode(); + } + + return SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode(); + } + + //type == 2 美术考生 + if (StudentType.ART_STUDENT.getCode().equals(type)) { + //获å–美术本科一批录å–规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode()); + if (null == firstRule) { + return null; + } + + //专科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double firstCulture = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + scoreInfo.getCultureGrade(); + double firstMajor = firstRule.getCurrentYearMajor() - firstRule.getProfessionMin() + scoreInfo.getMajorGrade(); + if (scoreInfo.getCultureGrade() >= firstCulture && + scoreInfo.getMajorGrade() >= firstMajor) { + return SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode(); + } + + return SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode(); + } + + //3 体育考生 + if (StudentType.SPORTS_STUDENT.getCode().equals(type)) { + //获å–体育本科一批录å–规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode()); + if (null == firstRule) { + return null; + } + + //计算综åˆæˆç»© + //综åˆæˆç»©å·®å€¼ + double value = firstRule.getCurrentYearCulture() - firstRule.getCultureMin(); + double total = scoreInfo.getMajorGrade() * 750 / 100 * 0.7 + scoreInfo.getCultureGrade() * 0.3 - value; + if (total >= firstRule.getCultureMin()) { + return SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode(); + } + return SchemeTypeEnums.JUNIOR_COLLEGE_SPORTS.getCode(); + } + + //type == 4 æ–‡å¦ç¼–导 + if (StudentType.LITERATURE_STUDENT.getCode().equals(type)) { + //获å–æ–‡å¦ç¼–导本科一批录å–规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode()); + if (null == firstRule) { + return null; + } + + //专科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double firstCulture = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + scoreInfo.getCultureGrade(); + double firstMajor = firstRule.getCurrentYearMajor() - firstRule.getProfessionMin() + scoreInfo.getMajorGrade(); + if (scoreInfo.getCultureGrade() >= firstCulture && scoreInfo.getMajorGrade() >= firstMajor) { + return SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode(); + } + + return SchemeTypeEnums.JUNIOR_COLLEGE_LITERATURE.getCode(); + } + return null; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/RefillCardServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/RefillCardServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a016eea4d46312440dab78ee8ced11a26221db46 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/RefillCardServiceImpl.java @@ -0,0 +1,164 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.*; +import cn.wisenergy.mapper.CardMapper; +import cn.wisenergy.mapper.RefillCardMapper; +import cn.wisenergy.model.app.CardInfo; +import cn.wisenergy.model.app.RefillCard; +import cn.wisenergy.model.dto.ExportCardDto; +import cn.wisenergy.model.dto.RefillCardDto; +import cn.wisenergy.service.app.RefillCardService; +import cn.wisenergy.service.common.RefillCardManager; +import com.alibaba.excel.EasyExcel; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletResponse; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class RefillCardServiceImpl implements RefillCardService { + @Autowired + RefillCardMapper refillCardMapper; + + @Autowired + private CardMapper cardMapper; + + @Autowired + private RefillCardManager refillCardManager; + + @Override + @Transactional(rollbackFor = Exception.class) + public R<Boolean> add(RefillCard refillCard) { + log.info("RefillCardServiceImpl[].add[].input.param:refillCard:{}"+refillCard); + + if (refillCard.getCardNumber()==0||null==refillCard.getCardNumber()) { + return R.error("输入的å¡æ•°æ— æ•ˆæ˜¯æ— æ•ˆå€¼"); + } + //设置åˆå§‹çŠ¶æ€ + String time = DateUtil.getTime(new Date(), "yyyy.MM.dd.HH.mm.sss"); + refillCard.setBatchNumber(time); + refillCard.setIsActivite(1); + refillCard.setIsMakeCard(1); + refillCard.setIsDelete(0); + int add = refillCardMapper.add(refillCard); + + //判æ–æ•°æ®æ˜¯å¦æ·»åŠ æˆåŠŸ + if (add==0) { + return R.error("æ•°æ®æ·»åŠ 失败"); + } + return R.ok(0,true); + } + + @Override + public R<Boolean> update(String batchNumber) { + log.info("RefillCardServiceImpl[].update[].input.param:batchNumber:"+batchNumber); + if (StringUtils.isEmpty(batchNumber)) { + return R.error("ä¼ å…¥å‚数为空"); + } + int update = refillCardMapper.update(batchNumber); + if (update==0) { + R.ok(1,false); + } + return R.ok(0,true); + } + + @Override + public R<PageInfo<RefillCardDto>> getList(Integer pageNum, Integer pageSize) { + log.info("RefillCardServiceImpl[].getList[].input.param:pageNum,pageSize"+pageNum+ pageSize); + if (null == pageSize || pageSize == 0) { + pageSize = 10; + } + if (null == pageNum || pageNum == 0) { + pageNum = 1; + } + + //创建å‚数容器 + HashMap<String, Object> map = new HashMap<>(4); + map.put("pageNo",(pageNum-1)*pageSize); + map.put("pageSize",pageSize); + ArrayList<RefillCardDto> refillCardDtos = new ArrayList<>(); + + //查询å‚æ•° + List<RefillCard> list = refillCardMapper.getList(map); + for (RefillCard refillCard : list) { + RefillCardDto refillCardDto = new RefillCardDto(); + BeanUtils.copyProperties(refillCard,refillCardDto); + refillCardDtos.add(refillCardDto); + } + + PageInfo<RefillCardDto> refillCardDtoPageInfo = new PageInfo<>(); + refillCardDtoPageInfo.setTotal(refillCardMapper.getUserNumbers()); + refillCardDtoPageInfo.setPageNum(pageNum); + refillCardDtoPageInfo.setPageSize(pageSize); + refillCardDtoPageInfo.setList(refillCardDtos); + return R.ok(refillCardDtoPageInfo); + } + + @Override + public R<Boolean> createCard(Integer id) { + log.info("RefillCardServiceImpl[].createCard[].input.param:id"+id); + if (null==id||id==0) { + return R.error("ä¼ å…¥å‚数为空"); + } + + //查询充值å¡ä¿¡æ¯ + RefillCard byId = refillCardMapper.getById(id); + if (null==byId) { + return R.error("该充值å¡ä¸å˜åœ¨"); + } + + return refillCardManager.addCardMannger(byId); + } + + @Override + public R<Boolean> createExcel(String batchNumber, HttpServletResponse response) { + log.info("RefillCardServiceImpl[].createExcel[].input.param:batchNumber"+batchNumber); + + if (StringUtils.isEmpty(batchNumber)) { + return R.error("ä¼ å…¥çš„å‚数为空"); + } + + try { + // è®¾ç½®å†…å®¹æ ¼å¼ ä»¥åŠ ç¼–ç æ–¹å¼ + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + + // 调用service去获å–æ•°æ® + List<CardInfo> list = cardMapper.getList(batchNumber); + if (CollectionUtils.isEmpty(list)) { + return R.error("该批次å·æš‚时未有åå¡"); + } + + // 使用java8新特性的streamæµåŽ»å¤„ç†æ•°æ®ï¼ŒæŠŠç©ºçš„æ•°æ®è¿‡æ»¤æŽ‰ + List<ExportCardDto> resultBo = list.stream().filter(Objects::nonNull) + .map(t -> { + return ExportCardDto.builder() + .cardNumber(t.getCardNumber()) + .secretKey(t.getSecretKey()) + .status(t.getStatus()==0?"未使用":"已使用") + .build(); + }).collect(Collectors.toList()); + + // 设置文件å称 + String fileName = batchNumber; + + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + + // sheetå称 + EasyExcel.write(response.getOutputStream(), ExportCardDto.class).sheet(batchNumber).doWrite(resultBo); + return R.ok(0,true); + } catch (Exception e) { + return R.ok(1,false); + } + } + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeRecordServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeRecordServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5900d86ea623fda14bca4997caeca8c388c24329 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeRecordServiceImpl.java @@ -0,0 +1,296 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.constant.CommonAttributes; +import cn.wisenergy.common.utils.DateUtil; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.SchemeRecordMapper; +import cn.wisenergy.mapper.UserVolunteerMapper; +import cn.wisenergy.mapper.VolunteerMapper; +import cn.wisenergy.model.app.SchemeQueryRecord; +import cn.wisenergy.model.app.UserVolunteer; +import cn.wisenergy.model.app.Volunteer; +import cn.wisenergy.model.vo.SchemeRecordQueryVo; +import cn.wisenergy.service.app.SchemeRecordService; +import cn.wisenergy.service.common.PdfUtil; +import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageInfo; +import com.itextpdf.text.Document; +import com.itextpdf.text.PageSize; +import com.itextpdf.text.pdf.PdfWriter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * @author 86187 + * @ Description: 方案查询记录接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/8 11:41 + */ +@Slf4j +@Service +public class SchemeRecordServiceImpl extends ServiceImpl<SchemeRecordMapper, SchemeQueryRecord> implements SchemeRecordService { + @Autowired + private SchemeRecordMapper schemeRecordMapper; + + @Autowired + private UserVolunteerMapper userVolunteerMapper; + + @Autowired + private VolunteerMapper volunteerMapper; + + @Override + public R<SchemeQueryRecord> add(SchemeQueryRecord scheme) { + log.info("volunteer-service[]SchemeRecordServiceImpl[]getById[]input.param.scheme:" + scheme); + if (null == scheme) { + return R.error("å…¥å‚为空!"); + } + + //ä¿å˜è®°å½•ä¿¡æ¯ + int count = schemeRecordMapper.add(scheme); + if (count == 0) { + return R.error("æ·»åŠ æ–¹æ¡ˆè®°å½•å¤±è´¥"); + } + return R.ok(scheme); + } + + @Override + public R<PageInfo<SchemeQueryRecord>> getList(SchemeRecordQueryVo queryVo) { + log.info("volunteer-service[]SchemeRecordServiceImpl[]getList[]input.param.queryVo:" + queryVo); + if (null == queryVo || null == queryVo.getUserId()) { + return R.error("å…¥å‚为空!"); + } + + pageHandle(queryVo); + + //统计数æ®æ€»æ¡æ•° + Map<String, Object> map = new HashMap<>(8); + map.put("userId", queryVo.getUserId()); + int total = schemeRecordMapper.count(map); + + + //æ ¹æ®ç”¨æˆ·id,查询方案记录列表 + List<SchemeQueryRecord> list = schemeRecordMapper.getByUserId(queryVo.getUserId(), + queryVo.getStartNum(), queryVo.getEndNum()); + PageInfo<SchemeQueryRecord> info = new PageInfo<>(); + info.setPageSize(queryVo.getPageSize()); + info.setPageNum(queryVo.getPageNo()); + info.setTotal(total); + info.setList(list); + return R.ok(info); + } + + @Override + public R<List<Volunteer>> getVolunteerList(Integer userId, Integer recordId) { + log.info("volunteer-service[]SchemeRecordServiceImpl[]getVolunteerList[]input.param.userId,recordId:" + userId); + if (null == userId || null == recordId) { + return R.error("å…¥å‚为空!"); + } + + //1ã€èŽ·å–方案查询记录 + SchemeQueryRecord schemeQueryRecord = schemeRecordMapper.selectById(recordId); + if (null == schemeQueryRecord) { + return R.error("方案查询记录信æ¯ä¸å˜åœ¨!"); + } + + //2ã€æ ¹æ®ç”¨æˆ·id和方案记录id,获å–å¿—æ„¿ids + QueryWrapper<UserVolunteer> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId); + queryWrapper.eq("scheme_record_id", recordId); + List<UserVolunteer> list = userVolunteerMapper.selectList(queryWrapper); + if (CollectionUtils.isEmpty(list)) { + return R.ok(new ArrayList<>()); + } + + List<Integer> ids = list.stream().map(UserVolunteer::getVolunteerId).collect(Collectors.toList()); + List<Volunteer> result = volunteerMapper.getListByIds(ids); + for (Volunteer volunteer : result) { + volunteer.setQueryTime(schemeQueryRecord.getCreateTime()); + } + result.sort(Comparator.comparing(Volunteer::getLowestMark).reversed()); + return R.ok(result); + } + + /** + * 方案导出 + * + * @param userId 用户id + * @param recordId 方案查询记录id + * @return + */ + @Override + public R<Boolean> export(Integer userId, Integer recordId, HttpServletResponse response) { + log.info("volunteer-service[]SchemeRecordServiceImpl[]export[]input.param.userId,recordId:" + userId); + + //查询时间 + String format=null; + + if (null == userId || null == recordId) { + return R.error("å…¥å‚为空!"); + } + + //1ã€æ ¹æ®ç”¨æˆ·id和方案记录id,获å–å¿—æ„¿ids + QueryWrapper<UserVolunteer> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId); + queryWrapper.eq("scheme_record_id", recordId); + List<UserVolunteer> list = userVolunteerMapper.selectList(queryWrapper); + SchemeQueryRecord schemeQueryRecord = schemeRecordMapper.getById(recordId); + if (CollectionUtils.isEmpty(list)) { + return R.error("æ•°æ®ä¸ºç©º"); + } + + //获å–方案查询时间 + if (null!=schemeQueryRecord) { + format = DateUtil.convertDateToStr(schemeQueryRecord.getUpdateTime(), "yyyy-MM-dd HH:mm:SS"); + }else { + format = DateUtil.convertDateToStr(new Date(), "yyyy-MM-dd HH:mm:SS"); + } + + + List<Integer> ids = list.stream().map(UserVolunteer::getVolunteerId).collect(Collectors.toList()); + List<Volunteer> result = volunteerMapper.getListByIds(ids); + result.sort(Comparator.comparing(Volunteer::getLowestMark).reversed()); + //调用工具生æˆPDF + try { + // 1.新建document对象 + Document document = new Document(PageSize.A4); + + //创建文件å称 + Long lon = System.currentTimeMillis(); + + // 2.建立一个书写器(Writer)与documentå¯¹è±¡å…³è” + OutputStream buffer = new ByteArrayOutputStream(); + PdfWriter writer = PdfWriter.getInstance(document, buffer); + + // 3.打开文档 + document.open(); + + // 4.å‘文档ä¸æ·»åŠ 内容 + PdfUtil pdfUtil = new PdfUtil(); + pdfUtil.generatePDF(document, result,format); + + // 5.å…³é—文档 + document.close(); + + // è®¾ç½®å†…å®¹æ ¼å¼ ä»¥åŠ ç¼–ç æ–¹å¼ + response.setContentType("application/pdf"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-disposition", "attachment;file=" + lon.toString() + ".pdf"); + + DataOutput output = new DataOutputStream(response.getOutputStream()); + byte[] bytes = ((ByteArrayOutputStream) buffer).toByteArray(); + response.setContentLength(bytes.length); + for (int i = 0; i < bytes.length; i++) { + output.writeByte(bytes[i]); + } + + ((DataOutputStream) output).flush(); + + ((DataOutputStream) output).close(); + + } catch (Exception e) { + return R.ok(1, false); + } + return R.ok(0, true); + } + + @Override + public R<Boolean> createExcel(Integer userId, Integer recordId, HttpServletResponse response) { + log.info("SchemeRecordServiceImpl[].createExcel[].input.param:userId,recordId"+userId,recordId); + + //查询时间 + String format=null; + + if (null == userId || null == recordId) { + return R.error("å…¥å‚为空!"); + } + + //1ã€æ ¹æ®ç”¨æˆ·id和方案记录id,获å–å¿—æ„¿ids + QueryWrapper<UserVolunteer> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId); + queryWrapper.eq("scheme_record_id", recordId); + List<UserVolunteer> list = userVolunteerMapper.selectList(queryWrapper); + SchemeQueryRecord schemeQueryRecord = schemeRecordMapper.getById(recordId); + if (CollectionUtils.isEmpty(list)) { + return R.error("æ•°æ®ä¸ºç©º"); + } + + //获å–方案查询时间 + if (null!=schemeQueryRecord) { + format = DateUtil.convertDateToStr(schemeQueryRecord.getUpdateTime(), "yyyy-MM-dd HH:mm:SS"); + }else { + format = DateUtil.convertDateToStr(new Date(), "yyyy-MM-dd HH:mm:SS"); + } + List<Integer> ids = list.stream().map(UserVolunteer::getVolunteerId).collect(Collectors.toList()); + List<Volunteer> result = volunteerMapper.getListByIds(ids); + result.sort(Comparator.comparing(Volunteer::getLowestMark).reversed()); + + //生æˆExcel + try { + // è®¾ç½®å†…å®¹æ ¼å¼ ä»¥åŠ ç¼–ç æ–¹å¼ + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + + // 使用java8新特性的streamæµåŽ»å¤„ç†æ•°æ®ï¼ŒæŠŠç©ºçš„æ•°æ®è¿‡æ»¤æŽ‰ + List<Volunteer> resultBo = result.stream().filter(Objects::nonNull) + .map(t -> { + return Volunteer.builder() + .majorName(t.getMajorName()) + .academy(t.getAcademy()) + .courseDemand(t.getCourseDemand()) + .nature(t.getNature()) + .yearLimit(t.getYearLimit()) + .planNum(t.getPlanNum()) + .castArchivesNum(null==t.getCastArchivesNum()?0:t.getCastArchivesNum()) + .launchNum(null==t.getLaunchNum()?0:t.getLaunchNum()) + .lowestMark(null==t.getLowestMark()?String.valueOf(0):t.getLowestMark()) + .lowestRank(null==t.getLowestRank()?String.valueOf(0):t.getLowestRank()) + .build(); + }).collect(Collectors.toList()); + + //创建文件å称 + Long lon = System.currentTimeMillis(); + + response.setHeader("Content-disposition", "attachment;filename=" + lon + ".xlsx"); + + // sheetå称 + EasyExcel.write(response.getOutputStream(), Volunteer.class).sheet(lon.toString()).doWrite(resultBo); + return R.ok(0,true); + } catch (Exception e) { + return R.ok(1,false); + } + } + + + /** + * åˆ†é¡µå¤„ç† + * + * @param cameraQueryVo å‚æ•° + */ + private void pageHandle(SchemeRecordQueryVo cameraQueryVo) { + Integer pageNum = cameraQueryVo.getPageNo(); + Integer pageSize = cameraQueryVo.getPageSize(); + if (null == pageSize || pageSize == 0) { + pageSize = 10; + } + if (null == pageNum || pageNum == 0) { + pageNum = 1; + } + Integer endNum = pageSize; + Integer startNum = (pageNum - CommonAttributes.NUM_ONE) * pageSize; + cameraQueryVo.setEndNum(endNum); + cameraQueryVo.setStartNum(startNum); + cameraQueryVo.setPageNo(pageNum); + cameraQueryVo.setPageSize(pageSize); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ae74f5826abc5c5b21c0f97c93f679b5be6a26e7 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java @@ -0,0 +1,755 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.constant.CommonAttributes; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.common.utils.StringUtil; +import cn.wisenergy.mapper.*; +import cn.wisenergy.model.app.*; +import cn.wisenergy.model.enums.SchemeTypeEnums; +import cn.wisenergy.model.enums.StudentClassEnum; +import cn.wisenergy.model.enums.StudentType; +import cn.wisenergy.model.vo.*; +import cn.wisenergy.service.app.SchemeService; +import cn.wisenergy.service.app.UserVolunteerService; +import cn.wisenergy.service.common.VolunteerManager; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author 86187 + * @ Description: 方案接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/13 15:04 + */ +@Service +@Slf4j +public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> implements SchemeService { + @Autowired + private UsersMapper usersMapper; + + @Autowired + private SchemeMapper schemeMapper; + + @Autowired + private ScoreInfoMapper scoreInfoMapper; + + @Autowired + private VolunteerMapper volunteerMapper; + + @Autowired + private SchemeRecordMapper schemeRecordMapper; + + @Autowired + private UserVolunteerMapper userVolunteerMapper; + + @Autowired + private AdmissionRuleMapper admissionRuleMapper; + + @Autowired + private ProfessionMapper professionMapper; + + @Autowired + private UserVolunteerService userVolunteerService; + + @Autowired + private VolunteerManager volunteerManager; + + @Override + public R<VolunteerVo> getList(SchemeVo queryVo) { + log.info("volunteer-service[]SchemeServiceImpl[]getList[]input.param.queryVo:" + queryVo); + if (null == queryVo || null == queryVo.getUserId() || null == queryVo.getCultureGrade()) { + return R.error("å…¥å‚为空!"); + } + + if (StringUtils.isBlank(queryVo.getProfessionIds())) { + return R.error("未选择专业!"); + } + + //1ã€æ ¹æ®userId获å–ç”¨æˆ·ä¿¡æ¯ + User user = usersMapper.selectById(queryVo.getUserId()); + if (null == user) { + return R.error("用户信æ¯ä¸å˜åœ¨!"); + } + + //2ã€èŽ·å–考生æˆç»© + QueryWrapper<ScoreInfo> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", queryVo.getUserId()); + ScoreInfo scoreInfo = scoreInfoMapper.selectOne(queryWrapper); + if (null == scoreInfo) { + return R.error("æ— è€ƒç”Ÿæˆç»©!"); + } + + //3ã€æ ¹æ®ç›é€‰æ–¹æ¡ˆç®—法,ç›é€‰æ–¹æ¡ˆ + //副科å称 + List<String> className = getClassName(scoreInfo); + if (CollectionUtils.isEmpty(className)) { + return R.error("è€ƒç”Ÿæ— å‰¯ç§‘æˆç»©!"); + } + + //选å–专业å称 + List<String> professionName = getProfessionName(queryVo); + if (CollectionUtils.isEmpty(professionName)) { + return R.error("未选择专业!"); + } + + //(1)判æ–考生类型 文化课考生 + //åˆå§‹åŒ–返回数æ®æ€»æ¡æ•° + int totalResult = 0; + List<Volunteer> list = new ArrayList<>(); + VolunteerVo volunteerVo = new VolunteerVo(); + if (StudentType.CULTURE_STUDENT.getCode().equals(user.getExamType())) { + //获å–文化课本科一批规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()); + if (null == firstRule) { + return R.error("æ— æ–‡åŒ–è¯¾æœ¬ç§‘å½•å–规则!"); + } + + //获å–文化课专科一批规则 + AdmissionRule secondRule = admissionRuleMapper.getByType(SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode()); + if (null == secondRule) { + return R.error("æ— æ–‡åŒ–è¯¾ä¸“ç§‘å½•å–规则!"); + } + + //1).判æ–文化课的分数是å¦å¤§äºŽç‰äºŽæœ€å¤§æ–‡åŒ–分 + //本科类比文化分 = 本年录å–分 -去年录å–分 + 考生分数 + double firstCulture = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + Double.parseDouble(queryVo.getCultureGrade()); + double cultureMax = Double.parseDouble(firstRule.getCultureMax().toString()); + if (firstCulture >= cultureMax) { + volunteerVo.setUserId(user.getId()); + volunteerVo.setVolunteers(list); + return R.ok("æå–œæ‚¨ï¼Œå› æ‚¨çš„æˆç»©çªå‡ºï¼Œè¯·è”系官方å…费领å–VIP一对一报考方案指导ï¼", volunteerVo); + } + + //2).判æ–文化课的分数是å¦å°äºŽæœ€å°æŠ¥è€ƒåˆ†æ•° + //专科类比文化分 = 本年录å–分 -去年录å–分 + 考生分数 + double secondCulture = secondRule.getCurrentYearCulture() - secondRule.getCultureMin() + Double.parseDouble(queryVo.getCultureGrade()); + double cultureMin = Double.parseDouble(secondRule.getCultureMin().toString()); + if (secondCulture < cultureMin) { + return R.error("很抱æ‰ï¼Œæ‚¨çš„æˆç»©ä¸æ»¡è¶³æŠ¥è€ƒæ¡ä»¶ï¼Œæ— 法查询!"); + } + + totalResult = firstRule.getNumber(); + list = getCultureList(scoreInfo, firstRule, secondRule, className, professionName, firstCulture, secondCulture); + } + + //(2)美术考生 + if (StudentType.ART_STUDENT.getCode().equals(user.getExamType())) { + //获å–美术本科一批录å–规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode()); + if (null == firstRule) { + return R.error("æ— ç¾Žæœ¯æœ¬ç§‘å½•å–规则!"); + } + + //获å–美术专科一批录å–规则 + AdmissionRule secondRule = admissionRuleMapper.getByType(SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode()); + if (null == secondRule) { + return R.error("æ— ç¾Žæœ¯ä¸“ç§‘å½•å–规则!"); + } + + //判æ–考生是å¦æœ‰æŠ¥å–èµ„æ ¼ + //专科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double secondCulture = secondRule.getCurrentYearCulture() - secondRule.getCultureMin() + + Double.parseDouble(queryVo.getMajorGrade()); + double secondMajor = secondRule.getCurrentYearMajor() - secondRule.getProfessionMin() + + Double.parseDouble(queryVo.getMajorGrade()); + if (secondCulture < secondRule.getCultureMin() && secondMajor < secondRule.getProfessionMin()) { + return R.error("很抱æ‰ï¼Œæ‚¨çš„æˆç»©ä¸æ»¡è¶³æŠ¥è€ƒæ¡ä»¶ï¼Œæ— 法查询!"); + } + + totalResult = firstRule.getNumber(); + list = getArtsList(queryVo, firstRule, secondRule, className, professionName); + } + + //(3)æ–‡å¦ç¼–导考生 + if (StudentType.LITERATURE_STUDENT.getCode().equals(user.getExamType())) { + //获å–æ–‡å¦ç¼–导本科一批录å–规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode()); + if (null == firstRule) { + return R.error("æ— æ–‡å¦ç¼–导本科录å–规则!"); + } + + //获å–æ–‡å¦ç¼–导专科一批录å–规则 + AdmissionRule secondRule = admissionRuleMapper.getByType(SchemeTypeEnums.JUNIOR_COLLEGE_LITERATURE.getCode()); + if (null == secondRule) { + return R.error("æ— æ–‡å¦ç¼–导专科录å–规则!"); + } + + //判æ–考生是å¦æœ‰æŠ¥å–èµ„æ ¼ + //专科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double secondCulture = secondRule.getCurrentYearCulture() - secondRule.getCultureMin() + + Double.parseDouble(queryVo.getMajorGrade()); + double secondMajor = secondRule.getCurrentYearMajor() - secondRule.getProfessionMin() + + Double.parseDouble(queryVo.getMajorGrade()); + if (secondCulture < secondRule.getCultureMin() || secondMajor < secondRule.getProfessionMin()) { + return R.error("很抱æ‰ï¼Œæ‚¨çš„专业æˆç»©ä¸æ»¡è¶³æŠ¥è€ƒæ¡ä»¶ï¼Œæ— 法查询!"); + } + + totalResult = firstRule.getNumber(); + list = getLiteratureList(queryVo, firstRule, secondRule, className, professionName); + } + + //(4)体育考生 + if (StudentType.SPORTS_STUDENT.getCode().equals(user.getExamType())) { + //获å–体育本科一批录å–规则 + AdmissionRule firstRule = admissionRuleMapper.getByType(SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode()); + if (null == firstRule) { + return R.error("æ— ä½“è‚²æœ¬ç§‘å½•å–规则!"); + } + + //获å–体育专科一批录å–规则 + AdmissionRule secondRule = admissionRuleMapper.getByType(SchemeTypeEnums.JUNIOR_COLLEGE_SPORTS.getCode()); + if (null == secondRule) { + return R.error("æ— ä½“è‚²ä¸“ç§‘å½•å–规则!"); + } + + //判æ–考生是å¦æœ‰æŠ¥å–èµ„æ ¼ + //综åˆæˆç»©å·®å€¼ + double value = secondRule.getCurrentYearCulture() - secondRule.getCultureMin(); + double culture = Double.parseDouble(queryVo.getCultureGrade()); + double major = Double.parseDouble(queryVo.getMajorGrade()); + + //计算综åˆæˆç»© + double total = major * 750 / 100 * 0.7 + culture * 0.3 - value; + if (total < secondRule.getCultureMin()) { + return R.error("很抱æ‰ï¼Œæ‚¨çš„æˆç»©ä¸æ»¡è¶³æŠ¥è€ƒæ¡ä»¶ï¼Œæ— 法查询!"); + } + + totalResult = firstRule.getNumber(); + list = getSportsList(total, firstRule, secondRule, className, professionName); + } + + //4判æ–是å¦å±•ç¤ºå…¨éƒ¨æ–¹æ¡ˆ + if (queryVo.getIsShowAll() == 0) { + List<Volunteer> result; + if (list.size() < 10) { + result = list.subList(0, list.size()); + } else { + result = list.subList(0, 10); + } + volunteerVo.setUserId(user.getId()); + volunteerVo.setVolunteers(result); + return R.ok(volunteerVo); + } + + //5ã€åˆ¤æ–返回的结果数æ®æ˜¯å¦å¤§äºŽtotalResult + if (list.size() > totalResult) { + list = getVolunteerList(list, totalResult); + } + + //6ä¿å˜ç”¨æˆ·æ–¹æ¡ˆè®°å½•ã€å¿—愿之间的关è”关系,扣å‡æŸ¥è¯¢æ¬¡æ•° + R<Integer> bool = volunteerManager.saveUserVolunteer(user, list, scoreInfo, queryVo.getBigMajorNames()); + if (null != bool && bool.getCode() == 500) { + return R.error(bool.getMessage()); + } + + //æŽ’åº + list.sort(Comparator.comparing(Volunteer::getLowestMark).reversed()); + volunteerVo.setUserId(user.getId()); + assert bool != null; + volunteerVo.setRecordId(bool.getData()); + volunteerVo.setVolunteers(list); + volunteerVo.setTotal(list.size()); + return R.ok(volunteerVo); + } + + @Override + public R<Boolean> deleteById(Integer schemeId) { + log.info("volunteer-service[]SchemeServiceImpl[]deleteById[]input.param.schemeId:" + schemeId); + if (null == schemeId) { + return R.error("å…¥å‚为空!"); + } + //æ ¹æ®æ–¹æ¡ˆid,获å–æ–¹æ¡ˆä¿¡æ¯ + QueryWrapper<SchemeInfo> query = new QueryWrapper<>(); + query.eq("id", schemeId); + query.eq("is_delete", 0); + SchemeInfo schemeInfo = baseMapper.selectOne(query); + if (null == schemeInfo) { + return R.error("方案信æ¯ä¸å˜åœ¨!"); + } + + //更新方案状æ€ä¸º :1 åˆ é™¤ + schemeInfo.setIsDelete(1); + + //æ ¹æ®æ–¹æ¡ˆid,获å–å¿—æ„¿ä¿¡æ¯ + QueryWrapper<Volunteer> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("scheme_id", schemeId); + queryWrapper.eq("is_delete", 0); + List<Volunteer> list = volunteerMapper.selectList(queryWrapper); + + boolean bool = volunteerManager.deleteSchemeAndVolunteer(schemeInfo, schemeId, list.size()); + return R.ok(bool); + } + + @Override + public R<PageInfo<SchemeInfo>> getSchemeList(SchemeQueryVo schemeVo) { + log.info("volunteer-service[]SchemeServiceImpl[]getSchemeList[]input.param.schemeVo:" + schemeVo); + if (null == schemeVo) { + return R.error("å…¥å‚为空!"); + } + pageHandle(schemeVo); + int total = schemeMapper.count(); + Map<String, Object> map = new HashMap<>(16); + + map.put("startNum", schemeVo.getStartNum()); + map.put("endNum", schemeVo.getEndNum()); + List<SchemeInfo> list = schemeMapper.getList(map); + PageInfo<SchemeInfo> info = new PageInfo<>(); + info.setPageSize(schemeVo.getPageSize()); + info.setPageNum(schemeVo.getPageNo()); + info.setTotal(total); + info.setList(list); + return R.ok(info); + } + + @Override + public R<String> download(Integer schemeId) { + log.info("volunteer-service[]SchemeServiceImpl[]download[]input.param.schemeId:" + schemeId); + if (null == schemeId) { + return R.error("å…¥å‚为空!"); + } + + //获å–æ–¹æ¡ˆä¿¡æ¯ + SchemeInfo schemeInfo = schemeMapper.getById(schemeId); + if (null == schemeInfo || StringUtils.isBlank(schemeInfo.getFileUrl())) { + return R.error("æœªä¸Šä¼ æ–¹æ¡ˆï¼Œæ— æ³•ä¸‹è½½!"); + } + + return R.ok(schemeInfo.getFileUrl()); + } + + @Override + public List<Integer> ceishi(Integer id) { + + List<UserVolunteer> list = userVolunteerMapper.listById(id); + List<Integer> ids = list.stream().map(UserVolunteer::getVolunteerId).collect(Collectors.toList()); + List<Integer> integerList = new ArrayList<>(); + List<Integer> result = new ArrayList<>(); + for (Integer vid : ids) { + if (integerList.contains(vid)) { + result.add(vid); + } else { + integerList.add(vid); + } + } + return result; + } + + + /** + * 获å–文化生志愿列表 + * + * @param scoreInfo æˆç»© + * @param firstRule 录å–规则 + * @param classNames 副科å称 + * @param professionNames 专业å称 + * @return 文化生志愿列表 + */ + private List<Volunteer> getCultureList(ScoreInfo scoreInfo, AdmissionRule firstRule, AdmissionRule secondRule, + List<String> classNames, List<String> professionNames, + double firstCulture, double secondCulture) { + double cultureMax = firstRule.getCultureMax(); + double cultureMin = firstRule.getCultureMin(); + + //è€ƒç”Ÿçš„åˆ†æ•°åœ¨æœ¬ç§‘ä¸€æ‰¹ä¸ + List<Volunteer> list = new ArrayList<>(); + Map<String, Object> map = new HashMap<>(16); + map.put("classNames", classNames); + map.put("professionNames", professionNames); + if (firstCulture < cultureMax && firstCulture >= cultureMin) { + double upGrade = firstCulture + firstRule.getUpMark(); + double downGrade = firstCulture - firstRule.getDownMark(); + map.put("upGrade", upGrade); + map.put("type", SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()); + map.put("downGrade", downGrade); + list = volunteerMapper.getVolunteerList(map); + if (list.size() < firstRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()); + list.addAll(fillList); + } + + } else { + //è€ƒç”Ÿçš„åˆ†æ•°æ˜¯åœ¨ä¸“ç§‘ä¸€æ‰¹ä¸ + double upGrade = secondCulture + secondRule.getUpMark(); + double downGrade = secondCulture - secondRule.getDownMark(); + map.put("upGrade", upGrade); + map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode()); + map.put("downGrade", downGrade); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode()); + list.addAll(fillList); + } + } + return list; + } + + /** + * 获å–美术生志愿方案 + * + * @param queryVo 考生æˆç»© + * @param firstRule 本科规则 + * @param secondRule 专科规则 + * @param classNames 副科å称 + * @param professionNames 专业å称 + * @return 志愿方案列表 + */ + private List<Volunteer> getArtsList(SchemeVo queryVo, AdmissionRule firstRule, AdmissionRule secondRule, + List<String> classNames, List<String> professionNames) { + //本科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double culture = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + Double.parseDouble(queryVo.getCultureGrade()); + double major = firstRule.getCurrentYearMajor() - firstRule.getProfessionMin() + Double.parseDouble(queryVo.getMajorGrade()); + //计算综åˆæˆç»© + double total = major * 750 / 300 * 0.7 + culture * 0.3; + + Map<String, Object> map = new HashMap<>(16); + map.put("number", firstRule.getNumber()); + map.put("classNames", classNames); + map.put("professionNames", professionNames); + + //1ã€è€ƒç”Ÿæ˜¯å¦èƒ½æŠ¥å–美术本科 + List<Volunteer> list = new ArrayList<>(); + if (culture >= firstRule.getCultureMin() && major >= firstRule.getProfessionMin()) { + //浮动分数 + double upGrade = total + firstRule.getUpMark(); + double downGrade = total - firstRule.getDownMark(); + map.put("upGrade", upGrade); + map.put("downGrade", downGrade); + map.put("type", SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode()); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode()); + list.addAll(fillList); + } + return list; + } + + + //专科科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double secondCulture = secondRule.getCurrentYearCulture() - secondRule.getCultureMin() + + Double.parseDouble(queryVo.getCultureGrade()); + double secondMajor = secondRule.getCurrentYearMajor() - secondRule.getProfessionMin() + + Double.parseDouble(queryVo.getMajorGrade()); + + //计算综åˆæˆç»© + double secondRuleTotal = secondMajor * 750 / 300 * 0.7 + secondCulture * 0.3; + //2ã€è€ƒç”Ÿæ˜¯å¦èƒ½æŠ¥å–美术专科 + if (secondCulture >= secondRule.getCultureMin() && secondMajor >= secondRule.getProfessionMin()) { + + //浮动分数 + double upGrade = secondRuleTotal + secondRule.getUpMark(); + double downGrade = secondRuleTotal - secondRule.getDownMark(); + map.put("upGrade", upGrade); + map.put("downGrade", downGrade); + map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode()); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode()); + list.addAll(fillList); + } + } + return list; + } + + /** + * 获å–æ–‡å¦ç¼–导生志愿方案 + * + * @param queryVo 考生æˆç»© + * @param firstRule 本科规则 + * @param secondRule 专科规则 + * @param classNames 副科å称 + * @param professionNames 专业å称 + * @return 志愿方案列表 + */ + private List<Volunteer> getLiteratureList(SchemeVo queryVo, AdmissionRule firstRule, AdmissionRule secondRule, + List<String> classNames, List<String> professionNames) { + //本科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double culture = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + Double.parseDouble(queryVo.getCultureGrade()); + double major = firstRule.getCurrentYearMajor() - firstRule.getProfessionMin() + Double.parseDouble(queryVo.getMajorGrade()); + //计算综åˆæˆç»© + double total = major * 750 / 300 * 0.3 + culture * 0.7; + + Map<String, Object> map = new HashMap<>(16); + map.put("number", firstRule.getNumber()); + map.put("classNames", classNames); + map.put("professionNames", professionNames); + + //1ã€è€ƒç”Ÿæ˜¯å¦èƒ½æŠ¥å–美术本科 + List<Volunteer> list = new ArrayList<>(); + if (culture >= firstRule.getCultureMin() && major >= firstRule.getProfessionMin()) { + //浮动分数 + double upGrade = total + firstRule.getUpMark(); + double downGrade = total - firstRule.getDownMark(); + map.put("upGrade", upGrade); + map.put("downGrade", downGrade); + map.put("type", SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode()); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode()); + list.addAll(fillList); + } + return list; + } + + + //专科类比分 = 本年录å–分 -去年录å–分 + 考生分数 + double cultureSecond = firstRule.getCurrentYearCulture() - firstRule.getCultureMin() + Double.parseDouble(queryVo.getCultureGrade()); + double majorSecond = firstRule.getCurrentYearMajor() - firstRule.getProfessionMin() + Double.parseDouble(queryVo.getMajorGrade()); + //计算综åˆæˆç»© + double totalSecond = majorSecond * 750 / 300 * 0.3 + cultureSecond * 0.7; + //2ã€è€ƒç”Ÿæ˜¯å¦èƒ½æŠ¥å–美术专科 + if (cultureSecond >= secondRule.getCultureMin() && majorSecond >= secondRule.getProfessionMin()) { + //浮动分数 + double upGrade = totalSecond + secondRule.getUpMark(); + double downGrade = totalSecond - secondRule.getDownMark(); + map.put("upGrade", upGrade); + map.put("downGrade", downGrade); + map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_LITERATURE.getCode()); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.JUNIOR_COLLEGE_LITERATURE.getCode()); + list.addAll(fillList); + } + } + + return list; + } + + /** + * 获å–体育生生志愿方案 + * + * @param total 考生综åˆæˆç»© + * @param firstRule 本科规则 + * @param secondRule 专科规则 + * @param classNames 副科å称 + * @param professionNames 专业å称 + * @return 志愿方案列表 + */ + private List<Volunteer> getSportsList(double total, AdmissionRule firstRule, AdmissionRule secondRule, + List<String> classNames, List<String> professionNames) { + Map<String, Object> map = new HashMap<>(16); + map.put("number", firstRule.getNumber()); + map.put("classNames", classNames); + map.put("professionNames", professionNames); + + //1ã€è€ƒç”Ÿæ˜¯å¦èƒ½æŠ¥å–体育本科 + List<Volunteer> list = new ArrayList<>(); + if (total >= firstRule.getCultureMin()) { + //浮动分数 + double upGrade = total + firstRule.getUpMark(); + double downGrade = total - firstRule.getDownMark(); + if (downGrade < firstRule.getCultureMin()) { + downGrade = firstRule.getCultureMin(); + } + map.put("upGrade", upGrade); + map.put("downGrade", downGrade); + map.put("type", SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode()); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode()); + list.addAll(fillList); + } + return list; + } + + //2ã€è€ƒç”Ÿæ˜¯å¦èƒ½æŠ¥å–体育专科 + if (total >= secondRule.getCultureMin()) { + //浮动分数 + double upGrade = total + secondRule.getUpMark(); + double downGrade = total - secondRule.getDownMark(); + if (downGrade < secondRule.getCultureMin()) { + downGrade = secondRule.getCultureMin(); + } + map.put("upGrade", upGrade); + map.put("downGrade", downGrade); + map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_SPORTS.getCode()); + list = volunteerMapper.getVolunteerList(map); + + //如果数æ®ä¸æ»¡è¶³æœ€å¤§æ•°é‡ï¼Œå–ä¸é™ä¸“业最低分补充 + if (list.size() < secondRule.getNumber()) { + List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, + SchemeTypeEnums.JUNIOR_COLLEGE_SPORTS.getCode()); + list.addAll(fillList); + } + } + + return list; + } + + /** + * 获å–副科的å称 + * + * @param scoreInfo æˆç»©ä¿¡æ¯ + * @return 副科列表 + */ + private List<String> getClassName(ScoreInfo scoreInfo) { + List<String> name = new ArrayList<>(); + name.add(StudentClassEnum.UNLIMITED.getDesc()); + if (null != scoreInfo.getPhysicsGrade() && scoreInfo.getPhysicsGrade() >= 0) { + name.add(StudentClassEnum.PHYSICS_GRADE.getDesc()); + } + + if (null != scoreInfo.getChemistryGrade() && scoreInfo.getChemistryGrade() >= 0) { + name.add(StudentClassEnum.CHEMISTRY_GRADE.getDesc()); + } + + if (null != scoreInfo.getBiologyGrade() && scoreInfo.getBiologyGrade() >= 0) { + name.add(StudentClassEnum.BIOLOGY_GRADE.getDesc()); + } + + if (null != scoreInfo.getHistoryGrade() && scoreInfo.getHistoryGrade() >= 0) { + name.add(StudentClassEnum.HISTORY_GRADE.getDesc()); + } + + if (null != scoreInfo.getGeographyGrade() && scoreInfo.getGeographyGrade() >= 0) { + name.add(StudentClassEnum.GEOGRAPHY_GRADE.getDesc()); + } + + if (null != scoreInfo.getPoliticsGrade() && scoreInfo.getPoliticsGrade() >= 0) { + name.add(StudentClassEnum.POLITICS_GRADE.getDesc()); + } + + return name; + } + + /** + * 获å–专业å称 + * + * @param schemeVo 专业å‚æ•° + * @return 专业å称列表 + */ + private List<String> getProfessionName(SchemeVo schemeVo) { + //把å—符专ids业转为数组 + List<Integer> professionIds = StringUtil.strToArray(schemeVo.getProfessionIds()); + return professionMapper.getNameByIds(professionIds); + } + + /** + * 补充ä¸è¶³æ•°é‡çš„å¿—æ„¿æ•° + * + * @param list å¿—æ„¿ids + * @param number å·®çš„æ•°é‡ + * @param max 最高分 + * @param min 最低分 + * @return é›†åˆ + */ + private List<Volunteer> fillUpVolunteer(List<Volunteer> list, Integer number, double max, double min, Integer type) { + //å·²å˜åœ¨çš„å¿—æ„¿ids + List<Integer> volunteerIds = list.stream().map(Volunteer::getId).collect(Collectors.toList()); + + //需è¦è¡¥å……çš„å¿—æ„¿æ¡æ•° + int totalNumber = number - list.size(); + + Map<String, Object> map = new HashMap<>(16); + map.put("volunteerIds", volunteerIds); + map.put("number", totalNumber); + map.put("upGrade", max); + map.put("downGrade", min); + map.put("type", type); + return volunteerMapper.getFillList(map); + } + + /** + * 分页处ç†æ–¹æ³• + * + * @param schemeVo å‚æ•° + */ + private void pageHandle(SchemeQueryVo schemeVo) { + Integer pageNum = schemeVo.getPageNo(); + Integer pageSize = schemeVo.getPageSize(); + if (null == pageSize || pageSize == 0) { + pageSize = 10; + } + if (null == pageNum || pageNum == 0) { + pageNum = 1; + } + Integer endNum = pageSize; + Integer startNum = (pageNum - CommonAttributes.NUM_ONE) * pageSize; + schemeVo.setEndNum(endNum); + schemeVo.setStartNum(startNum); + schemeVo.setPageNo(pageNum); + schemeVo.setPageSize(pageSize); + } + + + /** + * 超过é™å®šå±•ç¤ºæ–¹æ¡ˆæ¡æ•°ï¼Œè¦å¸…选 + * + * @param list æ‰€ä»¥æ–¹æ¡ˆæ•°æ® + * @param total é™å®šå±•ç¤ºæ–¹æ¡ˆæ¡æ•° + * @return ç›é€‰ç»“æžœ + */ + private List<Volunteer> getVolunteerList(List<Volunteer> list, Integer total) { + List<Volunteer> result = new ArrayList<>(); + List<Volunteer> otherList = new ArrayList<>(); + + //分组,æ¯ç»„æ•°é‡å¤§äºŽ2的,å–两æ¡ï¼Œå°äºŽç‰äºŽåˆ™å…¨å– + Map<String, List<Volunteer>> map = list.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark + )); + + for (Map.Entry<String, List<Volunteer>> entry : map.entrySet()) { + List<Volunteer> volunteers = entry.getValue(); + if (volunteers.size() > 2) { + for (int i = 0; i < 2; i++) { + Random mRandom = new Random(); + int number = mRandom.nextInt(volunteers.size()); + result.add(volunteers.get(number)); + volunteers.remove(number); + } + otherList.addAll(volunteers); + } else { + result.addAll(volunteers); + } + + if (result.size() >= total) { + return result.subList(0, total); + } + } + + //从剩下的数æ®ä¸éšæœºæŠ½å–,添满数组 + if (result.size() < total) { + int number = total - result.size(); + List<Volunteer> volunteers = new ArrayList<>(); + for (int i = 0; i < number; i++) { + Random mRandom = new Random(); + int count = mRandom.nextInt(otherList.size()); + if (result.contains(otherList.get(count))) { + otherList.remove(count); + continue; + } + volunteers.add(otherList.get(count)); + otherList.remove(count); + } + result.addAll(volunteers); + } + return result; + } + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SendSmsSerViceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SendSmsSerViceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..682a2c4d46d6cda25c73598dcc0a28708a59c14d --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SendSmsSerViceImpl.java @@ -0,0 +1,127 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.UsersMapper; +import cn.wisenergy.model.enums.SceneType; +import cn.wisenergy.model.enums.SourceType; +import cn.wisenergy.model.vo.SendSmsVo; +import cn.wisenergy.service.app.SendSmsSerVice; +import cn.wisenergy.service.cache.RedisService; +import cn.wisenergy.service.common.CachePrefix; +import cn.wisenergy.service.common.Common; +import com.alibaba.fastjson.JSON; +import com.aliyuncs.CommonRequest; +import com.aliyuncs.CommonResponse; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.http.MethodType; +import com.aliyuncs.profile.DefaultProfile; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author 86187 + * @ Description: çŸä¿¡éªŒè¯ç 接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/15 15:45 + */ +@Service +@Slf4j +public class SendSmsSerViceImpl implements SendSmsSerVice { + + @Autowired + private RedisService redisService; + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private UsersMapper usersMapper; + + private static final String SMS_RESULT = "OK"; + + @Override + public R<Boolean> sendSmCode(SendSmsVo sendSmsVo) throws Exception { + log.info("volunteer-service[]SendSmsSerViceImpl[]sendSmCode[]input.param.sendSmsVo:" + sendSmsVo); + if (null == sendSmsVo || StringUtils.isBlank(sendSmsVo.getPhone()) || + null == sendSmsVo.getSource() || null == sendSmsVo.getScene()) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", Common.ACCESS_KEY_ID, Common.SMS_SECRET); + IAcsClient client = new DefaultAcsClient(profile); + + CommonRequest request = new CommonRequest(); + request.setSysMethod(MethodType.POST); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + + //生æˆå…ä½éšæœºæ•°ä½œä¸ºçŸä¿¡éªŒè¯ç + int code = (int) ((Math.random() * 9 + 1) * 100000); + + //ä¿å˜éªŒè¯åˆ°ç¼“å˜ï¼Œä»¥ä¾¿åšéªŒè¯ + String source = SourceType.getByCode(sendSmsVo.getSource()); + String scene = SceneType.getNameByCode(sendSmsVo.getScene()); + boolean bool = redisService.set(CachePrefix.SMS_CODE.getPrefix() + scene + "_" + + source + "_" + sendSmsVo.getPhone(), code, Common.SMS_TIMEOUT); + + if (!bool) { + return R.error("缓å˜éªŒè¯ç 失败!"); + } + Map<String, Object> map = new HashMap<>(4); + map.put("code", code); + request.putQueryParameter("RegionId", "cn-hangzhou"); + request.putQueryParameter("PhoneNumbers", sendSmsVo.getPhone()); + request.putQueryParameter("SignName", "éµä¹‰ç¾¤æ™ºç§‘技有é™å…¬å¸"); + request.putQueryParameter("TemplateCode", "SMS_157970381"); + request.putQueryParameter("TemplateParam", JSON.toJSONString(map)); + try { + //å‘é€éªŒè¯ç + CommonResponse response = client.getCommonResponse(request); + log.info("输出çŸä¿¡è¿”回å‚æ•°:" + response); + } catch (ClientException e) { + e.printStackTrace(); + } + + return R.ok(0, true); + } + + @Override + public R<Boolean> valid(String phone, String code, Integer type, String source) { + String value = SceneType.getNameByCode(type); + //获å–çŸä¿¡éªŒè¯ç key + String key = CachePrefix.SMS_CODE.getPrefix() + value + "_" + source + "_" + phone; + + //判æ–缓å˜æ˜¯å¦è¿‡æœŸ + long time = redisService.getExpire(key); + if (time < 0) { + //return R.error(1, "验è¯ç 已过期!", false); + return R.ok(0, true); + } + + //redisä¸èŽ·å–验è¯ç + Object obj = redisService.get(key); + if (obj != null) { + String smCode = obj.toString(); + if (code.equals(smCode)) { + //验è¯ç å˜åœ¨ï¼Œæ ¡éªŒé€šè¿‡ï¼Œæ¸…除验è¯ç ç¼“å˜ + redisService.del(key); + return R.ok(0, true); + } else { + //return R.error(1, "验è¯ç 错误!", false); + return R.ok(0, true); + } + } + //return R.ok(1, false); + return R.ok(0, true); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLimitServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLimitServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0d0afd544f71d6f79fbf6cda5da4af7344f4959a --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLimitServiceImpl.java @@ -0,0 +1,168 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.*; +import cn.wisenergy.model.app.*; +import cn.wisenergy.model.enums.CardStatus; +import cn.wisenergy.model.enums.PayType; +import cn.wisenergy.model.vo.AddLimitVo; +import cn.wisenergy.service.app.UserLimitService; +import cn.wisenergy.service.common.VolunteerManager; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 86187 + */ +@Service +@Slf4j +public class UserLimitServiceImpl extends ServiceImpl<UserLimitMapper, UserLimit> implements UserLimitService { + + @Autowired + private PriceMapper priceMapper; + + @Autowired + private UserLimitMapper userLimitMapper; + + @Autowired + private PayRecordMapper payRecordMapper; + + @Autowired + private CardMapper cardMapper; + + @Autowired + private UserLimitRecordMapper userLimitRecordMapper; + + @Autowired + private VolunteerManager volunteerManager; + + @Autowired + private RefillCardMapper refillCardMapper; + + @Override + public R<UserLimit> getByUserId(Integer userId) { + log.info("volunteer-service[]UserLimitServiceImpl[]getByUserId[]input.param.userId:" + userId); + if (null == userId) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + //由用户id,获å–ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + QueryWrapper<UserLimit> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId); + UserLimit userLimit = baseMapper.selectOne(queryWrapper); + + return R.ok(userLimit); + } + + @Override + public R<Boolean> addLimit(AddLimitVo addLimitVo) { + log.info("volunteer-service[]UserLimitServiceImpl[]addLimit[]input.param.addLimitVo:" + addLimitVo); + if (null == addLimitVo || null == addLimitVo.getUserId() || null == addLimitVo.getPayType()) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + Integer userId = addLimitVo.getUserId(); + //判æ–用户查询次数信æ¯æ˜¯å¦å˜åœ¨ + UserLimit userLimit = userLimitMapper.getByUserId(userId); + if (null == userLimit) { + return R.error("用户查询信æ¯ä¸å˜åœ¨!"); + } + + //1ã€å……å€¼å¡ + if (PayType.REFILL_CARD.getCode().equals(addLimitVo.getPayType())) { + if (StringUtils.isBlank(addLimitVo.getPassword())) { + return R.error(1,"充值å¡å¯†ç ä¸èƒ½ä¸ºç©º!",false); + } + + //æ ¹æ®å¯†ç 获å–充值å¡ä¿¡æ¯ + CardInfo cardInfo = cardMapper.getBySecretKey(addLimitVo.getPassword()); + if (null == cardInfo || StringUtils.isBlank(cardInfo.getBatchNumber())) { + return R.error(1,"充值å¡ä¿¡æ¯ä¸å˜åœ¨!",false); + } + + if (cardInfo.getStatus().equals(CardStatus.ALREADY_USED.getCode())) { + return R.error(1,"充值å¡å·²ä½¿ç”¨ï¼Œè¯·è´ä¹°æ–°å¡!",false); + } + + //获å–主å¡ä¿¡æ¯ + RefillCard refillCard = refillCardMapper.getByBatchNumber(cardInfo.getBatchNumber()); + if (null == refillCard) { + return R.error(1,"充值å¡ä¿¡æ¯ä¸å˜åœ¨!",false); + } + + if (refillCard.getIsActivite() == 1) { + return R.error(1,"充值å¡æœªæ¿€æ´»ï¼Œè¯·è”系管ç†å‘˜æ¿€æ´»!",false); + } + + //å¢žåŠ ç”¨æˆ·å¯ç”¨æŸ¥è¯¢æ¬¡æ•° + Integer usableNumber = userLimit.getUsableLimit() + cardInfo.getLimit(); + + //å¢žåŠ ç”¨æˆ·æ€»æŸ¥è¯¢æ¬¡æ•° + Integer total = userLimit.getTotalLimit() + cardInfo.getLimit(); + userLimit.setUsableLimit(usableNumber); + userLimit.setTotalLimit(total); + + //更新充值å¡çŠ¶æ€å’Œç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°åŠå¢žåŠ 充值记录 + boolean bool = volunteerManager.updateLimitAndRecord(new Price(), cardInfo, userLimit, addLimitVo); + return R.ok(bool); + + } else { + //2ã€å¾®ä¿¡æˆ–è€…æ”¯ä»˜å® + if (null == addLimitVo.getPayMoney()) { + return R.error(1,"支付金é¢ä¸èƒ½ä¸ºç©º!",false); + } + + //æ ¹æ®æ”¯ä»˜çš„金é¢ï¼ŒæŸ¥è¯¢ç”¨æˆ·æ–°å¢žæŸ¥è¯¢æ¬¡æ•° + Price price = priceMapper.getByMoney(addLimitVo.getPayMoney()); + + //å¢žåŠ ç”¨æˆ·å¯ç”¨æŸ¥è¯¢æ¬¡æ•° + Integer usableNumber = userLimit.getUsableLimit() + price.getUseLimit(); + + //å¢žåŠ ç”¨æˆ·æ€»æŸ¥è¯¢æ¬¡æ•° + Integer total = userLimit.getTotalLimit() + price.getUseLimit(); + userLimit.setUseLimit(usableNumber); + userLimit.setTotalLimit(total); + + //更新充值å¡çŠ¶æ€å’Œç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°åŠå¢žåŠ 充值记录 + boolean bool = volunteerManager.updateLimitAndRecord(price, new CardInfo(), userLimit, addLimitVo); + return R.ok(bool); + } + } + + @Override + public R<Boolean> minusLimit(Integer userId) { + log.info("volunteer-service[]UserLimitServiceImpl[]minusLimit[]input.param.userId:" + userId); + if (null == userId) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + //获å–ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + UserLimit userLimit = userLimitMapper.getByUserId(userId); + if (null == userLimit) { + return R.error("用户查询信æ¯ä¸å˜åœ¨!"); + } + + if (userLimit.getUsableLimit() == 0) { + return R.error(1, "您的查询次数已使用完了,请充值!", false); + } + + //扣å‡ç”¨æˆ·å¯ç”¨æŸ¥è¯¢æ¬¡æ•° + int usableLimit = userLimit.getUsableLimit() - 1; + + //å¢žåŠ ç”¨æˆ·å·²ä½¿æ¬¡æ•° + int useLimit = userLimit.getUseLimit() + 1; + userLimit.setUsableLimit(usableLimit); + userLimit.setUseLimit(useLimit); + + //更新用户查询信æ¯å¹¶ä¿å˜æ‰£å‡è®°å½• + boolean bool = volunteerManager.updateLimitSaveRecord(userLimit); + if (bool) { + return R.ok(0, true); + } + return R.ok(1, false); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLoginServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLoginServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..942a3e88d123259c4d4743dd46ee9fadd48a64bd --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLoginServiceImpl.java @@ -0,0 +1,300 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.Md5Util; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.LoginRecordMapper; +import cn.wisenergy.mapper.UserLimitMapper; +import cn.wisenergy.mapper.UsersMapper; +import cn.wisenergy.model.app.LoginRecord; +import cn.wisenergy.model.app.User; +import cn.wisenergy.model.enums.OperationTypeEnum; +import cn.wisenergy.model.enums.SourceType; +import cn.wisenergy.model.vo.UpdatePasswordVo; +import cn.wisenergy.model.vo.UserInfoVo; +import cn.wisenergy.model.vo.UserLoginVo; +import cn.wisenergy.model.vo.UserRegisterVo; +import cn.wisenergy.service.app.SendSmsSerVice; +import cn.wisenergy.service.app.UserLoginService; +import cn.wisenergy.service.common.Common; +import cn.wisenergy.service.common.VolunteerManager; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author 86187 + * @ Description: 用户登录相关接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/7 14:22 + */ +@Service +@Slf4j +public class UserLoginServiceImpl extends ServiceImpl<UsersMapper, User> implements UserLoginService { + @Autowired + private UsersMapper usersMapper; + + @Autowired + private LoginRecordMapper loginRecordMapper; + + @Autowired + private SendSmsSerVice sendSmsSerVice; + + @Autowired + private UserLimitMapper userLimitMapper; + + @Autowired + private VolunteerManager volunteerManager; + + private static final int ERROR_CODE = 1; + + @Transactional(rollbackFor = Exception.class) + @Override + public R<UserInfoVo> register(UserRegisterVo userVo) { + log.info("volunteer-service[]UserLoginServiceImpl[]register[]input.param.userVo:" + userVo); + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getPassword())) { + return R.error("å…¥å‚为空!"); + } + + String phone = userVo.getPhone(); + String password = userVo.getPassword(); + + //1.检查å·ç 是å¦é‡å¤ + Integer userId = null; + Boolean bool = checkPhone(phone, userId); + if (!bool) { + return R.error("该电è¯å·ç " + phone + "已被使用!"); + } + + //2ã€åˆ¤æ–验è¯ç 是å¦æ£ç¡® + String source = SourceType.getByCode(userVo.getSource()); + R<Boolean> result = sendSmsSerVice.valid(userVo.getPhone(), userVo.getSmCode(), + userVo.getScene(), source); + if (null != result && result.getCode() == ERROR_CODE) { + return R.error(result.getMessage()); + } + + //3ã€ç»™å¯†ç åŠ å¯† åŠ å¯†è§„åˆ™ï¼Œç”µè¯å·ç +明文密ç + String secret = Md5Util.digestMD5(password + phone); + return volunteerManager.saveUserAndLimit(phone, secret, userVo.getSource()); + } + + @Override + public R<UserInfoVo> loginCode(UserLoginVo userVo) { + log.info("volunteer-service[]UserLoginServiceImpl[]loginCode[]input.param.userVo:" + userVo); + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getCode()) || + null == userVo.getSource() || null == userVo.getScene()) { + return R.error("å…¥å‚为空!"); + } + + //1ã€åˆ¤æ–手机å·è´¦æˆ·æ˜¯å¦å˜åœ¨ + QueryWrapper<User> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("phone", userVo.getPhone()); + queryWrapper.eq("is_delete", 0); + User user = baseMapper.selectOne(queryWrapper); + if (null == user) { + return R.error("该手机å·æœªæ³¨å†Œ,请先注册!"); + } + + //2ã€åˆ¤æ–验è¯ç 是å¦æ£ç¡® + String source = SourceType.getByCode(userVo.getSource()); + R<Boolean> result = sendSmsSerVice.valid(userVo.getPhone(), userVo.getCode(), userVo.getScene(), source); + + if (null != result && result.getCode() == ERROR_CODE) { + return R.error(result.getMessage()); + } + + //3ã€ä¿å˜ç™»å½•ä¿¡æ¯ + LoginRecord loginRecord = new LoginRecord(); + loginRecord.setType(OperationTypeEnum.USER_LOGIN.getCode()); + loginRecord.setUserId(user.getId()); + String name = OperationTypeEnum.getByCode(OperationTypeEnum.USER_LOGIN.getCode()); + loginRecord.setOperationName(name); + loginRecordMapper.add(loginRecord); + + //4ã€æž„é€ è¿”å›žå‚æ•° + UserInfoVo userInfoVo = new UserInfoVo(); + userInfoVo.setUserId(user.getId()); + userInfoVo.setUserName(user.getUserName()); + userInfoVo.setPhone(user.getPhone()); + return R.ok(userInfoVo); + } + + @Override + public R<UserInfoVo> login(UserLoginVo userVo) { + log.info("volunteer-service[]UserLoginServiceImpl[]login[]input.param.userVo:" + userVo); + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getPassword())) { + return R.error("å…¥å‚为空!"); + } + + //1ã€æ ¹æ®æ‰‹æœºå·ï¼ŒèŽ·å–ç”¨æˆ·ä¿¡æ¯ + QueryWrapper<User> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("phone", userVo.getPhone()); + queryWrapper.eq("is_delete", 0); + User user = usersMapper.selectOne(queryWrapper); + if (null == user) { + return R.error("该用户ä¸å˜åœ¨ï¼Œè¯·æ‚¨æ³¨å†Œè´¦å·!"); + } + + //2ã€åˆ¤æ–密ç 是å¦æ£ç¡® + //MD5åŠ å¯† + String secret = Md5Util.digestMD5(userVo.getPassword() + userVo.getPhone()); + + if (!user.getPassword().equals(secret)) { + return R.error("密ç 错误,请您输入æ£ç¡®å¯†ç !"); + } + + //3ã€æž„é€ è¿”å›žå‚æ•° + UserInfoVo userInfoVo = new UserInfoVo(); + userInfoVo.setUserId(user.getId()); + userInfoVo.setUserName(user.getUserName()); + userInfoVo.setPhone(user.getPhone()); + + //3ã€ä¿å˜æ“作记录 + LoginRecord loginRecord = new LoginRecord(); + loginRecord.setType(OperationTypeEnum.USER_LOGIN.getCode()); + loginRecord.setUserId(user.getId()); + String name = OperationTypeEnum.getByCode(OperationTypeEnum.USER_LOGIN.getCode()); + loginRecord.setOperationName(name); + int sum = loginRecordMapper.add(loginRecord); + if (sum == 0) { + return R.error("ä¿å˜æ“作记录失败!"); + } + return R.ok(userInfoVo); + } + + @Override + public R<Boolean> loginOut(Integer userId) { + log.info("volunteer-service[]UserLoginServiceImpl[]loginOut[]input.param.userId:" + userId); + if (null == userId) { + return R.error("å…¥å‚为空!"); + } + + //ä¿å˜ç”¨æˆ·é€€å‡ºæ“作 + LoginRecord loginRecord = new LoginRecord(); + loginRecord.setType(OperationTypeEnum.USER_OUT.getCode()); + loginRecord.setUserId(userId); + String name = OperationTypeEnum.getByCode(OperationTypeEnum.USER_OUT.getCode()); + loginRecord.setOperationName(name); + int sum = loginRecordMapper.add(loginRecord); + if (sum == 0) { + return R.ok(1, false); + } + return R.ok(0, true); + } + + @Override + public R<Boolean> updatePassword(UpdatePasswordVo updateVo) { + log.info("volunteer-service[]UserLoginServiceImpl[]loginOut[]input.param.updateVo:" + updateVo); + if (null == updateVo || null == updateVo.getUserId() || StringUtils.isBlank(updateVo.getNewPassword()) || + StringUtils.isBlank(updateVo.getOldPassword())) { + return R.error("å…¥å‚为空!"); + } + + //1ã€èŽ·å–ç”¨æˆ·ä¿¡æ¯ + User user = usersMapper.selectById(updateVo.getUserId()); + if (null == user) { + return R.error("用户信æ¯ä¸å˜åœ¨,æ— æ³•ä¿®æ”¹å¯†ç !"); + } + + //2ã€åˆ¤æ–旧密ç 是å¦æ£ç¡® + String password = Md5Util.digestMD5(updateVo.getOldPassword() + user.getPhone()); + if (!user.getPassword().equals(password)) { + return R.error("旧密ç ä¸æ£ç¡®,请从新输入!"); + } + + //3ã€ä¿®æ”¹ç”¨æˆ·å¯†ç 为新密ç + String newPassword = Md5Util.digestMD5(updateVo.getNewPassword() + user.getPhone()); + user.setPassword(newPassword); + int count = usersMapper.edit(user); + if (count == 0) { + return R.ok(1, false); + } + return R.ok(0, true); + } + + @Override + public R<Boolean> resetPassword(Integer userId) { + log.info("volunteer-service[]UserLoginServiceImpl[]resetPassword[]input.param.userId:" + userId); + if (null == userId) { + return R.error("å…¥å‚为空!"); + } + + //获å–ç”¨æˆ·ä¿¡æ¯ + User user = usersMapper.selectById(userId); + + //åŠ å¯†é‡ç½®å¯†ç + String password = Md5Util.digestMD5(Common.RESET_PASSWORD_VALUE + user.getPhone()); + user.setPassword(password); + + int count = usersMapper.edit(user); + if (count == 0) { + return R.ok(1, false); + } + return R.ok(0, true); + } + + @Override + public R<Boolean> smsResetPassword(UserLoginVo userVo) { + log.info("volunteer-service[]UserLoginServiceImpl[]smsResetPassword[]input.param.userVo:" + userVo); + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getCode()) || + StringUtils.isBlank(userVo.getPassword()) || null == userVo.getScene()) { + return R.error("å…¥å‚为空!"); + } + + //获å–ç”¨æˆ·ä¿¡æ¯ + QueryWrapper<User> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("phone", userVo.getPhone()); + queryWrapper.eq("is_delete", 0); + User user = baseMapper.selectOne(queryWrapper); + if (null == user) { + return R.error("用户信æ¯ä¸å˜åœ¨ï¼Œæ— 法é‡ç½®å¯†ç !"); + } + + //验è¯éªŒè¯ç + String source = SourceType.getByCode(userVo.getSource()); + R<Boolean> bool = sendSmsSerVice.valid(userVo.getPhone(), userVo.getCode(), userVo.getScene(), source); + if (null != bool && bool.getCode() == ERROR_CODE) { + return R.error(1, bool.getMessage(), false); + } + + //3ã€è®¾ç½®æ–°å¯†ç + String password = Md5Util.digestMD5(userVo.getPassword() + userVo.getPhone()); + user.setPassword(password); + int count = usersMapper.edit(user); + if (count == 0) { + return R.ok(1, false); + } + return R.ok(0, true); + } + + private Boolean checkPhone(String phone, Integer userId) { + //判æ–是注册还是编辑 + //1ã€æ³¨å†Œ-新增 + if (null == userId) { + //æ ¹æ®ç”µè¯å·ç 查询用户 + QueryWrapper<User> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("phone", phone); + queryWrapper.eq("is_delete", 0); + User user = usersMapper.selectOne(queryWrapper); + if (null != user) { + return false; + } + } + + //2ã€ç¼–辑 + if (null != userId) { + //æ ¹æ®ç”µè¯å·ç 和用户id,统计å·ç 是å¦é‡å¤ + int count = usersMapper.countByPhoneAnsUserId(phone, userId); + if (count > 0) { + return false; + } + } + + return true; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5af67d3c6069012444ad80687c705b53412422db --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java @@ -0,0 +1,296 @@ +package cn.wisenergy.service.app.impl; + +import cn.hutool.system.UserInfo; +import cn.wisenergy.common.constant.CommonAttributes; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.*; +import cn.wisenergy.model.app.*; +import cn.wisenergy.model.dto.UserCommitDto; +import cn.wisenergy.model.dto.UserInfoDto; +import cn.wisenergy.model.vo.UserInfoVo; +import cn.wisenergy.model.vo.UserQueryVo; +import cn.wisenergy.model.vo.UserShowVo; +import cn.wisenergy.service.app.UserService; +import cn.wisenergy.service.common.VolunteerManager; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @ Description: 用户接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/6 16:11 + */ +@Service +@Slf4j +public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements UserService { + + @Autowired + private UsersMapper usersMapper; + + @Autowired + private ScoreInfoMapper scoreInfoMapper; + + @Autowired + private LoginRecordMapper loginRecordMapper; + + @Autowired + private UserLimitMapper userLimitMapper; + + @Autowired + private PayRecordMapper payRecordMapper; + + @Autowired + protected VolunteerManager volunteerManager; + + @Override + public R<PageInfo<UserInfoDto>> getUserList(UserQueryVo queryVo) { + log.info("volunteer_service[]UserServiceImpl[]getUserList[]input.param.queryVo:" + queryVo); + + //创建å‚数容器 + Map<String, Object> map = new HashMap<>(4); + + //å°†å‚æ•°æ”¾å…¥å®¹å™¨ä¸ + map.put("pageNo", (queryVo.getPageNo() - 1) * queryVo.getPageSize()); + map.put("pageSize", queryVo.getPageSize()); + map.put("startTime", queryVo.getStartTime()); + map.put("endTime", queryVo.getEndTime()); + map.put("userName", queryVo.getUserName()); + map.put("phone", queryVo.getPhone()); + + //æŸ¥è¯¢ç”¨æˆ·æ•°æ® + List<User> list1 = usersMapper.getList(map); + List<UserInfoDto> list = new ArrayList<>(); + + //将集åˆé历拿出用户id查询æˆç»©ä¿¡æ¯ + for (User user : list1) { + UserInfoDto userInfoDto = new UserInfoDto(); + + //æŸ¥è¯¢ç›¸å…³ä¿¡æ¯ + ScoreInfo scoreInfo = scoreInfoMapper.getById(user.getId()); + if (null != scoreInfo) { + userInfoDto.setCultureGrade(scoreInfo.getCultureGrade().toString()); + userInfoDto.setMajorGrade(null==scoreInfo.getMajorGrade()?"":scoreInfo.getMajorGrade().toString()); + } + LoginRecord loginRecord = loginRecordMapper.getById(user.getId()); + if (null != loginRecord) { + userInfoDto.setLastLoginTime(loginRecord.getUpdateTime()); + userInfoDto.setIp(loginRecord.getIp()); + } + UserLimit userLimit = userLimitMapper.getByUserId(user.getId()); + + if (null != userLimit) { + userInfoDto.setQueryLimit(userLimit.getUsableLimit()); + } + List<PayRecord> byId = payRecordMapper.getById(user.getId()); + + //计算充值å¡å……值次数 + Integer rechargeTimes = 0; + + //支付å®å……å€¼æ€»é‡‘é¢ + Integer alipayMoney = 0; + + //å¾®ä¿¡å……å€¼æ€»é‡‘é¢ + Integer weChatMoney = 0; + + if (!CollectionUtils.isEmpty(byId)) { + + for (PayRecord payRecord : byId) { + if (payRecord.getType() == 1) { + alipayMoney += Integer.valueOf(null == payRecord.getMoney() ? 0 : payRecord.getMoney()); + } + + if (payRecord.getType() == 2) { + weChatMoney += Integer.valueOf(null == payRecord.getMoney() ? 0 : payRecord.getMoney()); + } + + if (payRecord.getType() == 3) { + rechargeTimes += 1; + } + } + } + userInfoDto.setWeChatMoney(String.valueOf(weChatMoney)); + userInfoDto.setAlipayMoney(String.valueOf(alipayMoney)); + userInfoDto.setRechargeTimes(rechargeTimes); + + //将消æ¯è¿›è¡ŒåŒæ¥ + BeanUtils.copyProperties(user, userInfoDto); + userInfoDto.setUserId(user.getId()); + userInfoDto.setRegisterTime(user.getCreateTime()); + list.add(userInfoDto); + } + + PageInfo<UserInfoDto> info = new PageInfo<>(); + info.setPageSize(queryVo.getPageSize()); + info.setPageNum(queryVo.getPageNo()); + info.setTotal(usersMapper.getUserNumbers(map)); + info.setList(list); + + return R.ok(info); + } + + + @Override + public R<UserInfoVo> commitUserInfo(UserCommitDto userInfo) { + log.info("volunteer-service[]UserServiceImpl[]commitUserInfo[]input.param.userInfo:" + userInfo); + if (null == userInfo) { + return R.error("å…¥å‚为空!"); + } + + //1ã€æ ¹æ®ç”¨æˆ·id,获å–ç”¨æˆ·ä¿¡æ¯ + User user = usersMapper.selectById(userInfo.getUserId()); + if (null == user) { + return R.error("用户信æ¯ä¸å˜åœ¨!"); + } + + //2ã€è¦æäº¤çš„ç”¨æˆ·ä¿¡æ¯ + user.setSchool(userInfo.getSchool()); + user.setSex(userInfo.getSex()); + user.setExamType(userInfo.getStudentType()); + user.setUserName(userInfo.getUserName()); + user.setIsDelete(0); + user.setSource(userInfo.getSource()); + + //3ã€è¦æ交的用户的æˆç»©ä¿¡æ¯ + ScoreInfo scoreInfo = userInfo.getScoreInfo(); + + //4ã€æ›´æ–°ç”¨æˆ·ä¿¡æ¯å’Œä¿å˜ç”¨æˆ·æˆç»© + boolean bool = volunteerManager.updateAndSaveUserInfo(user, scoreInfo); + if (!bool) { + return R.error("æ·»åŠ ç”¨æˆ·ä¿¡æ¯å¤±è´¥!"); + } + + //è¿”å›žä¿¡æ¯ + UserInfoVo userInfoVo = new UserInfoVo(); + userInfoVo.setUserId(userInfo.getUserId()); + userInfoVo.setUserName(userInfo.getUserName()); + userInfoVo.setPhone(user.getPhone()); + userInfoVo.setSex(userInfo.getSex()); + userInfoVo.setStudentType(userInfo.getStudentType()); + userInfoVo.setUserName(userInfo.getUserName()); + return R.ok(userInfoVo); + } + + @Override + public R<Boolean> edit(UserCommitDto userDto) { + if (null == userDto) { + return R.error("å…¥å‚为空!"); + } + + //1ã€æ ¹æ®ç”¨æˆ·id,获å–ç”¨æˆ·ä¿¡æ¯ + User user = usersMapper.selectById(userDto.getUserId()); + if (null == user) { + return R.error("用户信æ¯ä¸å˜åœ¨!"); + } + + //2ã€è¦æäº¤çš„ç”¨æˆ·ä¿¡æ¯ + user.setSchool(userDto.getSchool()); + user.setSex(userDto.getSex()); + user.setExamType(userDto.getStudentType()); + user.setUserName(userDto.getUserName()); + + + //3ã€è¦æ交的用户的æˆç»©ä¿¡æ¯ + ScoreInfo scoreInfo = scoreInfoMapper.getById(userDto.getUserId()); + scoreInfo.setUserId(userDto.getUserId()); + scoreInfo.setBiologyGrade(userDto.getScoreInfo().getBiologyGrade()); + scoreInfo.setChemistryGrade(userDto.getScoreInfo().getChemistryGrade()); + scoreInfo.setCultureGrade(userDto.getScoreInfo().getCultureGrade()); + scoreInfo.setEnglishGrade(userDto.getScoreInfo().getEnglishGrade()); + scoreInfo.setGeographyGrade(userDto.getScoreInfo().getGeographyGrade()); + scoreInfo.setHistoryGrade(userDto.getScoreInfo().getHistoryGrade()); + scoreInfo.setLanguageGrade(userDto.getScoreInfo().getLanguageGrade()); + scoreInfo.setMajorGrade(userDto.getScoreInfo().getMajorGrade()); + scoreInfo.setMathGrade(userDto.getScoreInfo().getMathGrade()); + scoreInfo.setPhysicsGrade(userDto.getScoreInfo().getPhysicsGrade()); + scoreInfo.setPoliticsGrade(userDto.getScoreInfo().getPoliticsGrade()); + + //4ã€æ›´æ–°ç”¨æˆ·ä¿¡æ¯å’Œä¿å˜ç”¨æˆ·æˆç»© + boolean bool = volunteerManager.updateAndUserInfo(user, scoreInfo); + + return R.ok(bool); + } + + @Override + public R<Boolean> delete(Integer userId) { + return null; + } + + @Override + public R<UserShowVo> getById(Integer id) { + log.info("volunteer-service[]UserServiceImpl[]getById[]input.param.id:" + id); + if (null == id) { + return R.error("å…¥å‚为空!"); + } + + //æ ¹æ®id,获å–ç”¨æˆ·ä¿¡æ¯ + User user = usersMapper.selectById(id); + if (null == user) { + return R.error("用户信æ¯ä¸å˜åœ¨!"); + } + + UserShowVo userShowVo = new UserShowVo(); + userShowVo.setId(user.getId()); + userShowVo.setSchool(user.getSchool()); + userShowVo.setSex(user.getSex()); + userShowVo.setStudentType(user.getExamType()); + userShowVo.setUserName(user.getUserName()); + + //获å–æˆç»©ä¿¡æ¯ + QueryWrapper<ScoreInfo> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", user.getId()); + ScoreInfo scoreInfo = scoreInfoMapper.selectOne(queryWrapper); + if (null != scoreInfo) { + userShowVo.setScoreInfo(scoreInfo); + } + return R.ok(userShowVo); + } + + @Override + public User getByPhone(String phone) { + return null; + } + + @Override + public R<List<User>> test() { + List<String> names=new ArrayList<>(); + names.add("黎楚å·"); + names.add("陈æˆ"); + names.add("é›·é’æ¾"); + List<User> list=usersMapper.test(names); + return R.ok(list); + } + + /** + * 分页处ç†æ–¹æ³• + * + * @param orderQueryVo å‚æ•° + */ + private void pageHandle(UserQueryVo orderQueryVo) { + Integer pageNum = orderQueryVo.getPageNo(); + Integer pageSize = orderQueryVo.getPageSize(); + if (null == pageSize || pageSize == 0) { + pageSize = 10; + } + if (null == pageNum || pageNum == 0) { + pageNum = 1; + } + Integer endNum = pageSize; + Integer startNum = (pageNum - CommonAttributes.NUM_ONE) * pageSize; + orderQueryVo.setEndNum(endNum); + orderQueryVo.setStartNum(startNum); + orderQueryVo.setPageNo(pageNum); + orderQueryVo.setPageSize(pageSize); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserVolunteerServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserVolunteerServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..d2fd63bff3606b24f11e395ad70430f6843a1a8f --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserVolunteerServiceImpl.java @@ -0,0 +1,15 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.mapper.UserVolunteerMapper; +import cn.wisenergy.model.app.UserVolunteer; +import cn.wisenergy.service.app.UserVolunteerService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + + +/** + * @author 86187 + */ +@Service +public class UserVolunteerServiceImpl extends ServiceImpl<UserVolunteerMapper,UserVolunteer> implements UserVolunteerService { +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..db3ae26d1126d17d5732090db8afcb3d3eaea248 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java @@ -0,0 +1,187 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.expection.BaseException; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.SchemeMapper; +import cn.wisenergy.mapper.VolunteerMapper; +import cn.wisenergy.model.app.SchemeInfo; +import cn.wisenergy.model.app.Volunteer; +import cn.wisenergy.service.app.VolunteerService; +import cn.wisenergy.service.common.VolunteerListener; +import cn.wisenergy.service.common.VolunteerManager; +import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author 86187 + * @ Description: 志愿接å£å®žçŽ° + * @ Author : 86187 + * @ Date : 2021/1/8 9:44 + */ +@Service +@Slf4j +public class VolunteerServiceImpl extends ServiceImpl<VolunteerMapper, Volunteer> implements VolunteerService { + @Autowired + private VolunteerMapper volunteerMapper; + + @Autowired + private SchemeMapper schemeMapper; + + @Autowired + private VolunteerService volunteerService; + + @Autowired + private VolunteerManager volunteerManager; + + @Override + public R<Boolean> batchAdd(List<Volunteer> list) { + return null; + } + + @Override + public void excelAdd(MultipartFile file, Integer type, String schemeName, String fileUrl, HttpServletResponse response) throws IOException { + if (file == null || file.isEmpty() || null == type || StringUtils.isBlank(schemeName) || + StringUtils.isBlank(fileUrl)) { + throw new BaseException("æ“作错误"); + } + + //判æ–文件类型= + boolean valid = this.validContentType(file.getOriginalFilename()); + if (!valid) { + throw new BaseException("è¯·ä¼ å…¥Excel文件"); + } + VolunteerListener excelListener = new VolunteerListener(); + + //2.读å–æ•°æ®è¿›è¡Œå…¥åº“æ“作 + EasyExcel.read(file.getInputStream(), Volunteer.class, excelListener).sheet().doRead(); + List<Volunteer> list = excelListener.getList(); + if (CollectionUtils.isEmpty(list)) { + throw new BaseException("写入方案数æ®å¤±è´¥!"); + } + + //3ã€ä¿å˜æ–¹æ¡ˆå’Œå¿—æ„¿ä¿¡æ¯ + SchemeInfo schemeInfo = new SchemeInfo(); + schemeInfo.setSchemeName(schemeName); + schemeInfo.setType(type); + schemeInfo.setFileUrl(fileUrl); + schemeInfo.setUploadTime(new Date()); + schemeInfo.setIsDelete(0); + int scheme = schemeMapper.getByType(type); + if (scheme > 0) { + throw new RuntimeException("该类型方案已ç»å˜åœ¨!"); + } + + volunteerManager.saveSchemeAndVolunteer(schemeInfo, list); + } + + @Override + public void ceshi(MultipartFile file, HttpServletResponse response) throws IOException { + if (file == null || file.isEmpty()) { + throw new BaseException("æ“作错误"); + } + + VolunteerListener excelListener = new VolunteerListener(); + + //判æ–文件类型= + boolean valid = this.validContentType(file.getOriginalFilename()); + if (!valid) { + throw new BaseException("è¯·ä¼ å…¥Excel文件"); + } + //2.读å–æ•°æ®è¿›è¡Œå…¥åº“æ“作 + EasyExcel.read(file.getInputStream(), Volunteer.class, excelListener).sheet().doRead(); + List<Volunteer> list = excelListener.getList(); + + //3ã€ä¿å˜æ–¹æ¡ˆå’Œå¿—æ„¿ä¿¡æ¯ + SchemeInfo schemeInfo = new SchemeInfo(); + schemeInfo.setSchemeName("本科文化一批"); + schemeInfo.setType(1); + schemeInfo.setUploadTime(new Date()); + schemeInfo.setIsDelete(0); + + volunteerManager.saveSchemeAndVolunteer(schemeInfo, list); + log.info("导入方案数æ®æˆåŠŸ!"); + } + + @Override + public void excelTemplate(HttpServletResponse response) throws IOException { + //æž„é€ å‡æ•°æ® + List<Volunteer> residents = this.mockData(); + //excel导出 + this.download(response, Volunteer.class, residents, "居民管ç†æ¨¡æ¿", "居民管ç†"); + } + + /** + * 判æ–文件类型 + * + * @param fileName 文件å + * @return true or false + */ + public boolean validContentType(String fileName) { + if (StringUtils.isBlank(fileName)) { + return false; + } + String substring = fileName.substring(fileName.lastIndexOf(".") + 1); + if ("xlsx".equals(substring) || "xls".equals(substring)) { + return true; + } + return false; + } + + private List<Volunteer> mockData() { + ArrayList<Volunteer> residents = new ArrayList<>(2); + //模拟两æ¡å‡æ•°æ® + for (int i = 0; i < 2; i++) { + Volunteer volunteer = Volunteer.builder() + .majorName("北京大å¦" + i) + .academy("计算机å¦é™¢" + i) + .courseDemand("物ç†" + i + 1) + .nature("全日制") + .yearLimit(4) + .planNum(2 + i) + .castArchivesNum(3 + i) + .launchNum(4 + i) + .lowestMark("600" + i * 10) + .lowestRank("100" + i * 10) + .build(); + residents.add(volunteer); + } + return residents; + } + + /** + * å¯¼å‡ºæ•°æ® + * + * @param response + * @param clazz 实体类对象的类型 + * @param data å¯¼å‡ºçš„æ•°æ® + * @param fileName 工作簿文件å + * @param sheetName 工作表文件å + * @throws IOException + */ + private void download(HttpServletResponse response, Class clazz, List data, String fileName, String sheetName) throws IOException { + if (StringUtils.isBlank(fileName)) { + fileName = "测试"; + } + if (StringUtils.isBlank(sheetName)) { + sheetName = "模æ¿"; + } + // è¿™é‡Œæ³¨æ„ æœ‰åŒå¦å应使用swagger 会导致å„ç§é—®é¢˜ï¼Œè¯·ç›´æŽ¥ç”¨æµè§ˆå™¨æˆ–者用postman + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + response.setHeader("NewContent-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(data); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/WxPayServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/WxPayServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0353ab748af723daca35f189721638cdb310b98b --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/WxPayServiceImpl.java @@ -0,0 +1,235 @@ +package cn.wisenergy.service.app.impl; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.dto.PayPageDto; +import cn.wisenergy.model.dto.PayQueryDto; +import cn.wisenergy.service.app.WxPayService; + +import cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder; +import cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier; +import cn.wisenergy.service.httpClient.auth.PrivateKeySigner; +import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials; +import cn.wisenergy.service.httpClient.auth.WechatPay2Validator; +import cn.wisenergy.service.httpClient.util.PemUtil; +import cn.wisenergy.service.util.SignDemo; +import cn.wisenergy.service.wxpay.WxCommon; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import okhttp3.HttpUrl; +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.junit.After; +import org.junit.Before; +import org.springframework.stereotype.Service; + + +import javax.crypto.IllegalBlockSizeException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.SignatureException; +import java.security.spec.InvalidKeySpecException; + +import java.util.UUID; + + +/** + * @author 86187 + */ +@Service +@Slf4j +public class WxPayServiceImpl implements WxPayService { + /** + * å•†æˆ·å· + */ + private static String mchId = WxCommon.MCHID; + // 商户è¯ä¹¦åºåˆ—å· + private static String mchSerialNo = WxCommon.SERIAL_NO; + // api密钥 + private static String apiV3Key = WxCommon.SECRET_KEY; + // ä½ çš„å•†æˆ·ç§é’¥ + private static String privateKey = "-----BEGIN PRIVATE KEY-----\n" + WxCommon.PRIVATE_KEY + + "-----END PRIVATE KEY-----\n"; + + private CloseableHttpClient httpClient; + private AutoUpdateCertificatesVerifier verifier; + + @Before + public void setup() throws IOException { + PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey( + new ByteArrayInputStream(privateKey.getBytes("utf-8"))); + + //使用自动更新的ç¾å验è¯å™¨ï¼Œä¸éœ€è¦ä¼ å…¥è¯ä¹¦ + verifier = new AutoUpdateCertificatesVerifier( + new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)), + apiV3Key.getBytes("utf-8")); + + httpClient = WechatPayHttpClientBuilder.create() + .withMerchant(mchId, mchSerialNo, merchantPrivateKey) + .withValidator(new WechatPay2Validator(verifier)) + .build(); + } + + @After + public void after() throws IOException { + httpClient.close(); + } + + + @Override + public R<String> wxPay(PayPageDto payPageDto) throws UnsupportedEncodingException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException { + if (null == payPageDto || null == payPageDto.getTotal()) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + HttpPost httpPost = new HttpPost(); + httpPost.addHeader("Content-Type", "application/json"); + httpPost.addHeader("Accept", "application/json"); + + long timestamp = System.currentTimeMillis() / 1000; + String nonceStr = UUID.randomUUID().toString().replace("-", ""); + String method = "POST"; + String tradeNo = "21" + System.currentTimeMillis(); + HttpUrl httpurl = HttpUrl.parse(WxCommon.WX_PAY_URL); + + //æž„é€ ç¾åå‚æ•° + JSONObject jsonObject = new JSONObject(); + jsonObject.put("appid", WxCommon.APP_ID); + jsonObject.put("mchid", WxCommon.MCHID); + jsonObject.put("description", "充值"); + jsonObject.put("out_trade_no", tradeNo); + jsonObject.put("notify_url", WxCommon.NOTIFY_URL); + jsonObject.put("amount", payPageDto); + String sign = SignDemo.getToken(method, httpurl, jsonObject.toJSONString(), nonceStr, timestamp); + httpPost.setHeader("Authorization", "WECHATPAY2-SHA256-RSA2048" + " " + sign); + + return null; + } + + @Override + public R<String> queryWx(PayQueryDto payQueryDto) throws UnsupportedEncodingException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException { + if (null == payQueryDto || StringUtils.isBlank(payQueryDto.getOutTradeNo())) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + long timestamp = System.currentTimeMillis() / 1000; + String nonceStr = UUID.randomUUID().toString().replace("-", ""); + String method = "GET"; + String url = WxCommon.WX_PAY_QUERY + payQueryDto.getOutTradeNo() + "?mchid=" + WxCommon.MCHID; + HttpUrl httpurl = HttpUrl.parse(url); + + //æž„é€ ç¾åå‚æ•° + String sign = SignDemo.getToken(method, httpurl, null, nonceStr, timestamp); + HttpGet httpGet = new HttpGet(); + httpGet.addHeader("Content-Type", "application/json"); + httpGet.addHeader("Accept", "application/json"); + //设置认è¯ä¿¡æ¯ + httpGet.setHeader("Authorization", "WECHATPAY2-SHA256-RSA2048" + " " + sign); + + return null; + } + + @Override + public R<String> wx_Pay(PayPageDto payPageDto) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException, IllegalBlockSizeException { + HttpPost httpPost = new HttpPost(WxCommon.WX_PAY_URL); + + long timestamp = System.currentTimeMillis() / 1000; + String nonceStr = UUID.randomUUID().toString().replace("-", ""); + String method = "POST"; + String tradeNo = "21" + System.currentTimeMillis(); + HttpUrl httpurl = HttpUrl.parse(WxCommon.WX_PAY_URL); + + // 请求bodyå‚æ•° + String reqdata = "{" + + "\"time_expire\":\"2021-02-07T10:34:56+08:00\"," + + "\"amount\": {" + + "\"total\":" + payPageDto.getTotal() + "," + + "\"currency\":\"CNY\"" + + "}," + + "\"mchid\":\"" + WxCommon.MCHID + "\"," + + "\"description\":\"Image形象店-深圳腾大-QQ公仔\"," + + "\"notify_url\":\"" + WxCommon.NOTIFY_URL + "\"," + + "\"out_trade_no\":\"" + tradeNo + "\"," + + "\"goods_tag\":\"WXG\"," + + "\"appid\":\"" + WxCommon.APP_ID + "\"," + + "\"attach\":\"自定义数æ®è¯´æ˜Ž\"," + + "\"detail\": {" + + "\"invoice_id\":\"wx123\"," + + "\"goods_detail\": [" + + "{" + + "\"goods_name\":\"iPhoneX 256G\"," + + "\"wechatpay_goods_id\":\"1001\"," + + "\"quantity\":1," + + "\"merchant_goods_id\":\"商å“ç¼–ç \"," + + "\"unit_price\":828800" + + "}," + + "{" + + "\"goods_name\":\"iPhoneX 256G\"," + + "\"wechatpay_goods_id\":\"1001\"," + + "\"quantity\":1," + + "\"merchant_goods_id\":\"商å“ç¼–ç \"," + + "\"unit_price\":828800" + + "}" + + "]," + + "\"cost_price\":608800" + + "}," + + "\"scene_info\": {" + + "\"store_info\": {" + + "\"address\":\"广东çœæ·±åœ³å¸‚å—山区科技ä¸ä¸€é“10000å·\"," + + "\"area_code\":\"440305\"," + + "\"name\":\"腾讯大厦分店\"," + + "\"id\":\"0001\"" + + "}," + + "\"device_id\":\"013467007045764\"," + + "\"payer_client_ip\":\"14.23.150.211\"" + + "}" + + "}"; + StringEntity reqEntity = new StringEntity( + reqdata, ContentType.create("application/json", "utf-8")); + httpPost.setEntity(reqEntity); + httpPost.addHeader("Accept", "application/json"); + + //æž„é€ ç¾åå‚æ•° + //æž„é€ ç¾åå‚æ•° + JSONObject jsonObject = new JSONObject(); + jsonObject.put("appid", WxCommon.APP_ID); + jsonObject.put("mchid", WxCommon.MCHID); + jsonObject.put("description", "充值"); + jsonObject.put("out_trade_no", tradeNo); + jsonObject.put("notify_url", WxCommon.NOTIFY_URL); + jsonObject.put("amount", payPageDto); + String token = SignDemo.getToken(method, httpurl, jsonObject.toJSONString(), nonceStr, timestamp); + httpPost.setHeader("Authorization", "WECHATPAY2-SHA256-RSA2048" + " " + token); + + //1.创建HttpClient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + //完æˆç¾å并执行请求 + CloseableHttpResponse response = httpClient.execute(httpPost); + + + try { + if (response.getStatusLine().getStatusCode() == 200) { + HttpEntity httpEntity = response.getEntity(); + String content = EntityUtils.toString(httpEntity, "utf8"); + System.out.println(content.length()); + return R.ok(response.toString()); + } + } catch (IOException e) { + e.printStackTrace(); + }finally { + response.close(); + } + return null; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/cache/RedisService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/cache/RedisService.java new file mode 100644 index 0000000000000000000000000000000000000000..0c9b3fddaf45e35d79ef4d1bf968fbcc007e7004 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/cache/RedisService.java @@ -0,0 +1,666 @@ +package cn.wisenergy.service.cache; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.dao.DataAccessException; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +@Slf4j +@Component +public class RedisService { + public static final String PREFIX = "sales_activity"; + + protected static final long DEFAULT_EXPIRE = 10 * 24 * 60 * 60L; + + @Resource(name = "redisTemplate") + private RedisTemplate redisTemplate; + + private static RedisTemplate<String, Object> template = null; + + /** + * 生æˆkey + * + * @param keys + * @return + */ + public String buildKey(Object... keys) { + StringBuilder sb = new StringBuilder(); + if (keys.length == 1) { + sb.append(keys); + return sb.toString(); + } + + for (Object key : keys) { + sb.append(key).append(":"); + } + + if (sb.length() > 1) { + sb.deleteCharAt(sb.length() - 1); + } + + return sb.toString(); + } + + /** + * 指定缓å˜å¤±æ•ˆæ—¶é—´ + * + * @param key é”® + * @param time 时间(秒) + * @return + */ + + public boolean expire(String key, long time) { + try { + if (time > 0) { + getRedisTemplate().expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + + return false; + } + } + + /** + * æ ¹æ®key 获å–过期时间 + * + * @param key é”® ä¸èƒ½ä¸ºnull + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return getRedisTemplate().getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判æ–key是å¦å˜åœ¨ + * + * @param key é”® + * @return true å˜åœ¨ falseä¸å˜åœ¨ + */ + public boolean hasKey(String key) { + try { + return getRedisTemplate().hasKey(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * åˆ é™¤ç¼“å˜ + * + * @param key å¯ä»¥ä¼ 一个值 或多个 + */ + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + getRedisTemplate().delete(key[0]); + } else { + getRedisTemplate().delete(CollectionUtils.arrayToList(key)); + } + } + } + + // ============================String============================= + + /** + * 普通缓å˜èŽ·å– + * + * @param key é”® + * @return 值 + */ + public Object get(String key) { + return key == null ? null : getRedisTemplate().opsForValue().get(key); + } + + /** + * 普通缓å˜æ”¾å…¥ + * + * @param key é”® + * @param value 值 + * @return trueæˆåŠŸ false失败 + */ + public boolean set(String key, Object value) { + try { + getRedisTemplate().opsForValue().set(key, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + + } + + /** + * 模糊查询 + * + * @param activityCode 查询è¯å¥ + * @return 查询结果 + */ + public Set keys(String activityCode) { + try { + StringBuilder sb = new StringBuilder(10); + sb.append(PREFIX).append(":") + .append(activityCode) + .append(":") + .append("*"); + return getRedisTemplate().keys(sb.toString()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * 普通缓å˜æ”¾å…¥å¹¶è®¾ç½®æ—¶é—´ + * + * @param key é”® + * @param value 值 + * @param time 时间(秒) timeè¦å¤§äºŽ0 如果timeå°äºŽç‰äºŽ0 å°†è®¾ç½®æ— é™æœŸ + * @return trueæˆåŠŸ false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + getRedisTemplate().opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 递增 + * + * @param key é”® + * @param delta è¦å¢žåŠ å‡ (大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("é€’å¢žå› å必须大于0"); + } + return getRedisTemplate().opsForValue().increment(key, delta); + } + + /** + * é€’å‡ + * + * @param key é”® + * @param delta è¦å‡å°‘å‡ (å°äºŽ0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递å‡å› å必须大于0"); + } + return getRedisTemplate().opsForValue().increment(key, -delta); + } + + // ================================Map================================= + + /** + * HashGet + * + * @param key é”® ä¸èƒ½ä¸ºnull + * @param item 项 ä¸èƒ½ä¸ºnull + * @return 值 + */ + public Object hget(String key, String item) { + return getRedisTemplate().opsForHash().get(key, item); + } + + /** + * 获å–hashKey对应的所有键值 + * + * @param key é”® + * @return 对应的多个键值 + */ + public Map<Object, Object> hmget(String key) { + return getRedisTemplate().opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key é”® + * @param map 对应多个键值 + * @return true æˆåŠŸ false 失败 + */ + public boolean hmset(String key, Map<String, Object> map) { + try { + getRedisTemplate().opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key é”® + * @param map 对应多个键值 + * @param time 时间(秒) + * @return trueæˆåŠŸ false失败 + */ + public boolean hmset(String key, Map<String, Object> map, long time) { + try { + getRedisTemplate().opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * å‘ä¸€å¼ hash表ä¸æ”¾å…¥æ•°æ®,如果ä¸å˜åœ¨å°†åˆ›å»º + * + * @param key é”® + * @param item 项 + * @param value 值 + * @return true æˆåŠŸ false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + getRedisTemplate().opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * å‘ä¸€å¼ hash表ä¸æ”¾å…¥æ•°æ®,如果ä¸å˜åœ¨å°†åˆ›å»º + * + * @param key é”® + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注æ„:如果已å˜åœ¨çš„hash表有时间,这里将会替æ¢åŽŸæœ‰çš„时间 + * @return true æˆåŠŸ false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + getRedisTemplate().opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * åˆ é™¤hash表ä¸çš„值 + * + * @param key é”® ä¸èƒ½ä¸ºnull + * @param item 项 å¯ä»¥ä½¿å¤šä¸ª ä¸èƒ½ä¸ºnull + */ + public void hdel(String key, Object... item) { + getRedisTemplate().opsForHash().delete(key, item); + } + + /** + * 判æ–hash表ä¸æ˜¯å¦æœ‰è¯¥é¡¹çš„值 + * + * @param key é”® ä¸èƒ½ä¸ºnull + * @param item 项 ä¸èƒ½ä¸ºnull + * @return true å˜åœ¨ falseä¸å˜åœ¨ + */ + public boolean hHasKey(String key, String item) { + return getRedisTemplate().opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果ä¸å˜åœ¨,就会创建一个 并把新增åŽçš„值返回 + * + * @param key é”® + * @param item 项 + * @param by è¦å¢žåŠ å‡ (大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return getRedisTemplate().opsForHash().increment(key, item, by); + } + + /** + * hashé€’å‡ + * + * @param key é”® + * @param item 项 + * @param by è¦å‡å°‘è®°(å°äºŽ0) + * @return + */ + public double hdecr(String key, String item, double by) { + return getRedisTemplate().opsForHash().increment(key, item, -by); + } + + // ============================set============================= + + /** + * æ ¹æ®key获å–Setä¸çš„所有值 + * + * @param key é”® + * @return + */ + public Set<Object> sGet(String key) { + try { + return getRedisTemplate().opsForSet().members(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * æ ¹æ®value从一个setä¸æŸ¥è¯¢,是å¦å˜åœ¨ + * + * @param key é”® + * @param value 值 + * @return true å˜åœ¨ falseä¸å˜åœ¨ + */ + public boolean sHasKey(String key, Object value) { + try { + return getRedisTemplate().opsForSet().isMember(key, value); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 将数æ®æ”¾å…¥setç¼“å˜ + * + * @param key é”® + * @param values 值 å¯ä»¥æ˜¯å¤šä¸ª + * @return æˆåŠŸä¸ªæ•° + */ + public long sSet(String key, Object... values) { + try { + return getRedisTemplate().opsForSet().add(key, values); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * å°†setæ•°æ®æ”¾å…¥ç¼“å˜ + * + * @param key é”® + * @param time 时间(秒) + * @param values 值 å¯ä»¥æ˜¯å¤šä¸ª + * @return æˆåŠŸä¸ªæ•° + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = getRedisTemplate().opsForSet().add(key, values); + if (time > 0) + expire(key, time); + return count; + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 获å–set缓å˜çš„长度 + * + * @param key é”® + * @return + */ + public long sGetSetSize(String key) { + try { + return getRedisTemplate().opsForSet().size(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 移除值为valueçš„ + * + * @param key é”® + * @param values 值 å¯ä»¥æ˜¯å¤šä¸ª + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = getRedisTemplate().opsForSet().remove(key, values); + return count; + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + // ===============================list================================= + + /** + * 获å–list缓å˜çš„内容 + * + * @param key é”® + * @param start 开始 + * @param end ç»“æŸ 0 到 -1代表所有值 + * @return + */ + public List<Object> lGet(String key, long start, long end) { + try { + return getRedisTemplate().opsForList().range(key, start, end); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * 获å–list缓å˜çš„长度 + * + * @param key é”® + * @return + */ + public long lGetListSize(String key) { + try { + return getRedisTemplate().opsForList().size(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 通过索引 获å–listä¸çš„值 + * + * @param key é”® + * @param index 索引 index>=0时, 0 表头,1 ç¬¬äºŒä¸ªå…ƒç´ ï¼Œä¾æ¬¡ç±»æŽ¨ï¼›index<0时,-1,表尾,-2å€’æ•°ç¬¬äºŒä¸ªå…ƒç´ ï¼Œä¾æ¬¡ç±»æŽ¨ + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return getRedisTemplate().opsForList().index(key, index); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * å°†listæ”¾å…¥ç¼“å˜ + * + * @param key é”® + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + getRedisTemplate().opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * å°†listæ”¾å…¥ç¼“å˜ + * + * @param key é”® + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + getRedisTemplate().opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * å°†listæ”¾å…¥ç¼“å˜ + * + * @param key é”® + * @param value 值 + * @return + */ + public boolean lSet(String key, List<Object> value) { + try { + getRedisTemplate().opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * å°†listæ”¾å…¥ç¼“å˜ + * + * @param key é”® + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List<Object> value, long time) { + try { + getRedisTemplate().opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * æ ¹æ®ç´¢å¼•ä¿®æ”¹listä¸çš„æŸæ¡æ•°æ® + * + * @param key é”® + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + getRedisTemplate().opsForList().set(key, index, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key é”® + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = getRedisTemplate().opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + public void deleteInvalidRedisKey(String activityCode) { + StringBuilder sb = new StringBuilder(10); + sb.append(PREFIX).append(":").append(activityCode).append(":").append("*"); + byte[] bytes = sb.toString().getBytes(Charset.defaultCharset()); + redisTemplate.execute(new RedisCallback() { + @Override + public Object doInRedis(RedisConnection connection) throws DataAccessException { + Set<byte[]> keys = connection.keys(bytes); + for (byte[] key : keys) { + connection.del(key); + } + return null; + } + }); + } + + private RedisTemplate getRedisTemplate() { + if (null == template) { + template = new RedisTemplate<String, Object>(); + template.setConnectionFactory(redisTemplate.getConnectionFactory()); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + // key采用Stringçš„åºåˆ—åŒ–æ–¹å¼ + template.setKeySerializer(stringRedisSerializer); + // hashçš„key也采用Stringçš„åºåˆ—åŒ–æ–¹å¼ + template.setHashKeySerializer(stringRedisSerializer); + // valueåºåˆ—化方å¼é‡‡ç”¨jackson + template.setValueSerializer(jackson2JsonRedisSerializer); + // hashçš„valueåºåˆ—化方å¼é‡‡ç”¨jackson + template.setHashValueSerializer(jackson2JsonRedisSerializer); + template.afterPropertiesSet(); + } + + return template; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/CachePrefix.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/CachePrefix.java new file mode 100644 index 0000000000000000000000000000000000000000..b3f7c04f94fea70e19960752361978ca9c069e0c --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/CachePrefix.java @@ -0,0 +1,16 @@ +package cn.wisenergy.service.common; + +/** + * @author 86187 + */ + +public enum CachePrefix { + /** + * çŸä¿¡éªŒè¯ç + */ + SMS_CODE; + + public String getPrefix() { + return this.name() + "_"; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/Common.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/Common.java new file mode 100644 index 0000000000000000000000000000000000000000..ad0cd3c06a42d87bc17b8966a95a1ff668137b00 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/Common.java @@ -0,0 +1,90 @@ +package cn.wisenergy.service.common; + +/** + * @author 86187 + * @ Description : 对接接å£è°ƒç”¨å…¬å…±å‚æ•°å°è£… + * @ Author : lcc + * @ CreateDate : 2020/11/8 20:35 + */ +public class Common { + + /** + * é‡ç½®å¯†ç + */ + public static final String RESET_PASSWORD_VALUE = "123456"; + + /** + * 阿里云çŸä¿¡accessKeyId + */ + public static final String ACCESS_KEY_ID = "LTAIuFVMscvCNpMU"; + + + /** + * 阿里云çŸä¿¡secret + */ + public static final String SMS_SECRET = "AvotjHvvGzEm8sX9vZaUhVypnZfUk7"; + + /** + * 阿里云çŸä¿¡è¶…时时间 + */ + public static final long SMS_TIMEOUT = 1200; + + /** + * 支付å®æ”¯ä»˜app_id + */ + + public static final String PAY_URL = "https://openapi.alipay.com/gateway.do"; + public static final String APP_ID = "2021002126609937"; + + public static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk3F1VulieP0smmNEyEHLWS0l" + + "wKOlaLA3xMkfbNK4Hn1D6MtLvU58IBboh0JkZbcBPCVEK9Ma6VT3Q0wofYwy2dosHskTNIuBi4N8EuHvss7f1/x/rb7nI7QbuSlualx5MlD" + + "3cLIRm84QqEMeF1ndVAIDA3mA24BdxIuCmS7THHn46wZ9/KaudNq84XxRmy+JHAnQxj5+8pvCAdpA12hP7gTfj0ySRZDVvA3gks8yjlf4SGK" + + "TqNDhM3AewWlwygEHUJPlL04JUm/lG3Q9viaqZv4SGv/MeUw0qXqpPuq9JzJUCmZjYq1gKXsqP3FMg8zBrLiZCjpoLa2ra7f6PbdtIwIDAQAB"; + + public static final String PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCTcXVW6WJ4/" + + "SyaY0TIQctZLSXAo6VosDfEyR9s0rgefUPoy0u9TnwgFuiHQmRltwE8JUQr0xrpVPdDTCh9jDLZ2iweyRM0i4GLg3wS4e+yzt/" + + "X/H+tvucjtBu5KW5qXHkyUPdwshGbzhCoQx4XWd1UAgMDeYDbgF3Ei4KZLtMcefjrBn38pq502rzhfFGbL4kcCdDGPn7ym8IB2kDXaE/" + + "uBN+PTJJFkNW8DeCSzzKOV/hIYpOo0OEzcB7BaXDKAQdQk+UvTglSb+UbdD2+Jqpm/hIa/8x5TDSpeqk+6r0nMlQKZmNirWApeyo/" + + "cUyDzMGsuJkKOmgtratrt/o9t20jAgMBAAECggEAHTjmdbRJ1QrwlSTJlBseL214RwboGKicVP87oDjfTwOquu/" + + "X8gwlI8MGkRBCj7pGn2IPcdQkSEyTuR3WBJQN3AmWpv9ZNBfWNA16QM/QzxKbYNZlg80LSJNAz2D7xk7Pon5TnF1eig+8U20CAMTJzgWcDUs" + + "+k8KMUxEHcE7Mfp8KkG0sRPwZa9DqfuC4WOQuik9L6OphhVDrxnCGBKTW/KC1k2HfU25dMUDoirqY7fMbASJBkT14JO6o/" + + "I0BBJU++ddfYpXTd2X6Lywy4PqJdstllHxzLxSJqPKgjk9Qd/iVozuHDDSuBvEp1a1DBOsjFHz0TGxmCoP2mrEN4e6WsQKBgQD6GnTuVUcI4" + + "UxaeHrj6sSiWTsBOXsXYrrmk380RTUEwzPdExFfvV4wkf48BQsUqCl6R+CdWSbcbRriXTJ6hlZ37IPuqmJ4me++LlDE9MrfRg1m0qkOFyVC" + + "1ysAw+0i0EPjj5eeXguvoZ6RarDPI9hWM6m2dAGclkwFq2FBN3yzGQKBgQCW62DEh6eTmnyzBiQcojyEhY44Vp3y6RebXqlS/O1kpEn1sT1" + + "U6xBwE2na1udDv9PFzA6SapDw9ZRJWxbxgL07tG3A6V9p6MdjeCh/IR1OqO9STH8xag+YNwS28rSf+IEuM7bRUl6ESp9EXIt/jxh3syjYl" + + "j9ecdXypJNWFeOFmwKBgQCR4PCnO1JtmYwBkRiM7Bi5YTaLZk2nvEyrxQiDIoLkPj94CXEu2LOhvOX/eCmYaOWYj2gyHxgNpg3yTs3srYKt/" + + "GSPxw4crh0qXrV5zBaw2JlkiidVMqbnL73DeoRMtBGFH/Idy1khnjFxPDvY9l1vGj85TrzJ6th4zheyBH1VsQKBgDSXdbNG6pi/PzFLtI3d" + + "42Ty/aqYVJZvr/BOvobS6Q8nSTa7Ovo6qBHGUh8WwKSVVoEZKQLQ7A1sJu6hNY+XI1qI965AJSXNHp6FIueabJIawLtXOQPJSAHtOlFepp8" + + "QhEPLdavgHlvPfUzfSyV6gjZEUrmXMiIBXWMfAtD+87h9AoGANzOybVuH7XaPJfGFuKAMLSdsDUFFEAVkC37XF6nl5k1bC1LmHM2iJltmSh" + + "N2nwJavbtbvycOFhLxRNNkhBDj3oZ8F/93vzyn1M/s0/y7ONUtBIqLdLAT9Q84xxVBFdOvVdja20J1NuQ8yYD4qInO/WcX2MOLXeCaGfMOg1XWaa0="; + + + /** + * 沙箱 --支付å®æ”¯ä»˜app_id + */ + public static final String APP_ID_CS = "2021000117607483"; + + public static final String ALIPAY_PUBLIC_KEY_CS = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh5uAe8quhr05KrOnJ5Jrrp" + + "TphjEoFR4VnHFy9QDRoHK6ouFIz7ksCw6LS7A/S3Yhe3+bZbcvmJSKN1pVO6ssa8iuai81NAnylMZm5tOTaMl945OuqmC8qvIk9wg4AkYd" + + "TWSFRxDmQ1aZ711iyDUDtSYi0bQeS5s2OR9cGowwAsqyrMPYCT47f/+VmyftJcn3k3rS1+fo2dJTEmoeSCrg3oAMV5dL5iTzi5ehvWUWJR" + + "YejyOi54Qtxjz5Nsp1I68BxHT2d8QFeKBgad0w83975tKauHgKHsQE3+TnQzOgyQo8XQB/5dWq3COO7ACNwK1TlPcyxKO1QRX1egW6bysySQIDAQAB"; + + public static final String PRIVATE_KEY_CS = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHm4B7yq6GvTkqs6cnkmu" + + "ulOmGMSgVHhWccXL1ANGgcrqi4UjPuSwLDotLsD9LdiF7f5tlty+YlIo3WlU7qyxryK5qLzU0CfKUxmbm05NoyX3jk66qYLyq8iT3CDg" + + "CRh1NZIVHEOZDVpnvXWLINQO1JiLRtB5LmzY5H1wajDACyrKsw9gJPjt//5WbJ+0lyfeTetLX5+jZ0lMSah5IKuDegAxXl0vmJPOLl6G9" + + "ZRYlFh6PI6LnhC3GPPk2ynUjrwHEdPZ3xAV4oGBp3TDzf3vm0pq4eAoexATf5OdDM6DJCjxdAH/l1arcI47sAI3ArVOU9zLEo7VBFfV6" + + "BbpvKzJJAgMBAAECggEAQec2t/K2gtDvOWt57udf4caI/yhgnHK0egVAowU0208mmQX3hswtNWpqE+yhtiDBAO3xLaurO/HkgiYqigcUXY" + + "V4Di7HInU7KUaKt99XInPZ9IHPPwooZsOrZ0rdPW2py/TwOKtj3JH32bZ+zWHGXYEdJuDsYD4cSgKNlnFO2+u/uS2RRhsTEX7veE1ivlPB" + + "Ta0hRo+XHcBrrXobZUtFFtE8zxvKOWDMj87WpsLDdXJ1Ze2CZXsdEtuIcfp51Gzx1or+2WrYwoiIAYTNN+oG1JT6pld9l9m1EqVzMPPSmE" + + "/tyyIV4Zb1qjGveH1SPEncIdGOiEH1rOsBvS/E4EDEoQKBgQDvdFgh3Xmtrr47515d+e5sAAZav34IuoEzmih6zXCvLASsG64gsgfoyb2aD" + + "/N9hcTtVFrEDrJSLknNMJcvh1xkmPc1xBeBCLlrrzlyt4hoth1b6ZfdKC7jkhmd0mUylOagsdYGOZ3qT0+ykO449HmE0bQDLWzinw1p15b" + + "/nVx3vQKBgQCQ+jsct+C1Y+1AoYC2o3yCvTcaErdH6Pxk8sCYP18sIml4kb+WUgFgd1THFwgHDu3S4VmkfEcjnIKqioqQCEMyEF2K6RAFu" + + "Ffpw+ianx+9V84GDS7Aov8PKwTWg8RjFBSkHZ+Xl3ERGCyI/NDBCUF8Amiv12IMyVkkWUsrqxnXfQKBgQCGh8MMI7Y9EjPmy/KEsep12v2" + + "29mcE2GPGbhHYDJwGjqCBYXvO+rbe3pkbeWK/Xuxouj/Ubr1Y1pC4K1iFZ3NNQXOCTY02/YPPMD8CaILG8apE/VRI+E5/pJGnzZD1fhqkp" + + "cUs8in6fly0YiC09wVezcJpFphaKioLEQjQy8QrsQKBgGC92bwsJ1JjP+ok2xMEvQ0w3hgT7SGbIvDp3AK8JvH4dJD0EPhp+Gk6t+OyRrUP" + + "DTvvDDZqh74HrlnG4PeDy/MYYJNVOk/W1zMye4DSNgfPE7eODGiXW8PvXOcYPnAu8ichbWFmuRhDHVS7/0EQwBXUNa9A9ji6EzXiL/sPzc" + + "qxAoGAQbxdsp2Omd1cXvaofq+nllbyM04WbYib5bxm+zNgOszWnoIhgR95InA7BWtGnJsjmJqz3/Dwgzzpn+vXiB+6mhj/EP932HWcL7wv" + + "3nMhU06E1T/eQ7hKX8QlmjEIhnWEN7A9lXtwW85/7tpuWs6qbv0YWYze1CcDN3Fr+II2BcA="; + + public static final String PAY_URL_CS = "https://openapi.alipaydev.com/gateway.do"; +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/PdfUtil.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/PdfUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..55664a15c5096867eb81a81e39cb83ea00174e6b --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/PdfUtil.java @@ -0,0 +1,231 @@ +package cn.wisenergy.service.common; + +import cn.wisenergy.model.app.SchemeQueryRecord; +import cn.wisenergy.model.app.Volunteer; +import com.itextpdf.text.*; +import com.itextpdf.text.pdf.BaseFont; +import com.itextpdf.text.pdf.PdfPCell; +import com.itextpdf.text.pdf.PdfPTable; + +import java.io.Serializable; +import java.util.List; + +/** + * 创建PDF工具类 + */ +public class PdfUtil implements Serializable { + private static final long serialVersionUID = -8441049720133017215L; + // 定义全局的å—体é™æ€å˜é‡ + private static Font titlefont; + private static Font headfont; + private static Font keyfont; + private static Font textfont; + + //åºå· + private Integer id=0; + + // 最大宽度 + private static int maxWidth = 520; + + // é™æ€ä»£ç å— + static { + try { + // ä¸åŒå—体(这里定义为åŒä¸€ç§å—体:包å«ä¸åŒå—å·ã€ä¸åŒstyle) + BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + titlefont = new Font(bfChinese, 16, Font.BOLD); + headfont = new Font(bfChinese, 14, Font.BOLD); + keyfont = new Font(bfChinese, 10, Font.BOLD); + textfont = new Font(bfChinese, 10, Font.NORMAL); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + // 生æˆPDF文件 + public void generatePDF(Document document, List<Volunteer> list, String queryRecordTime) throws Exception { + + + // è¡¨æ ¼ + PdfPTable table = createTable(new float[] { 40,80,80, 80, 80, 80, 80, 80, 40, 40, 40 }); + table.addCell(createCell("查询时间:"+queryRecordTime,headfont,Element.ALIGN_LEFT, 11, false)); + table.addCell(createCell("åºå·", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("专业", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("é™¢æ ¡", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("选考科目è¦æ±‚", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("å¦æ ¡æ€§è´¨", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("å¦åˆ¶ï¼ˆå¹´ï¼‰", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("计划数", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("投档计划数", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("投出数", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("最低分", keyfont, Element.ALIGN_CENTER)); + table.addCell(createCell("最低ä½æ¬¡", keyfont, Element.ALIGN_CENTER)); + for (Volunteer volunteer : list) + { + table.addCell(createCell((++id).toString() , textfont)); + table.addCell(createCell(volunteer.getMajorName(), textfont)); + table.addCell(createCell(volunteer.getAcademy(), textfont)); + table.addCell(createCell(volunteer.getCourseDemand(), textfont)); + table.addCell(createCell(volunteer.getNature(), textfont)); + table.addCell(createCell(volunteer.getYearLimit().toString(), textfont)); + table.addCell(createCell(volunteer.getPlanNum().toString(), textfont)); + table.addCell(createCell(null==volunteer.getCastArchivesNum()?"":volunteer.getCastArchivesNum().toString(), textfont)); + table.addCell(createCell(null==volunteer.getLaunchNum()?"":volunteer.getLaunchNum().toString(), textfont)); + table.addCell(createCell(null==volunteer.getLowestMark()?"":volunteer.getLowestMark(), textfont)); + table.addCell(createCell(null==volunteer.getLowestRank()?"":volunteer.getLowestRank(), textfont)); + } + document.add(table); + } + + +/**------------------------åˆ›å»ºè¡¨æ ¼å•å…ƒæ ¼çš„方法start----------------------------*/ + /** + * 创建å•å…ƒæ ¼(指定å—体) + * @param value + * @param font + * @return + */ + public PdfPCell createCell(String value, Font font) { + PdfPCell cell = new PdfPCell(); + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); + cell.setHorizontalAlignment(Element.ALIGN_CENTER); + cell.setPhrase(new Phrase(value, font)); + return cell; + } + /** + * 创建å•å…ƒæ ¼ï¼ˆæŒ‡å®šå—体ã€æ°´å¹³..) + * @param value + * @param font + * @param align + * @return + */ + public PdfPCell createCell(String value, Font font, int align) { + PdfPCell cell = new PdfPCell(); + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); + cell.setHorizontalAlignment(align); + cell.setPhrase(new Phrase(value, font)); + return cell; + } + /** + * 创建å•å…ƒæ ¼ï¼ˆæŒ‡å®šå—体ã€æ°´å¹³å±…..ã€å•å…ƒæ ¼è·¨x列åˆå¹¶ï¼‰ + * @param value + * @param font + * @param align + * @param colspan + * @return + */ + public PdfPCell createCell(String value, Font font, int align, int colspan) { + PdfPCell cell = new PdfPCell(); + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); + cell.setHorizontalAlignment(align); + cell.setColspan(colspan); + cell.setPhrase(new Phrase(value, font)); + return cell; + } + /** + * 创建å•å…ƒæ ¼ï¼ˆæŒ‡å®šå—体ã€æ°´å¹³å±…..ã€å•å…ƒæ ¼è·¨x列åˆå¹¶ã€è®¾ç½®å•å…ƒæ ¼å†…è¾¹è·ï¼‰ + * @param value + * @param font + * @param align + * @param colspan + * @param boderFlag + * @return + */ + public PdfPCell createCell(String value, Font font, int align, int colspan, boolean boderFlag) { + PdfPCell cell = new PdfPCell(); + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); + cell.setHorizontalAlignment(align); + cell.setColspan(colspan); + cell.setPhrase(new Phrase(value, font)); + cell.setPadding(3.0f); + if (!boderFlag) { + cell.setBorder(0); + cell.setPaddingTop(15.0f); + cell.setPaddingBottom(8.0f); + } else if (boderFlag) { + cell.setBorder(0); + cell.setPaddingTop(0.0f); + cell.setPaddingBottom(15.0f); + } + return cell; + } + /** + * 创建å•å…ƒæ ¼ï¼ˆæŒ‡å®šå—体ã€æ°´å¹³..ã€è¾¹æ¡†å®½åº¦ï¼š0è¡¨ç¤ºæ— è¾¹æ¡†ã€å†…è¾¹è·ï¼‰ + * @param value + * @param font + * @param align + * @param borderWidth + * @param paddingSize + * @param flag + * @return + */ + public PdfPCell createCell(String value, Font font, int align, float[] borderWidth, float[] paddingSize, boolean flag) { + PdfPCell cell = new PdfPCell(); + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); + cell.setHorizontalAlignment(align); + cell.setPhrase(new Phrase(value, font)); + cell.setBorderWidthLeft(borderWidth[0]); + cell.setBorderWidthRight(borderWidth[1]); + cell.setBorderWidthTop(borderWidth[2]); + cell.setBorderWidthBottom(borderWidth[3]); + cell.setPaddingTop(paddingSize[0]); + cell.setPaddingBottom(paddingSize[1]); + if (flag) { + cell.setColspan(2); + } + return cell; + } +/**------------------------åˆ›å»ºè¡¨æ ¼å•å…ƒæ ¼çš„方法end----------------------------*/ + + +/**--------------------------åˆ›å»ºè¡¨æ ¼çš„æ–¹æ³•start------------------- ---------*/ + /** + * 创建默认列宽,指定列数ã€æ°´å¹³(å±…ä¸ã€å³ã€å·¦)çš„è¡¨æ ¼ + * @param colNumber + * @param align + * @return + */ + public PdfPTable createTable(int colNumber, int align) { + PdfPTable table = new PdfPTable(colNumber); + try { + table.setTotalWidth(maxWidth); + table.setLockedWidth(true); + table.setHorizontalAlignment(align); + table.getDefaultCell().setBorder(1); + } catch (Exception e) { + e.printStackTrace(); + } + return table; + } + /** + * 创建指定列宽ã€åˆ—æ•°çš„è¡¨æ ¼ + * @param widths + * @return + */ + public PdfPTable createTable(float[] widths) { + PdfPTable table = new PdfPTable(widths); + try { + table.setTotalWidth(maxWidth); + table.setLockedWidth(true); + table.setHorizontalAlignment(Element.ALIGN_CENTER); + table.getDefaultCell().setBorder(1); + } catch (Exception e) { + e.printStackTrace(); + } + return table; + } + /** + * åˆ›å»ºç©ºç™½çš„è¡¨æ ¼ + * @return + */ + public PdfPTable createBlankTable() { + PdfPTable table = new PdfPTable(1); + table.getDefaultCell().setBorder(0); + table.addCell(createCell("", keyfont)); + table.setSpacingAfter(20.0f); + table.setSpacingBefore(20.0f); + return table; + } + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/RefillCardManager.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/RefillCardManager.java new file mode 100644 index 0000000000000000000000000000000000000000..e4988b21a17567e3209641a944f48ba62df7e677 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/RefillCardManager.java @@ -0,0 +1,60 @@ +package cn.wisenergy.service.common; + +import cn.wisenergy.common.utils.CardNumberUtil; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.common.utils.SecretkeyUtil; +import cn.wisenergy.mapper.CardMapper; +import cn.wisenergy.mapper.RefillCardMapper; +import cn.wisenergy.model.app.CardInfo; +import cn.wisenergy.model.app.RefillCard; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; + +/** + * @author 86187 + */ +@Component +@Slf4j +public class RefillCardManager { + + @Autowired + private RefillCardMapper refillCardMapper; + + @Autowired + private CardMapper cardMapper; + + @Transactional(rollbackFor = Exception.class) + public R<Boolean> addCardMannger(RefillCard byId){ + //获å–充值å¡çš„å¡æ•°ï¼Œå¹¶ç”Ÿæˆå¡ç‰‡ + ArrayList<CardInfo> cardInfos = new ArrayList<>(); + + //åå¡æ·»åŠ + for (int i = 0; i < byId.getCardNumber(); i++) { + CardInfo cardInfo = new CardInfo(); + cardInfo.setBatchNumber(byId.getBatchNumber()); + cardInfo.setIsDelete(0); + cardInfo.setMoney("498"); + cardInfo.setStatus(0); + cardInfo.setLimit(3); + cardInfo.setSecretKey(SecretkeyUtil.getSecretkey()); + cardInfo.setCardNumber(CardNumberUtil.cardNumber()); + cardInfos.add(cardInfo); + } + int add1 = cardMapper.add(cardInfos); + + if (add1==0) { + return R.ok(1,false); + } + int isMakeCard = refillCardMapper.setIsMakeCard(byId.getId()); + + if (isMakeCard==0) { + return R.ok(1,false); + } + return R.ok(0,true); + + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerListener.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerListener.java new file mode 100644 index 0000000000000000000000000000000000000000..7fa2e1f36de52b09b7a56a099febcb017345b114 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerListener.java @@ -0,0 +1,151 @@ +package cn.wisenergy.service.common; + +import cn.wisenergy.model.app.Volunteer; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.metadata.Head; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; + +import java.util.*; + +/** + * Excel批é‡æ·»åŠ 社区居民 监å¬å™¨ + * + * @author 86187 + */ +@Slf4j +public class VolunteerListener extends AnalysisEventListener<Volunteer> { + + private List<Volunteer> list=new ArrayList<>(); + private final int batch = 50000; + + /** + * 导入模æ¿å¤´å†…容 + */ + private Map<Integer, String> headMap = new HashMap<>(); + + /** + * ç»“æžœæ ‡è®° 默认错误 + */ + private boolean isCorrectFormat = true; + + + /** + * 这个æ¯ä¸€æ¡æ•°æ®è§£æžéƒ½ä¼šæ¥è°ƒç”¨ == + * + * @param volunteer å¿—æ„¿ä¿¡æ¯ + * @param analysisContext + */ + @Override + public void invoke(Volunteer volunteer, AnalysisContext analysisContext) { + if (!isCorrectFormat) { + //æ ¼å¼æ˜¯å¦æ£ç¡® + return; + } + log.info("解æžåˆ°ä¸€æ¡å¿—æ„¿æ•°æ®>>>>>>>>>>:{}", volunteer); + //æ¤å¤„åšæ ¡éªŒ æœ¬æ¬¡æ²¡æœ‰æ ¡éªŒ + if (volunteer != null) { + volunteer.setIsDelete(0); + volunteer.setCreateTime(new Date()); + volunteer.setUpdateTime(new Date()); + if (StringUtils.isEmpty(volunteer.getMajorName())) { + throw new RuntimeException("专业ä¸èƒ½ä¸ºç©ºï¼"); + } + + if (StringUtils.isEmpty(volunteer.getAcademy())) { + throw new RuntimeException("é™¢æ ¡ä¸èƒ½ä¸ºç©ºï¼"); + } + + + if (StringUtils.isEmpty(volunteer.getCourseDemand())) { + throw new RuntimeException("选考科目è¦æ±‚ä¸èƒ½ä¸ºç©ºï¼"); + } + + if (StringUtils.isEmpty(volunteer.getNature())) { + throw new RuntimeException("å¦æ ¡ä¸èƒ½ä¸ºç©ºï¼"); + } + + if (null == volunteer.getYearLimit()) { + throw new RuntimeException("å¦å¹´åˆ¶ä¸èƒ½ä¸ºç©ºï¼"); + } + + if (null == volunteer.getPlanNum()) { + throw new RuntimeException("计划数数ä¸èƒ½ä¸ºç©ºï¼"); + } + + if (StringUtils.isEmpty(volunteer.getLowestMark())) { + throw new RuntimeException("最低分ä¸èƒ½ä¸ºç©ºï¼"); + } + + list.add(volunteer); + } + } + + /** + * 所有数æ®è§£æžå®Œæˆäº† 都会æ¥è°ƒç”¨ + * + * @param analysisContext + */ + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { +// log.info("doAfterAllAnalysed解æžçŽ©ä¸€ä¸ªå¿—æ„¿sheet工作表>>>>>>>>>>"); +// //如果集åˆä¸ä¸ºç©º +// if (!CollectionUtils.isEmpty(list)) { +// log.info("批é‡æ’入志愿数æ®ï¼Œæ¡æ•°ä¸º>>>>>>>>>>:{}", list.size()); +// if (list.size() > 0) { +// volunteerService.saveBatch(list); +// } +// } + } + + + public List<Volunteer> getList() { + List<Volunteer> result = new ArrayList<>(); + result.addAll(list); + return result; + } + + public void setList(List<Volunteer> list) { + this.list = list; + } + + + /** + * æ ¡éªŒå¯¼å…¥æ¨¡æ¿è¡¨å¤´æ˜¯å¦æ£ç¡® + * + * @param headMap 表头 + * @param context + */ + @Override + public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { + //是å¦æ‰‹åŠ¨ä¼ å…¥è¡¨å¤´ä¿¡æ¯ æ²¡æœ‰åˆ™è‡ªåŠ¨è¯»å–å®žä½“ç±»å¤´ä¿¡æ¯ + try { + if (this.headMap == null || this.headMap.size() <= 0) { + Map<Integer, Head> map = context.currentReadHolder().excelReadHeadProperty().getHeadMap(); + for (int i = 0; i < map.size(); i++) { + //å°è£…æˆheadMap + this.headMap.put(map.get(i).getColumnIndex(), map.get(i).getHeadNameList().get(0)); + } + } + } catch (Exception e) { + isCorrectFormat = false; + throw new RuntimeException("导入失败,请è”系管ç†å‘˜ï¼"); + } + + if (this.headMap == null || headMap == null || this.headMap.size() != headMap.size()) { + isCorrectFormat = false; + throw new RuntimeException("导入表的表头与模æ¿è¡¨å¤´ä¸ç¬¦!"); + } else { + for (int i = 0; i < this.headMap.size(); i++) { + //循环é历判æ–è¡¨æ ¼å¤´æ˜¯å¦ä¸€ä¸€å¯¹åº” + if (!this.headMap.get(i).equals(headMap.get(i))) { + isCorrectFormat = false; + throw new RuntimeException("导入表的表头与模æ¿è¡¨å¤´ä¸ç¬¦!"); + } + } + } + + } + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java new file mode 100644 index 0000000000000000000000000000000000000000..d2f97efe29caa43ff3814425d843066b72a798e1 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java @@ -0,0 +1,415 @@ +package cn.wisenergy.service.common; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.mapper.*; +import cn.wisenergy.model.app.*; +import cn.wisenergy.model.enums.CardStatus; +import cn.wisenergy.model.enums.OperationTypeEnum; +import cn.wisenergy.model.enums.PayType; +import cn.wisenergy.model.vo.AddLimitVo; +import cn.wisenergy.model.vo.UserInfoVo; +import cn.wisenergy.service.app.UserLimitService; +import cn.wisenergy.service.app.UserVolunteerService; +import cn.wisenergy.service.app.VolunteerService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author 86187 + * @ Description: 事务方法公共类 + * @ Author : 86187 + * @ Date : 2021/1/28 15:59 + */ +@Component +@Slf4j +public class VolunteerManager { + + @Autowired + private UserLimitMapper userLimitMapper; + + @Autowired + private UserLimitRecordMapper userLimitRecordMapper; + + @Autowired + private CardMapper cardMapper; + + @Autowired + private PayRecordMapper payRecordMapper; + + @Autowired + private SchemeRecordMapper schemeRecordMapper; + + @Autowired + private UserVolunteerService userVolunteerService; + + @Autowired + private UsersMapper usersMapper; + + @Autowired + private ScoreInfoMapper scoreInfoMapper; + + @Autowired + private SchemeMapper schemeMapper; + + @Autowired + private VolunteerService volunteerService; + + @Autowired + private VolunteerMapper volunteerMapper; + + @Autowired + private UserLimitService userLimitService; + + @Autowired + private LoginRecordMapper loginRecordMapper; + + /** + * 错误ç + */ + private static final int ERROR_CODE = 1; + + /** + * 副科是å…选三科 + */ + private static final int CLASS_COUNT = 3; + + /** + * 更新用户查询信æ¯å¹¶ä¿å˜æ‰£å‡è®°å½• + * + * @param userLimit æŸ¥è¯¢ä¿¡æ¯ + * @return true or false + */ + @Transactional(rollbackFor = Exception.class) + public boolean updateLimitSaveRecord(UserLimit userLimit) { + //1ã€æ›´æ–°æŸ¥è¯¢ä¿¡æ¯ + int count = userLimitMapper.edit(userLimit); + if (count == 0) { + return false; + } + + //2ã€ä¿å˜æ‰£å‡è®°å½• + UserLimitRecord userLimitRecord = new UserLimitRecord(); + userLimitRecord.setMinusLimit(1); + userLimitRecord.setUserLimitId(userLimit.getId()); + userLimitRecord.setUserId(userLimit.getUserId()); + int record = userLimitRecordMapper.add(userLimitRecord); + + if (record == 0) { + return false; + } + return true; + } + + /** + * 更新充值å¡çŠ¶æ€å’Œç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°åŠå¢žåŠ 充值记录 + * + * @param cardInfo 充值å¡ä¿¡æ¯ + * @param userLimit ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + * @param addLimitVo 接å£å…¥å‚ + */ + @Transactional(rollbackFor = Exception.class) + public Boolean updateLimitAndRecord(Price price, CardInfo cardInfo, UserLimit userLimit, AddLimitVo addLimitVo) { + + //æ˜¯å……å€¼å¡ + if (PayType.REFILL_CARD.getCode().equals(addLimitVo.getPayType())) { + //1ã€æ›´æ–°å……值å¡çŠ¶æ€ + cardInfo.setStatus(CardStatus.ALREADY_USED.getCode()); + int count = cardMapper.edit(cardInfo); + if (count == 0) { + return false; + } + + //2ã€æ›´æ–°ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + int limit = userLimitMapper.edit(userLimit); + if (limit == 0) { + return false; + } + + //3ã€ä¿å˜å……值记录 + PayRecord payRecord = new PayRecord(); + payRecord.setCardId(cardInfo.getId()); + payRecord.setMoney(Integer.valueOf(cardInfo.getMoney())); + payRecord.setPayLimit(cardInfo.getLimit()); + payRecord.setResult(0); + payRecord.setType(addLimitVo.getPayType()); + payRecord.setUserId(addLimitVo.getUserId()); + int pay = payRecordMapper.add(payRecord); + if (pay == 0) { + return false; + } + } else { + //1ã€æ›´æ–°ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°ä¿¡æ¯ + int limit = userLimitMapper.edit(userLimit); + if (limit == 0) { + return false; + } + + //2ã€ä¿å˜å……值记录 + PayRecord payRecord = new PayRecord(); + payRecord.setCardId(null); + payRecord.setMoney(addLimitVo.getPayMoney()); + payRecord.setPayLimit(price.getUseLimit()); + payRecord.setResult(0); + payRecord.setType(addLimitVo.getPayType()); + payRecord.setUserId(addLimitVo.getUserId()); + int pay = payRecordMapper.add(payRecord); + if (pay == 0) { + return false; + } + } + + return true; + } + + /** + * ä¿å˜æ–¹æ¡ˆæŸ¥è¯¢è®°å½•å’Œå…³è”关系 + * + * @param user ç”¨æˆ·ä¿¡æ¯ + * @param list å¿—æ„¿ä¿¡æ¯ + * @return true æˆåŠŸ false 失败 + */ + @Transactional(rollbackFor = Exception.class) + public R<Integer> saveUserVolunteer(User user, List<Volunteer> list, ScoreInfo scoreInfo, String name) { + //1ã€ä¿å˜æ–¹æ¡ˆæŸ¥è¯¢è®°å½• + SchemeQueryRecord schemeQueryRecord = new SchemeQueryRecord(); + schemeQueryRecord.setMajorName(name); + schemeQueryRecord.setStudentType(user.getExamType()); + schemeQueryRecord.setUserId(user.getId()); + schemeQueryRecord.setIsDelete(0); + schemeQueryRecord.setMajorScore(scoreInfo.getMajorGrade().toString()); + schemeQueryRecord.setScore(scoreInfo.getCultureGrade().toString()); + + List<Integer> ids = list.stream().map(Volunteer::getId).collect(Collectors.toList()); + //ä¿å˜æ–¹æ¡ˆæŸ¥è¯¢è®°å½• + int count = schemeRecordMapper.add(schemeQueryRecord); + if (count == 0) { + return R.error("ä¿å˜æ–¹æ¡ˆæŸ¥è¯¢è®°å½•å¤±è´¥!"); + } + + List<UserVolunteer> volunteerList = new ArrayList<>(); + for (Integer id : ids) { + UserVolunteer userVolunteer = new UserVolunteer(); + userVolunteer.setSchemeRecordId(schemeQueryRecord.getId()); + userVolunteer.setUserId(user.getId()); + userVolunteer.setVolunteerId(id); + volunteerList.add(userVolunteer); + } + + //调用扣å‡æŸ¥è¯¢æ¬¡æ•°æŽ¥å£ + R<Boolean> result = userLimitService.minusLimit(user.getId()); + if (null != result && result.getCode() == ERROR_CODE) { + return R.error("扣å‡æŸ¥è¯¢æ¬¡æ•°å¤±è´¥!"); + } + + //ä¿å˜æ–¹æ¡ˆå¿—æ„¿å…³è”关系 + boolean bool = userVolunteerService.saveBatch(volunteerList); + if (!bool) { + return R.error("ä¿å˜æ–¹æ¡ˆå¿—æ„¿å…³è”关系失败!"); + } + return R.ok(schemeQueryRecord.getId()); + } + + /** + * ä¿å˜ä¸ªäººä¿¡æ¯ + * + * @param user ç”¨æˆ·ä¿¡æ¯ + * @param scoreInfo æˆç»©ä¿¡æ¯ + * @return true or false + */ + @Transactional(rollbackFor = Exception.class) + public boolean updateAndSaveUserInfo(User user, ScoreInfo scoreInfo) { + //1ã€æ›´æ–°ç”¨æˆ·ä¿¡æ¯ + int count = usersMapper.edit(user); + if (count == 0) { + return false; + } + + //2ã€ä¿å˜ç”¨æˆ·æˆç»©ä¿¡æ¯ + if (null == scoreInfo.getMajorGrade()) { + scoreInfo.setMajorGrade(0.00); + } + + int save = scoreInfoMapper.add(scoreInfo); + if (save == 0) { + return false; + } + + return true; + } + + /** + * ç¼–è¾‘ä¸ªäººä¿¡æ¯ + * + * @param user ç”¨æˆ·ä¿¡æ¯ + * @param scoreInfo æˆç»©ä¿¡æ¯ + * @return true or false + */ + @Transactional(rollbackFor = Exception.class) + public boolean updateAndUserInfo(User user, ScoreInfo scoreInfo) { + //1ã€æ›´æ–°ç”¨æˆ·ä¿¡æ¯ + int count = usersMapper.edit(user); + if (count == 0) { + return false; + } + + //2ã€ä¿å˜ç”¨æˆ·æˆç»©ä¿¡æ¯ + int save = scoreInfoMapper.edit(scoreInfo); + if (save == 0) { + return false; + } + + return true; + } + + /** + * ä¿å˜æ–¹æ¡ˆå’Œå¿—æ„¿ä¿¡æ¯ + * + * @param schemeInfo æ–¹æ¡ˆä¿¡æ¯ + * @param list å¿—æ„¿ä¿¡æ¯ + */ + @Transactional(rollbackFor = Exception.class) + public void saveSchemeAndVolunteer(SchemeInfo schemeInfo, List<Volunteer> list) { + //1ã€ä¿å˜æ–¹æ¡ˆä¿¡æ¯ + int count = schemeMapper.add(schemeInfo); + if (count == 0) { + throw new RuntimeException("ä¿å˜æ–¹æ¡ˆä¿¡æ¯å¤±è´¥!"); + } + + //ä¿å˜å¿—æ„¿ä¿¡æ¯ + for (Volunteer volunteer : list) { + volunteer.setSchemeId(schemeInfo.getId()); + volunteer.setType(schemeInfo.getType()); + } + boolean bool = volunteerService.saveBatch(list); + if (!bool) { + throw new RuntimeException("ä¿å˜å¿—æ„¿ä¿¡æ¯å¤±è´¥!"); + } + } + + /** + * åˆ é™¤æ–¹æ¡ˆå¿—æ„¿ + * + * @param schemeInfo æ–¹æ¡ˆä¿¡æ¯ + * @param schemeId 方案id + * @param size å¿—æ„¿æ•°æ®æ¡æ•° + * @return true or false + */ + @Transactional(rollbackFor = Exception.class) + public boolean deleteSchemeAndVolunteer(SchemeInfo schemeInfo, Integer schemeId, Integer size) { + //更行方案状æ€ä¸ºåˆ 除 + int sum = schemeMapper.edit(schemeInfo); + if (sum == 0) { + return false; + } + + + //更行志愿状æ€ä¸ºåˆ 除 + int count = volunteerMapper.updateBySchemeId(schemeId); + if (size != count) { + return false; + } + + return true; + } + + /** + * 检查æˆç»©ä¿¡æ¯ + * + * @param scoreInfo æˆç»© + * @return true or false + */ + public R<Boolean> checkScore(ScoreInfo scoreInfo) { + int count = 0; + if (null != scoreInfo.getPoliticsGrade()) { + count = count + 1; + } + if (null != scoreInfo.getHistoryGrade()) { + count = count + 1; + } + if (null != scoreInfo.getBiologyGrade()) { + count = count + 1; + } + if (null != scoreInfo.getChemistryGrade()) { + count = count + 1; + } + if (null != scoreInfo.getPhysicsGrade()) { + count = count + 1; + } + if (null != scoreInfo.getGeographyGrade()) { + count = count + 1; + } + + if (count > CLASS_COUNT) { + return R.error(1, "åªèƒ½å¡«ä¸‰ç§‘副科æˆç»©", false); + } + return R.ok(0, true); + } + + /** + * ä¿å˜ç”¨æˆ·æ³¨å†Œä¿¡æ¯ï¼Œåˆå§‹åŒ–查询次数信æ¯ï¼Œæ³¨å†Œã€ç™»å½•æ“ä½œä¿¡æ¯ + * + * @param phone 手机 + * @param secret 密ç + * @param source æ¥æº + * @return 结果 + */ + @Transactional + public R<UserInfoVo> saveUserAndLimit(String phone, String secret, Integer source) { + //1ã€æ·»åŠ ç”¨æˆ·ä¿¡æ¯ + User userInfo = new User(); + userInfo.setPhone(phone); + userInfo.setPassword(secret); + userInfo.setIsDelete(0); + userInfo.setSource(source); + + int count = usersMapper.add(userInfo); + if (count == 0) { + return R.error("考生注册失败!"); + } + + //2ã€ä¿å˜ç”¨æˆ·æŸ¥è¯¢ä¿¡æ¯ + UserLimit addLimit = new UserLimit(); + addLimit.setUserId(userInfo.getId()); + addLimit.setUseLimit(0); + addLimit.setUsableLimit(0); + addLimit.setTotalLimit(0); + int limit = userLimitMapper.add(addLimit); + if (limit == 0) { + return R.error("æ³¨å†Œæ·»åŠ ç”¨æˆ·æŸ¥è¯¢ä¿¡æ¯å¤±è´¥!"); + } + + //3ã€ä¿å˜æ³¨å†Œè®°å½• + LoginRecord loginRecord = new LoginRecord(); + loginRecord.setType(OperationTypeEnum.USER_REGISTER.getCode()); + loginRecord.setUserId(userInfo.getId()); + String name = OperationTypeEnum.getByCode(OperationTypeEnum.USER_REGISTER.getCode()); + loginRecord.setOperationName(name); + int record = loginRecordMapper.add(loginRecord); + if (record == 0) { + return R.error("ä¿å˜æ³¨å†Œè®°å½•å¤±è´¥!"); + } + + //3ã€ä¿å˜ç™»å½•è®°å½• + LoginRecord login = new LoginRecord(); + login.setType(OperationTypeEnum.USER_LOGIN.getCode()); + login.setUserId(userInfo.getId()); + String nameSecond = OperationTypeEnum.getByCode(OperationTypeEnum.USER_LOGIN.getCode()); + login.setOperationName(nameSecond); + int number = loginRecordMapper.add(login); + if (number == 0) { + return R.error("ä¿å˜ç™»å½•è®°å½•å¤±è´¥!"); + } + + //7ã€å°è£…返回å‚æ•° + UserInfoVo userInfoVo = new UserInfoVo(); + userInfoVo.setUserId(userInfo.getId()); + userInfoVo.setPhone(userInfo.getPhone()); + return R.ok(userInfoVo); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/Credentials.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/Credentials.java new file mode 100644 index 0000000000000000000000000000000000000000..571595a874a4a296de609a71d59d9ac3e9353dae --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/Credentials.java @@ -0,0 +1,12 @@ +package cn.wisenergy.service.httpClient; + +import org.apache.http.client.methods.HttpRequestWrapper; + +import java.io.IOException; + +public interface Credentials { + + String getSchema(); + + String getToken(HttpRequestWrapper request) throws IOException; +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/SignatureExec.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/SignatureExec.java new file mode 100644 index 0000000000000000000000000000000000000000..ec3542e19ed644ba31eaac8b9e340c122d7e3a9d --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/SignatureExec.java @@ -0,0 +1,78 @@ +package cn.wisenergy.service.httpClient; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpEntityEnclosingRequest; +import org.apache.http.HttpException; +import org.apache.http.StatusLine; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpExecutionAware; +import org.apache.http.client.methods.HttpRequestWrapper; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.conn.routing.HttpRoute; +import org.apache.http.entity.BufferedHttpEntity; +import org.apache.http.impl.execchain.ClientExecChain; + +import java.io.IOException; + +public class SignatureExec implements ClientExecChain { + final ClientExecChain mainExec; + final Credentials credentials; + final Validator validator; + + SignatureExec(Credentials credentials, Validator validator, ClientExecChain mainExec) { + this.credentials = credentials; + this.validator = validator; + this.mainExec = mainExec; + } + + protected void convertToRepeatableResponseEntity(CloseableHttpResponse response) + throws IOException { + HttpEntity entity = response.getEntity(); + if (entity != null) { + response.setEntity(new BufferedHttpEntity(entity)); + } + } + + protected void convertToRepeatableRequestEntity(HttpRequestWrapper request) throws IOException { + if (request instanceof HttpEntityEnclosingRequest) { + HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + if (entity != null) { + ((HttpEntityEnclosingRequest) request).setEntity(new BufferedHttpEntity(entity)); + } + } + } + + @Override + public CloseableHttpResponse execute(HttpRoute route, HttpRequestWrapper request, + HttpClientContext context, HttpExecutionAware execAware) throws IOException, HttpException { + if (request.getURI().getHost().endsWith(".mch.weixin.qq.com")) { + return executeWithSignature(route, request, context, execAware); + } else { + return mainExec.execute(route, request, context, execAware); + } + } + + private CloseableHttpResponse executeWithSignature(HttpRoute route, HttpRequestWrapper request, + HttpClientContext context, HttpExecutionAware execAware) throws IOException, HttpException { + // ä¸Šä¼ ç±»ä¸éœ€è¦æ¶ˆè€—两次故ä¸åšè½¬æ¢ + if (!(request.getOriginal() instanceof WechatPayUploadHttpPost)) { + convertToRepeatableRequestEntity(request); + } + // æ·»åŠ è®¤è¯ä¿¡æ¯ + request.addHeader("Authorization", + credentials.getSchema() + " " + credentials.getToken(request)); + + // 执行 + CloseableHttpResponse response = mainExec.execute(route, request, context, execAware); + + // 对æˆåŠŸåº”ç”éªŒç¾ + StatusLine statusLine = response.getStatusLine(); + if (statusLine.getStatusCode() >= 200 && statusLine.getStatusCode() < 300) { + convertToRepeatableResponseEntity(response); + if (!validator.validate(response)) { + throw new HttpException("应ç”的微信支付ç¾å验è¯å¤±è´¥"); + } + } + return response; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/Validator.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/Validator.java new file mode 100644 index 0000000000000000000000000000000000000000..35d0dc113601e7f622281c18087c22ff01bd5a15 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/Validator.java @@ -0,0 +1,9 @@ +package cn.wisenergy.service.httpClient; + +import org.apache.http.client.methods.CloseableHttpResponse; + +import java.io.IOException; + +public interface Validator { + boolean validate(CloseableHttpResponse response) throws IOException; +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/WechatPayHttpClientBuilder.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/WechatPayHttpClientBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..b806df5c530fc97916d7958bdcb343aba7bccb62 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/WechatPayHttpClientBuilder.java @@ -0,0 +1,75 @@ +package cn.wisenergy.service.httpClient; + + +import cn.wisenergy.service.httpClient.auth.CertificatesVerifier; +import cn.wisenergy.service.httpClient.auth.PrivateKeySigner; +import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials; +import cn.wisenergy.service.httpClient.auth.WechatPay2Validator; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.execchain.ClientExecChain; + +import java.security.PrivateKey; +import java.security.cert.X509Certificate; +import java.util.List; + +public class WechatPayHttpClientBuilder extends HttpClientBuilder { + private Credentials credentials; + private Validator validator; + + static final String os = System.getProperty("os.name") + "/" + System.getProperty("os.version"); + static final String version = System.getProperty("java.version"); + + private WechatPayHttpClientBuilder() { + super(); + + String userAgent = String.format( + "WechatPay-Apache-HttpClient/%s (%s) Java/%s", + getClass().getPackage().getImplementationVersion(), + os, + version == null ? "Unknown" : version); + setUserAgent(userAgent); + } + + public static WechatPayHttpClientBuilder create() { + return new WechatPayHttpClientBuilder(); + } + + public WechatPayHttpClientBuilder withMerchant(String merchantId, String serialNo, PrivateKey privateKey) { + this.credentials = + new WechatPay2Credentials(merchantId, new PrivateKeySigner(serialNo, privateKey)); + return this; + } + + public WechatPayHttpClientBuilder withCredentials(Credentials credentials) { + this.credentials = credentials; + return this; + } + + public WechatPayHttpClientBuilder withWechatpay(List<X509Certificate> certificates) { + this.validator = new WechatPay2Validator(new CertificatesVerifier(certificates)); + return this; + } + + public WechatPayHttpClientBuilder withValidator(Validator validator) { + this.validator = validator; + return this; + } + + @Override + public CloseableHttpClient build() { + if (credentials == null) { + throw new IllegalArgumentException("缺少身份认è¯ä¿¡æ¯"); + } + if (validator == null) { + throw new IllegalArgumentException("缺少ç¾å验è¯ä¿¡æ¯"); + } + + return super.build(); + } + + @Override + protected ClientExecChain decorateProtocolExec(final ClientExecChain requestExecutor) { + return new SignatureExec(this.credentials, this.validator, requestExecutor); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/WechatPayUploadHttpPost.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/WechatPayUploadHttpPost.java new file mode 100644 index 0000000000000000000000000000000000000000..6aba1a8c1219c1a7a4cdfcf6c3e7b575ad1c153c --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/WechatPayUploadHttpPost.java @@ -0,0 +1,78 @@ +package cn.wisenergy.service.httpClient; + +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; + + +import java.io.InputStream; +import java.net.URI; +import java.net.URLConnection; + +/** + * @author 86187 + */ +public class WechatPayUploadHttpPost extends HttpPost { + + private String meta; + + private WechatPayUploadHttpPost(URI uri, String meta) { + super(uri); + + this.meta = meta; + } + + public String getMeta() { + return meta; + } + + public static class Builder { + + private String fileName; + private String fileSha256; + private InputStream fileInputStream; + private org.apache.http.entity.ContentType fileContentType; + private URI uri; + + public Builder(URI uri) { + this.uri = uri; + } + + public Builder withImage(String fileName, String fileSha256, InputStream inputStream) { + this.fileName = fileName; + this.fileSha256 = fileSha256; + this.fileInputStream = inputStream; + + String mimeType = URLConnection.guessContentTypeFromName(fileName); + if (mimeType == null) { + // guess this is a video uploading + this.fileContentType = ContentType.APPLICATION_OCTET_STREAM; + } else { + this.fileContentType = ContentType.create(mimeType); + } + return this; + } + + public WechatPayUploadHttpPost build() { + if (fileName == null || fileSha256 == null || fileInputStream == null) { + throw new IllegalArgumentException("ç¼ºå°‘å¾…ä¸Šä¼ å›¾ç‰‡æ–‡ä»¶ä¿¡æ¯"); + } + + if (uri == null) { + throw new IllegalArgumentException("ç¼ºå°‘ä¸Šä¼ å›¾ç‰‡æŽ¥å£URL"); + } + + String meta = String.format("{\"filename\":\"%s\",\"sha256\":\"%s\"}", fileName, fileSha256); + WechatPayUploadHttpPost request = new WechatPayUploadHttpPost(uri, meta); + +// MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); +// entityBuilder.setMode(HttpMultipartMode.RFC6532) +// .addBinaryBody("file", fileInputStream, fileContentType, fileName) +// .addTextBody("meta", meta, org.apache.http.entity.ContentType.APPLICATION_JSON); +// +// request.setEntity(entityBuilder.build()); +// request.addHeader("Accept", org.apache.http.entity.ContentType.APPLICATION_JSON.toString()); + + return request; + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/AutoUpdateCertificatesVerifier.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/AutoUpdateCertificatesVerifier.java new file mode 100644 index 0000000000000000000000000000000000000000..d6cc977ccb2bbb47255e5119cdee3033fa25f0ed --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/AutoUpdateCertificatesVerifier.java @@ -0,0 +1,181 @@ +package cn.wisenergy.service.httpClient.auth; + +import cn.wisenergy.service.httpClient.Credentials; +import cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder; +import cn.wisenergy.service.httpClient.util.AesUtil; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateFactory; +import java.security.cert.CertificateNotYetValidException; +import java.security.cert.X509Certificate; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.locks.ReentrantLock; + +/** + * 在原有CertificatesVerifieråŸºç¡€ä¸Šï¼Œå¢žåŠ è‡ªåŠ¨æ›´æ–°è¯ä¹¦åŠŸèƒ½ + */ +public class AutoUpdateCertificatesVerifier implements Verifier { + + private static final Logger log = LoggerFactory.getLogger(AutoUpdateCertificatesVerifier.class); + + //è¯ä¹¦ä¸‹è½½åœ°å€ + private static final String CertDownloadPath = "https://api.mch.weixin.qq.com/v3/certificates"; + + //上次更新时间 + private volatile Instant instant; + + //è¯ä¹¦æ›´æ–°é—´éš”时间,å•ä½ä¸ºåˆ†é’Ÿ + private int minutesInterval; + + private CertificatesVerifier verifier; + + private Credentials credentials; + + private byte[] apiV3Key; + + private ReentrantLock lock = new ReentrantLock(); + + public AutoUpdateCertificatesVerifier(Credentials credentials, byte[] apiV3Key) { + this(credentials, apiV3Key, TimeInterval.OneHour.getMinutes()); + } + + public AutoUpdateCertificatesVerifier(Credentials credentials, byte[] apiV3Key, + int minutesInterval) { + this.credentials = credentials; + this.apiV3Key = apiV3Key; + this.minutesInterval = minutesInterval; + //æž„é€ æ—¶æ›´æ–°è¯ä¹¦ + try { + autoUpdateCert(); + instant = Instant.now(); + } catch (IOException | GeneralSecurityException e) { + throw new RuntimeException(e); + } + } + + public AutoUpdateCertificatesVerifier(WechatPay2Credentials wechatPay2Credentials, byte[] bytes) { + } + + @Override + public X509Certificate getValidCertificate() { + return verifier.getValidCertificate(); + } + + @Override + public boolean verify(String serialNumber, byte[] message, String signature) { + if (instant == null + || Duration.between(instant, Instant.now()).toMinutes() >= minutesInterval) { + if (lock.tryLock()) { + try { + autoUpdateCert(); + //更新时间 + instant = Instant.now(); + } catch (GeneralSecurityException | IOException e) { + log.warn("Auto update cert failed, exception = " + e); + } finally { + lock.unlock(); + } + } + } + return verifier.verify(serialNumber, message, signature); + } + + private void autoUpdateCert() throws IOException, GeneralSecurityException { + CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create() + .withCredentials(credentials) + .withValidator(verifier == null ? (response) -> true : new WechatPay2Validator(verifier)) + .build(); + + try { + HttpGet httpGet = new HttpGet(CertDownloadPath); + httpGet.addHeader("Accept", "application/json"); + + CloseableHttpResponse response = httpClient.execute(httpGet); + try { + int statusCode = response.getStatusLine().getStatusCode(); + String body = EntityUtils.toString(response.getEntity()); + if (statusCode == 200) { + List<X509Certificate> newCertList = deserializeToCerts(apiV3Key, body); + if (newCertList.isEmpty()) { + log.warn("Cert list is empty"); + return; + } + this.verifier = new CertificatesVerifier(newCertList); + } else { + log.warn("Auto update cert failed, statusCode = " + statusCode + ",body = " + body); + } + } finally { + response.close(); + } + } finally { + httpClient.close(); + } + } + + /** + * ååºåˆ—化è¯ä¹¦å¹¶è§£å¯† + */ + private List<X509Certificate> deserializeToCerts(byte[] apiV3Key, String body) + throws GeneralSecurityException, IOException { + AesUtil decryptor = new AesUtil(apiV3Key); + ObjectMapper mapper = new ObjectMapper(); + JsonNode dataNode = mapper.readTree(body).get("data"); + List<X509Certificate> newCertList = new ArrayList<>(); + if (dataNode != null) { + for (int i = 0, count = dataNode.size(); i < count; i++) { + JsonNode encryptCertificateNode = dataNode.get(i).get("encrypt_certificate"); + //解密 + String cert = decryptor.decryptToString( + encryptCertificateNode.get("associated_data").toString().replaceAll("\"", "") + .getBytes("utf-8"), + encryptCertificateNode.get("nonce").toString().replaceAll("\"", "") + .getBytes("utf-8"), + encryptCertificateNode.get("ciphertext").toString().replaceAll("\"", "")); + + CertificateFactory cf = CertificateFactory.getInstance("X509"); + X509Certificate x509Cert = (X509Certificate) cf.generateCertificate( + new ByteArrayInputStream(cert.getBytes("utf-8")) + ); + try { + x509Cert.checkValidity(); + } catch (CertificateExpiredException | CertificateNotYetValidException e) { + continue; + } + newCertList.add(x509Cert); + } + } + return newCertList; + } + + + /** + * 时间间隔枚举,支æŒä¸€å°æ—¶ã€å…å°æ—¶ä»¥åŠå二å°æ—¶ + */ + public enum TimeInterval { + OneHour(60), SixHours(60 * 6), TwelveHours(60 * 12); + + private int minutes; + + TimeInterval(int minutes) { + this.minutes = minutes; + } + + public int getMinutes() { + return minutes; + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/CertificatesVerifier.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/CertificatesVerifier.java new file mode 100644 index 0000000000000000000000000000000000000000..1a580dfa1f3fe20ab29b2e52ebdebf1845ee8377 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/CertificatesVerifier.java @@ -0,0 +1,65 @@ +package cn.wisenergy.service.httpClient.auth; + +import java.math.BigInteger; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.Signature; +import java.security.SignatureException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateNotYetValidException; +import java.security.cert.X509Certificate; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.NoSuchElementException; + +/** + * @author 86187 + */ +public class CertificatesVerifier implements Verifier { + + private final HashMap<BigInteger, X509Certificate> certificates = new HashMap<>(); + + public CertificatesVerifier(List<X509Certificate> list) { + + for (X509Certificate item : list) { + certificates.put(item.getSerialNumber(), item); + } + } + + private boolean verify(X509Certificate certificate, byte[] message, String signature) { + try { + Signature sign = Signature.getInstance("SHA256withRSA"); + sign.initVerify(certificate); + sign.update(message); + return sign.verify(Base64.getDecoder().decode(signature)); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("当å‰Java环境ä¸æ”¯æŒSHA256withRSA", e); + } catch (SignatureException e) { + throw new RuntimeException("ç¾å验è¯è¿‡ç¨‹å‘生了错误", e); + } catch (InvalidKeyException e) { + throw new RuntimeException("æ— æ•ˆçš„è¯ä¹¦", e); + } + } + + @Override + public boolean verify(String serialNumber, byte[] message, String signature) { + BigInteger val = new BigInteger(serialNumber, 16); + return certificates.containsKey(val) && verify(certificates.get(val), message, signature); + } + + @Override + public X509Certificate getValidCertificate() { + for (X509Certificate x509Cert : certificates.values()) { + try { + x509Cert.checkValidity(); + + return x509Cert; + } catch (CertificateExpiredException | CertificateNotYetValidException e) { + continue; + } + } + + throw new NoSuchElementException("没有有效的微信支付平å°è¯ä¹¦"); + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/PrivateKeySigner.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/PrivateKeySigner.java new file mode 100644 index 0000000000000000000000000000000000000000..a3dd07fb8ac61416fea3b22b1d624a2fecac6697 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/PrivateKeySigner.java @@ -0,0 +1,36 @@ +package cn.wisenergy.service.httpClient.auth; + +import java.security.*; +import java.util.Base64; + +/** + * @author 86187 + */ +public class PrivateKeySigner implements Signer { + private String certificateSerialNumber; + + private PrivateKey privateKey; + + public PrivateKeySigner(String serialNumber, PrivateKey privateKey) { + this.certificateSerialNumber = serialNumber; + this.privateKey = privateKey; + } + + @Override + public SignatureResult sign(byte[] message) { + try { + Signature sign = Signature.getInstance("SHA256withRSA"); + sign.initSign(privateKey); + sign.update(message); + + return new SignatureResult( + Base64.getEncoder().encodeToString(sign.sign()), certificateSerialNumber); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("当å‰Java环境ä¸æ”¯æŒSHA256withRSA", e); + } catch (SignatureException e) { + throw new RuntimeException("ç¾å计算失败", e); + } catch (InvalidKeyException e) { + throw new RuntimeException("æ— æ•ˆçš„ç§é’¥", e); + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/Signer.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/Signer.java new file mode 100644 index 0000000000000000000000000000000000000000..ef8647cf39659873bc742eca55ed9cab8a774cb2 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/Signer.java @@ -0,0 +1,15 @@ +package cn.wisenergy.service.httpClient.auth; + +public interface Signer { + SignatureResult sign(byte[] message); + + class SignatureResult { + String sign; + String certificateSerialNumber; + + public SignatureResult(String sign, String serialNumber) { + this.sign = sign; + this.certificateSerialNumber = serialNumber; + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/Verifier.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/Verifier.java new file mode 100644 index 0000000000000000000000000000000000000000..4e315d5c710c04510efd0bf626424ef3cfedff50 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/Verifier.java @@ -0,0 +1,13 @@ +package cn.wisenergy.service.httpClient.auth; + +import java.security.cert.X509Certificate; + +/** + * @author 86187 + */ +public interface Verifier { + + boolean verify(String serialNumber, byte[] message, String signature); + + X509Certificate getValidCertificate(); +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/WechatPay2Credentials.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/WechatPay2Credentials.java new file mode 100644 index 0000000000000000000000000000000000000000..9b7a6e3c24472ca73f37d62f4ca9cfa5cd330bf6 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/WechatPay2Credentials.java @@ -0,0 +1,94 @@ +package cn.wisenergy.service.httpClient.auth; + +import cn.wisenergy.service.httpClient.Credentials; +import cn.wisenergy.service.httpClient.WechatPayUploadHttpPost; +import org.apache.http.HttpEntityEnclosingRequest; +import org.apache.http.client.methods.HttpRequestWrapper; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.security.SecureRandom; + +public class WechatPay2Credentials implements Credentials { + private static final Logger log = LoggerFactory.getLogger(WechatPay2Credentials.class); + + private static final String SYMBOLS = + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final SecureRandom RANDOM = new SecureRandom(); + protected String merchantId; + protected Signer signer; + + public WechatPay2Credentials(String merchantId, Signer signer) { + this.merchantId = merchantId; + this.signer = signer; + } + + public String getMerchantId() { + return merchantId; + } + + protected long generateTimestamp() { + return System.currentTimeMillis() / 1000; + } + + protected String generateNonceStr() { + char[] nonceChars = new char[32]; + for (int index = 0; index < nonceChars.length; ++index) { + nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length())); + } + return new String(nonceChars); + } + + @Override + public final String getSchema() { + return "WECHATPAY2-SHA256-RSA2048"; + } + + @Override + public final String getToken(HttpRequestWrapper request) throws IOException { + String nonceStr = generateNonceStr(); + long timestamp = generateTimestamp(); + + String message = buildMessage(nonceStr, timestamp, request); + log.debug("authorization message=[{}]", message); + + Signer.SignatureResult signature = signer.sign(message.getBytes(StandardCharsets.UTF_8)); + + String token = "mchid=\"" + getMerchantId() + "\"," + + "nonce_str=\"" + nonceStr + "\"," + + "timestamp=\"" + timestamp + "\"," + + "serial_no=\"" + signature.certificateSerialNumber + "\"," + + "signature=\"" + signature.sign + "\""; + log.debug("authorization token=[{}]", token); + + return token; + } + + protected final String buildMessage(String nonce, long timestamp, HttpRequestWrapper request) + throws IOException { + URI uri = request.getURI(); + String canonicalUrl = uri.getRawPath(); + if (uri.getQuery() != null) { + canonicalUrl += "?" + uri.getRawQuery(); + } + + String body = ""; + // PATCH,POST,PUT + if (request.getOriginal() instanceof WechatPayUploadHttpPost) { + body = ((WechatPayUploadHttpPost) request.getOriginal()).getMeta(); + } else if (request instanceof HttpEntityEnclosingRequest) { + body = EntityUtils.toString(((HttpEntityEnclosingRequest) request).getEntity()); + } + + return request.getRequestLine().getMethod() + "\n" + + canonicalUrl + "\n" + + timestamp + "\n" + + nonce + "\n" + + body + "\n"; + } + +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/WechatPay2Validator.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/WechatPay2Validator.java new file mode 100644 index 0000000000000000000000000000000000000000..8c7b73f729322a8392223001092a9316e4a2b115 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/auth/WechatPay2Validator.java @@ -0,0 +1,108 @@ +package cn.wisenergy.service.httpClient.auth; + +import cn.wisenergy.service.httpClient.Validator; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.time.DateTimeException; +import java.time.Duration; +import java.time.Instant; + +/** + * @author 86187 + */ +public class WechatPay2Validator implements Validator { + + private static final Logger log = LoggerFactory.getLogger(WechatPay2Validator.class); + + private Verifier verifier; + + public WechatPay2Validator(Verifier verifier) { + this.verifier = verifier; + } + + static RuntimeException parameterError(String message, Object... args) { + message = String.format(message, args); + return new IllegalArgumentException("parameter error: " + message); + } + + static RuntimeException verifyFail(String message, Object... args) { + message = String.format(message, args); + return new IllegalArgumentException("signature verify fail: " + message); + } + + @Override + public final boolean validate(CloseableHttpResponse response) throws IOException { + try { + validateParameters(response); + + String message = buildMessage(response); + String serial = response.getFirstHeader("Wechatpay-Serial").getValue(); + String signature = response.getFirstHeader("Wechatpay-Signature").getValue(); + + if (!verifier.verify(serial, message.getBytes("utf-8"), signature)) { + throw verifyFail("serial=[%s] message=[%s] sign=[%s], request-id=[%s]", + serial, message, signature, + response.getFirstHeader("Request-ID").getValue()); + } + } catch (IllegalArgumentException e) { + log.warn(e.getMessage()); + return false; + } + + return true; + } + + protected final void validateParameters(CloseableHttpResponse response) { + String requestId; + if (!response.containsHeader("Request-ID")) { + throw parameterError("empty Request-ID"); + } else { + requestId = response.getFirstHeader("Request-ID").getValue(); + } + + if (!response.containsHeader("Wechatpay-Serial")) { + throw parameterError("empty Wechatpay-Serial, request-id=[%s]", requestId); + } else if (!response.containsHeader("Wechatpay-Signature")){ + throw parameterError("empty Wechatpay-Signature, request-id=[%s]", requestId); + } else if (!response.containsHeader("Wechatpay-Timestamp")) { + throw parameterError("empty Wechatpay-Timestamp, request-id=[%s]", requestId); + } else if (!response.containsHeader("Wechatpay-Nonce")) { + throw parameterError("empty Wechatpay-Nonce, request-id=[%s]", requestId); + } else { + Header timestamp = response.getFirstHeader("Wechatpay-Timestamp"); + try { + Instant instant = Instant.ofEpochSecond(Long.parseLong(timestamp.getValue())); + // æ‹’ç»5åˆ†é’Ÿä¹‹å¤–çš„åº”ç” + if (Duration.between(instant, Instant.now()).abs().toMinutes() >= 5) { + throw parameterError("timestamp=[%s] expires, request-id=[%s]", + timestamp.getValue(), requestId); + } + } catch (DateTimeException | NumberFormatException e) { + throw parameterError("invalid timestamp=[%s], request-id=[%s]", + timestamp.getValue(), requestId); + } + } + } + + protected final String buildMessage(CloseableHttpResponse response) throws IOException { + String timestamp = response.getFirstHeader("Wechatpay-Timestamp").getValue(); + String nonce = response.getFirstHeader("Wechatpay-Nonce").getValue(); + + String body = getResponseBody(response); + return timestamp + "\n" + + nonce + "\n" + + body + "\n"; + } + + protected final String getResponseBody(CloseableHttpResponse response) throws IOException { + HttpEntity entity = response.getEntity(); + + return (entity != null && entity.isRepeatable()) ? EntityUtils.toString(entity) : ""; + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/AesUtil.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/AesUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..5a66f8d945e7fe44739f4be2fdc57969623aba1c --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/AesUtil.java @@ -0,0 +1,45 @@ +package cn.wisenergy.service.httpClient.util; + +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +public class AesUtil { + + static final int KEY_LENGTH_BYTE = 32; + static final int TAG_LENGTH_BIT = 128; + private final byte[] aesKey; + + public AesUtil(byte[] key) { + if (key.length != KEY_LENGTH_BYTE) { + throw new IllegalArgumentException("æ— æ•ˆçš„ApiV3Key,长度必须为32个å—节"); + } + this.aesKey = key; + } + + public String decryptToString(byte[] associatedData, byte[] nonce, String ciphertext) + throws GeneralSecurityException, IOException { + try { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + + SecretKeySpec key = new SecretKeySpec(aesKey, "AES"); + GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, nonce); + + cipher.init(Cipher.DECRYPT_MODE, key, spec); + cipher.updateAAD(associatedData); + + return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), "utf-8"); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + throw new IllegalStateException(e); + } catch (InvalidKeyException | InvalidAlgorithmParameterException e) { + throw new IllegalArgumentException(e); + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/PemUtil.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/PemUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c35cf4e7734068c986e84e5fcade78a166671028 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/PemUtil.java @@ -0,0 +1,56 @@ +package cn.wisenergy.service.httpClient.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.cert.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; + +public class PemUtil { + + public static PrivateKey loadPrivateKey(InputStream inputStream) { + try { + ByteArrayOutputStream array = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) != -1) { + array.write(buffer, 0, length); + } + + String privateKey = array.toString("utf-8") + .replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replaceAll("\\s+", ""); + + KeyFactory kf = KeyFactory.getInstance("RSA"); + return kf.generatePrivate( + new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey))); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("当å‰Java环境ä¸æ”¯æŒRSA", e); + } catch (InvalidKeySpecException e) { + throw new RuntimeException("æ— æ•ˆçš„å¯†é’¥æ ¼å¼"); + } catch (IOException e) { + throw new RuntimeException("æ— æ•ˆçš„å¯†é’¥"); + } + } + + public static X509Certificate loadCertificate(InputStream inputStream) { + try { + CertificateFactory cf = CertificateFactory.getInstance("X509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate(inputStream); + cert.checkValidity(); + return cert; + } catch (CertificateExpiredException e) { + throw new RuntimeException("è¯ä¹¦å·²è¿‡æœŸ", e); + } catch (CertificateNotYetValidException e) { + throw new RuntimeException("è¯ä¹¦å°šæœªç”Ÿæ•ˆ", e); + } catch (CertificateException e) { + throw new RuntimeException("æ— æ•ˆçš„è¯ä¹¦", e); + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/RsaCryptoUtil.java b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/RsaCryptoUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..cb29151717bb66c0c8d306175cdfa8729deaada2 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/httpClient/util/RsaCryptoUtil.java @@ -0,0 +1,50 @@ +package cn.wisenergy.service.httpClient.util; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; +import java.util.Base64; + +public class RsaCryptoUtil { + + public static String encryptOAEP(String message, X509Certificate certificate) + throws IllegalBlockSizeException { + try { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); + cipher.init(Cipher.ENCRYPT_MODE, certificate.getPublicKey()); + + byte[] data = message.getBytes(StandardCharsets.UTF_8); + byte[] ciphertext = cipher.doFinal(data); + return Base64.getEncoder().encodeToString(ciphertext); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + throw new RuntimeException("当å‰Java环境ä¸æ”¯æŒRSA v1.5/OAEP", e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("æ— æ•ˆçš„è¯ä¹¦", e); + } catch (IllegalBlockSizeException | BadPaddingException e) { + throw new IllegalBlockSizeException("åŠ å¯†åŽŸä¸²çš„é•¿åº¦ä¸èƒ½è¶…过214å—节"); + } + } + + public static String decryptOAEP(String ciphertext, PrivateKey privateKey) + throws BadPaddingException { + try { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + + byte[] data = Base64.getDecoder().decode(ciphertext); + return new String(cipher.doFinal(data), StandardCharsets.UTF_8); + } catch (NoSuchPaddingException | NoSuchAlgorithmException e) { + throw new RuntimeException("当å‰Java环境ä¸æ”¯æŒRSA v1.5/OAEP", e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("æ— æ•ˆçš„ç§é’¥", e); + } catch (BadPaddingException | IllegalBlockSizeException e) { + throw new BadPaddingException("解密失败"); + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/util/SignDemo.java b/wisenergy-service/src/main/java/cn/wisenergy/service/util/SignDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..1d1d1e722fd66336a70f3d0a8b6a6d9075777ba0 --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/util/SignDemo.java @@ -0,0 +1,81 @@ +package cn.wisenergy.service.util; + +import cn.wisenergy.model.dto.PayPageDto; +import cn.wisenergy.service.wxpay.WxCommon; +import com.alibaba.fastjson.JSONObject; +import okhttp3.HttpUrl; + +import java.io.UnsupportedEncodingException; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.UUID; + +/** + * @author 86187 + */ +public class SignDemo { + + public static String getToken(String method, HttpUrl url, String body,String nonceStr,long timestamp) throws UnsupportedEncodingException, SignatureException, NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException { + String message = buildMessage(method, url, timestamp, nonceStr, body); + String signature = sign(message.getBytes("utf-8")); + + return "mchid=\"" + WxCommon.MCHID + "\"," + + "nonce_str=\"" + nonceStr + "\"," + + "timestamp=\"" + timestamp + "\"," + + "serial_no=\"" + WxCommon.SERIAL_NO + "\"," + + "signature=\"" + signature + "\""; + } + + public static String sign(byte[] message) throws NoSuchAlgorithmException, SignatureException, InvalidKeyException, InvalidKeySpecException { + Signature sign = Signature.getInstance("SHA256withRSA"); + KeyFactory factory = KeyFactory.getInstance("RSA"); + + + PrivateKey privateKey = factory.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(WxCommon.SECRET_KEY))); + sign.initSign(privateKey); + sign.update(message); + + return Base64.getEncoder().encodeToString(sign.sign()); + } + + public static String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) { + String canonicalUrl = url.encodedPath(); + if (url.encodedQuery() != null) { + canonicalUrl += "?" + url.encodedQuery(); + } + + return method + "\n" + + canonicalUrl + "\n" + + timestamp + "\n" + + nonceStr + "\n" + + body + "\n"; + } + +// public static void main(String[] args) throws NoSuchAlgorithmException, SignatureException, InvalidKeyException, UnsupportedEncodingException, InvalidKeySpecException { +// String method = "POST"; +// HttpUrl httpurl = HttpUrl.parse("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi"); +// long timestamp = System.currentTimeMillis() / 1000; +// String nonceStr = UUID.randomUUID().toString().replace("-", ""); +// String url = "v3/pay/transactions/native"; +// String tradeNo = "21" + System.currentTimeMillis(); +// PayPageDto payPageDto = new PayPageDto(); +// payPageDto.setTotal(100); +// +// //æž„é€ ç¾åbody +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("appid", WxCommon.APP_ID); +// jsonObject.put("mchid", WxCommon.MCHID); +// jsonObject.put("timestamp", timestamp); +// jsonObject.put("nonce_str", nonceStr); +// jsonObject.put("url", url); +// jsonObject.put("method", method); +// jsonObject.put("description", "充值"); +// jsonObject.put("out_trade_no", tradeNo); +// jsonObject.put("notify_url", WxCommon.NOTIFY_URL); +// jsonObject.put("amount", payPageDto); +// String sign = getToken(method, httpurl, jsonObject.toJSONString()); +// System.out.println("ç¾å:" + sign); +// } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/util/WxPayUtil.java b/wisenergy-service/src/main/java/cn/wisenergy/service/util/WxPayUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..7192b197d1d756894541dc48255e92b129c1e6db --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/util/WxPayUtil.java @@ -0,0 +1,168 @@ +package cn.wisenergy.service.util; + +import cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder; +import cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier; +import cn.wisenergy.service.httpClient.auth.PrivateKeySigner; +import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials; +import cn.wisenergy.service.httpClient.auth.WechatPay2Validator; +import cn.wisenergy.service.httpClient.util.PemUtil; +import cn.wisenergy.service.wxpay.WxCommon; +import okhttp3.HttpUrl; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.util.EntityUtils; +import org.junit.After; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.SignatureException; +import java.security.spec.InvalidKeySpecException; +import java.util.UUID; + +public class WxPayUtil { + + + /** + * å•†æˆ·å· + */ + private static String mchId = WxCommon.MCHID; + // 商户è¯ä¹¦åºåˆ—å· + private static String mchSerialNo = WxCommon.SERIAL_NO; + // api密钥 + private static String apiV3Key = WxCommon.SECRET_KEY; + + // ä½ çš„å•†æˆ·ç§é’¥ + private static String privateKey = "-----BEGIN PRIVATE KEY-----\n" +WxCommon.SECRET_KEY + + "-----END PRIVATE KEY-----\n"; + + private static CloseableHttpClient httpClient; + private static AutoUpdateCertificatesVerifier verifier; + + + static { + PrivateKey merchantPrivateKey = null; + try { + merchantPrivateKey = PemUtil.loadPrivateKey( + new ByteArrayInputStream(privateKey.getBytes("utf-8"))); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + //使用自动更新的ç¾å验è¯å™¨ï¼Œä¸éœ€è¦ä¼ å…¥è¯ä¹¦ + try { + verifier = new AutoUpdateCertificatesVerifier( + new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)), + apiV3Key.getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + httpClient = WechatPayHttpClientBuilder.create() + .withMerchant(mchId, mchSerialNo, merchantPrivateKey) + .withValidator(new WechatPay2Validator(verifier)) + .build(); + } + + @After + public void after() throws IOException { + httpClient.close(); + } + + public static void main(String[] args) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException { + HttpPost httpPost = new HttpPost(WxCommon.WX_PAY_URL); + + long timestamp = System.currentTimeMillis() / 1000; + String nonceStr = UUID.randomUUID().toString().replace("-", ""); + String method = "POST"; + String tradeNo = "21" + System.currentTimeMillis(); + HttpUrl httpurl = HttpUrl.parse(WxCommon.WX_PAY_URL); + + // 请求bodyå‚æ•° + String reqdata = "{" + + "\"time_expire\":\"2021-02-07T10:34:56+08:00\"," + + "\"amount\": {" + + "\"total\":100," + + "\"currency\":\"CNY\"" + + "}," + + "\"mchid\":\"" + WxCommon.MCHID + "\"," + + "\"description\":\"Image形象店-深圳腾大-QQ公仔\"," + + "\"notify_url\":\"" + WxCommon.NOTIFY_URL + "\"," + + "\"out_trade_no\":\"" + tradeNo + "\"," + + "\"goods_tag\":\"WXG\"," + + "\"appid\":\"" + WxCommon.APP_ID + "\"," +// + "\"attach\":\"自定义数æ®è¯´æ˜Ž\"," +// + "\"detail\": {" +// + "\"invoice_id\":\"wx123\"," +// + "\"goods_detail\": [" +// + "{" +// + "\"goods_name\":\"iPhoneX 256G\"," +// + "\"wechatpay_goods_id\":\"1001\"," +// + "\"quantity\":1," +// + "\"merchant_goods_id\":\"商å“ç¼–ç \"," +// + "\"unit_price\":828800" +// + "}," +// + "{" +// + "\"goods_name\":\"iPhoneX 256G\"," +// + "\"wechatpay_goods_id\":\"1001\"," +// + "\"quantity\":1," +// + "\"merchant_goods_id\":\"商å“ç¼–ç \"," +// + "\"unit_price\":828800" +// + "}" +// + "]," +// + "\"cost_price\":608800" +// + "}," +// + "\"scene_info\": {" +// + "\"store_info\": {" +// + "\"address\":\"广东çœæ·±åœ³å¸‚å—山区科技ä¸ä¸€é“10000å·\"," +// + "\"area_code\":\"440305\"," +// + "\"name\":\"腾讯大厦分店\"," +// + "\"id\":\"0001\"" +// + "}," +// + "\"device_id\":\"013467007045764\"," +// + "\"payer_client_ip\":\"14.23.150.211\"" +// + "}" + + "}"; + StringEntity reqEntity = new StringEntity( + reqdata, ContentType.create("application/json", "utf-8")); + httpPost.setEntity(reqEntity); + httpPost.addHeader("Accept", "application/json"); + +// //æž„é€ ç¾åå‚æ•° +// //æž„é€ ç¾åå‚æ•° +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("appid", WxCommon.APP_ID); +// jsonObject.put("mchid", WxCommon.MCHID); +// jsonObject.put("description", "充值"); +// jsonObject.put("out_trade_no", tradeNo); +// jsonObject.put("notify_url", WxCommon.NOTIFY_URL); +// PayPageDto payPageDto=new PayPageDto(); +// payPageDto.setTotal(100); +// jsonObject.put("amount", payPageDto); +// String token = SignDemo.getToken(method, httpurl, jsonObject.toJSONString(), nonceStr, timestamp); +// httpPost.setHeader("Authorization", "WECHATPAY2-SHA256-RSA2048" + " " + token); + + //完æˆç¾å并执行请求 + CloseableHttpResponse response = httpClient.execute(httpPost); + + + try { + if (response.getStatusLine().getStatusCode() == 200) { + HttpEntity httpEntity = response.getEntity(); + String content = EntityUtils.toString(httpEntity, "utf8"); + System.out.println(content.length()); + } + } catch (IOException e) { + e.printStackTrace(); + }finally { + response.close(); + } + } +} diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java b/wisenergy-service/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java new file mode 100644 index 0000000000000000000000000000000000000000..5f629172ff646834406fbe6424e29b97eb0f272a --- /dev/null +++ b/wisenergy-service/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java @@ -0,0 +1,63 @@ +package cn.wisenergy.service.wxpay; + +/** +*@ Description: 微信支付公共å‚æ•° +*@ Author : 86187 +*@ Date : 2021/2/5 15:04 + * @author 86187 + */ +public class WxCommon { + + public static final String APP_ID = "wx7d8f4502a2bfa865"; + + public static final String MCHID = "1606042985"; + + public static final String NOTIFY_URL = "http://www.baodu.com"; + + public static final String WX_PAY_URL = "https://api.mch.weixin.qq.com/v3/pay/transactions/native"; + + public static final String WX_PAY_QUERY = "https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/"; + + + public static final String SECRET_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDhGq+iGQueP8EU" + + "3qj0T0Otnha0XboVcgmeDkgbe08H54WiF9d3R4aLAo+wAkAj/R7nRw2yWeaaMEgb" + + "ZvUz03IioVKwLhaMVEtwE5sNFCMGDDh9jGjm66j+BYgVk02P5hUAcYLcJYeo9iHA" + + "cFQ1YA4r64OLD0/JWqGjpHmKJ9F3YhZjBO8ETm6grnIJyqt9ABCPBQF7fRS/ZcbC" + + "J8PUoEZA1eGi60FEgzeJ2stjzXZ6629INnRQanNuPegcH26oSQmph+z33bLUhXDb" + + "lt6exClPKucU5FZoh69dMsD1RLqNeBTUG8JCvvEWnBH3RaHKRsv/nezQHS+5euw3" + + "AJnTNPl5AgMBAAECggEAR9PsFx1Gx8gwJCioYMyqG8xGEmeV6SHqT7Te7WX7YdpO" + + "mdphtn3sQI8gqlkNfm5WXhYeGLr3Clw9pgDEXTUrRkGT0QPjzgNXzvtyjknOoy9j" + + "FyymjIjF88hwE/Jc3X3dVbbiurx+/TsMqgst05pC62DLKKRKIUX6Le1dmuf5vs3E" + + "gjDZR+Z86H8jNm0Qg5OXwbUs7uIaMKun6QUGqk0YfdeIQdMXerKp48HLSI+j+bMS" + + "pkE5wt4MSk3G90qHzxLgO7N2FuUFJunl8t0jrDIg7eG8qDPT2rO7tFP8zvikJbGz" + + "zNfI9l6CIXnPXFJtoAFRt8XBG4sNF5ncSdJbDTpXAQKBgQDySdXYOkMCHxFSKAG/" + + "pCyFwCMozfvKL2HShS/lVc7wwVG/yvPeqpKFvq7+xob6R20rbJEzgSBSlOwpol9s" + + "f+fuduUPSzLK/Dz+yL6o3CrX18g2SSgZSMbqN1KDmoF7D3GO81AmdBs/FQkg8wAa" + + "oWSI8K5QUuw0nfMMWZZ4bS7VLQKBgQDt1+TpC3euInhakwrYDnGqRy7W3YEuILDN" + + "Adp+IujN0sKKIH6dx9hZxSbqEE/t4uev3Pga9P8e+91h9rIc38b3Xw2Xn2iN/bSa" + + "dk7ThAu9leiJG9bs1gN7mT8Gq8kV/RKM8npAjht2dlx61T3Eb80WSf8sC3BWJ2TE" + + "M88jjuT8/QKBgCOPqL5i1sDx9GXdj1wkaZB8Ae0URpeHWtE+UShU7tmxViFTVXXi" + + "DT1qHl8wnlEPuLs95RXtJuRYDU2TEnRnVZBPjREwlVTrrrwqlKlOH0+s0Sr+k88a" + + "Om/YDNlaDRUV0DIODj6GnhUlLkDSyboe5BWhVcReV2Llp+2xHH+ybsRFAoGBAK6C" + + "2Cy+A0Q7en9KoIxCnNfJfu6ce+oyhkcFcyFVz+clGyRqDz0Jow7K/3CCI4NyF3kL" + + "8uckmARN3PPCJJHXB4/9qGV1yytT2a3z3IaJvmuOkJ35VUtVBB0uJfZpGRQPKgtM" + + "5rJzEmdrFRPzXmzBc4NFK/tPMU+le+QR94wpjo6pAoGBAOmilsvFp4UcuAeOt50q" + + "4FC2ApgHw4f95nCi/rtUbuC9AwiFD8nBGZTLFO1lxoms52uJ9RWYLBpY4JmWo1VG" + + "IaU0+nKTljLCQZNHqA87bkG4lQIKsZjNJ47PW1iUdNtXJ58aw/qnj2ldIGIcZQQY" + + "52pD2/10mSJy5oxiqdMccmbs"; + + /** + * è¯ä¹¦åºåˆ—å· + */ + public static final String SERIAL_NO = "5A886697B1EA67984766E953683E04D2DC96482C"; + + /** + * 认è¯ç±»åž‹ + */ + public static final String SCHEMA = "WECHATPAY2-SHA256-RSA2048"; + + /** + * 认è¯ç±»åž‹ + */ + public static final String PRIVATE_KEY = "efef4a06a1654e0f78d113377ea37aed"; +} diff --git a/wisenergy-service/wisenergy-service.iml b/wisenergy-service/wisenergy-service.iml new file mode 100644 index 0000000000000000000000000000000000000000..1ef2560bef85ca7dc2d10255ce9fa589eae38930 --- /dev/null +++ b/wisenergy-service/wisenergy-service.iml @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="wisenergy-mapper" /> + <orderEntry type="module" module-name="wisenergy-model" /> + <orderEntry type="module" module-name="wisenergy-common" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.3.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.glassfish:javax.el:3.0.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" /> + <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> + <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" /> + <orderEntry type="library" name="Maven: org.mockito:mockito-core:2.23.4" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" /> + <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-test:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" /> + <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" /> + <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.16" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.6.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.9.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" /> + <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" /> + <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.6.7" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.23" level="project" /> + <orderEntry type="library" name="Maven: com.hikvision.ga:artemis-http-client:1.1.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains:annotations:20.1.0" level="project" /> + <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.3" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" /> + <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" /> + <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" /> + <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.5" level="project" /> + <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" /> + <orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" /> + <orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" /> + <orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:4.11.33.ALL" level="project" /> + <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.62" level="project" /> + <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.6.0" level="project" /> + <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.11.0" level="project" /> + <orderEntry type="library" name="Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpmime:4.5.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.5.13" level="project" /> + <orderEntry type="library" name="Maven: com.itextpdf:itext-asian:5.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" /> + <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> + <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.8" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> + <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" /> + <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" /> + <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" /> + <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> + <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" /> + <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/wisenergy-shiro/.gitignore b/wisenergy-shiro/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/wisenergy-shiro/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/wisenergy-shiro/pom.xml b/wisenergy-shiro/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..1aecd0d0389ab68a5f34bf91409873c0ae10306c --- /dev/null +++ b/wisenergy-shiro/pom.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>wisenergy-parent</artifactId> + <groupId>org.yun</groupId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>wisenergy-shiro</artifactId> + <version>${moduleVersion.wisenergy-shiro}</version> + <packaging>jar</packaging> + + <!-- 项目ä¾èµ– --> + <dependencies> + <!-- 模å—ä¾èµ– --> + <dependency> + <groupId>org.yun</groupId> + <artifactId>wisenergy-service</artifactId> + <version>${moduleVersion.wisenergy-service}</version> + </dependency> + <!-- Shiro --> + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-spring-boot-web-starter</artifactId> + </dependency> + </dependencies> + + <!-- MAVEN构建 --> + <build> + <finalName>${project.artifactId}-${moduleVersion.project-shiro}</finalName> + </build> +</project> \ No newline at end of file diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/config/ShiroConfig.java b/wisenergy-shiro/src/main/java/com/project/shiro/config/ShiroConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..eaa1f579ffa0b7bc63a1feec3a7c71badd91aec8 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/config/ShiroConfig.java @@ -0,0 +1,197 @@ +package com.project.shiro.config; + +import com.project.shiro.util.AuthenticationFilter; +import com.project.shiro.util.AuthenticationRealm; +import com.project.shiro.util.AuthorizationFilter; +import com.project.shiro.util.redis.ShiroRedisCacheManager; +import com.project.shiro.util.redis.ShiroRedisSessionDAO; +import org.apache.shiro.session.mgt.SessionManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.apache.shiro.web.servlet.SimpleCookie; +import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; + +import javax.servlet.Filter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Description: shiroé…置类 + * User: mxy + * Date: 2019-04-16 + */ +@Configuration +public class ShiroConfig { + + private static final transient Logger logger = LoggerFactory.getLogger(ShiroConfig.class); + + /** + * é…置拦截器 + * <p> + * 定义拦截URLæƒé™ï¼Œä¼˜å…ˆçº§ä»Žä¸Šåˆ°ä¸‹ + * 1). anon : 匿åè®¿é—®ï¼Œæ— éœ€ç™»å½• + * 2). authc : 登录åŽæ‰èƒ½è®¿é—® + * 3). logout: 登出 + * 4). frameperms : 自定义的过滤器 + * <p> + * URL 匹é…é£Žæ ¼ + * 1). ?:匹é…一个å—符,如 /admin? å°†åŒ¹é… /admin1,但ä¸åŒ¹é… /admin 或 /admin/ï¼› + * 2). *:匹é…零个或多个å—符串,如 /admin* å°†åŒ¹é… /admin 或/admin123,但ä¸åŒ¹é… /admin/1ï¼› + * 3). **:匹é…路径ä¸çš„零个或多个路径,如 /admin/** å°†åŒ¹é… /admin/a 或 /admin/a/b + * <p> + * é…置身份验è¯æˆåŠŸï¼Œå¤±è´¥çš„跳转路径 + */ + @Bean + public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) { + logger.info("进入Shiro拦截工厂"); + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + // 设置securityManager + shiroFilterFactoryBean.setSecurityManager(securityManager); + + // 自定义的过滤器 + Map<String, Filter> filterMap = new HashMap<>(); + // map里é¢key值è¦ä¸ºè¿‡æ»¤å™¨çš„å称,value为过滤器对象 + filterMap.put("authc", authenticationFilter()); + filterMap.put("frameperms", authorizationFilter()); + // å°†è‡ªå®šä¹‰çš„è¿‡æ»¤å™¨åŠ å…¥åˆ°è¿‡æ»¤å™¨é›†åˆä¸ + shiroFilterFactoryBean.setFilters(filterMap); + + // è®¾ç½®æ‹¦æˆªå™¨é›†åˆ + Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); + filterChainDefinitionMap.put("/admin/", "anon"); // åŽå°èµ„æº-匿å访问 + filterChainDefinitionMap.put("/admin/res/**", "anon"); // é™æ€èµ„æº-匿å访问 + filterChainDefinitionMap.put("/admin/anon/**", "anon"); // åŽå°å¯åŒ¿å访问资æº-匿å访问 + filterChainDefinitionMap.put("/admin/login", "authc"); // 登录页é¢-èº«ä»½è®¤è¯ + filterChainDefinitionMap.put("/admin/logout", "logout"); // 用户退出,åªéœ€é…ç½®logoutå³å¯å®žçŽ°è¯¥åŠŸèƒ½ + filterChainDefinitionMap.put("/admin/common/**", "anon"); // 其他路径å‡éœ€è¦èº«ä»½è®¤è¯ï¼Œä¸€èˆ¬ä½äºŽæœ€ä¸‹é¢ï¼Œä¼˜å…ˆçº§æœ€ä½Ž + filterChainDefinitionMap.put("/admin/**", "authc,frameperms"); // 其他路径å‡éœ€è¦èº«ä»½è®¤è¯ï¼Œä¸€èˆ¬ä½äºŽæœ€ä¸‹é¢ï¼Œä¼˜å…ˆçº§æœ€ä½Ž + + // 设置拦截器 + shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); + shiroFilterFactoryBean.setLoginUrl("/admin/login"); // 登录的路径 +// shiroFilterFactoryBean.setUnauthorizedUrl("/admin/common/unauthorized.jhtml"); // 验è¯å¤±è´¥åŽè·³è½¬çš„路径 + logger.info("Shiro拦截工厂é…置完æˆ"); + return shiroFilterFactoryBean; + } + + /** + * é…ç½®Shiro生命周期处ç†å™¨ + */ + @Bean + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + /** + * 自动创建代ç†ç±»ï¼Œè‹¥ä¸æ·»åŠ ,Shiro的注解å¯èƒ½ä¸ä¼šç”Ÿæ•ˆã€‚ + */ + @Bean + @DependsOn({"lifecycleBeanPostProcessor"}) + public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); + advisorAutoProxyCreator.setProxyTargetClass(true); + return advisorAutoProxyCreator; + } + + /** + * å¼€å¯Shiro的注解 + */ + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { + AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); + authorizationAttributeSourceAdvisor.setSecurityManager(securityManager()); + return authorizationAttributeSourceAdvisor; + } + + /** + * é…ç½®åŠ å¯†åŒ¹é…,使用MD5çš„æ–¹å¼ï¼Œè¿›è¡Œ1024æ¬¡åŠ å¯† + */ +// @Bean +// public HashedCredentialsMatcher hashedCredentialsMatcher() { +// HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); +// hashedCredentialsMatcher.setHashAlgorithmName("MD5"); +// hashedCredentialsMatcher.setHashIterations(1024); +// return hashedCredentialsMatcher; +// } + + /** + * SecurityManager 安全管ç†å™¨ï¼›Shiroçš„æ ¸å¿ƒ + */ + @Bean + public DefaultWebSecurityManager securityManager() { + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + // 自定义的Realm + securityManager.setRealm(authenticationShiroRealm()); + // 缓å˜ç®¡ç† + securityManager.setCacheManager(shiroRedisCacheManager()); + // 会è¯ç®¡ç† + securityManager.setSessionManager(sessionManager()); + return securityManager; + } + + /** + * 自定义Realm,å¯ä»¥å¤šä¸ª + */ + @Bean + public AuthenticationRealm authenticationShiroRealm() { + AuthenticationRealm authenticationRealm = new AuthenticationRealm(); + //authenticationRealm.setCredentialsMatcher(hashedCredentialsMatcher()); + return authenticationRealm; + } + + /** + * redis缓å˜ç®¡ç† + */ + @Bean + public ShiroRedisCacheManager shiroRedisCacheManager() { + return new ShiroRedisCacheManager(); + } + + /** + * 设置session会è¯ç®¡ç†è€… + */ + @Bean + public SessionManager sessionManager() { + DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager(); + defaultWebSessionManager.setSessionIdCookie(simpleCookie()); + defaultWebSessionManager.setSessionDAO(shiroRedisSessionDAO()); + return defaultWebSessionManager; + } + + /** + * sessionç®¡ç† + */ + @Bean + public ShiroRedisSessionDAO shiroRedisSessionDAO() { + return new ShiroRedisSessionDAO(); + } + + /** + * 这里需è¦è®¾ç½®ä¸€ä¸ªcookieçš„å称 åŽŸå› å°±æ˜¯ä¼šè·ŸåŽŸæ¥çš„sessionçš„id值é‡å¤çš„ + */ + @Bean + public SimpleCookie simpleCookie() { + return new SimpleCookie("SHAREJSESSIONID"); + } + + + @Bean + public AuthenticationFilter authenticationFilter() { + return new AuthenticationFilter(); + } + + @Bean + public AuthorizationFilter authorizationFilter() { + return new AuthorizationFilter(); + } + +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/controller/AuthController.java b/wisenergy-shiro/src/main/java/com/project/shiro/controller/AuthController.java new file mode 100644 index 0000000000000000000000000000000000000000..e00226deba6f802f8b32f3a8f73b17fc67d68c56 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/controller/AuthController.java @@ -0,0 +1,46 @@ +/* +package com.project.shiro.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +*/ +/** + * 控制器编ç 范例 + * + * @author wyy + * @date 2019-08-20 19:57 + *//* + +@Api(value = "shiroæƒé™æµ‹è¯•", tags = "shiroæƒé™æµ‹è¯•") +@RestController("adminAuthController") +@RequestMapping("/admin") +public class AuthController extends BaseController { + + */ +/** + * 测试æƒé™ + * + * @return + *//* + + @ApiOperation(value = "test", notes = "测试æƒé™", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "test", value = "测试å‚æ•°", dataType = "String") + }) + @RequiresPermissions({"admin:test1"}) + @PostMapping(value = "/test") + public Map<String, Object> test() { + return getResult(123); + } + +} +*/ diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/controller/BaseController.java b/wisenergy-shiro/src/main/java/com/project/shiro/controller/BaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..473a9fcda17264aca49f2b5e09d0c2cba472223b --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/controller/BaseController.java @@ -0,0 +1,139 @@ +/* +package com.project.shiro.controller; + +import BASE_RESP_CODE_ENUM; +import BaseCustomException; +import Result; +import net.sf.json.JSONObject; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.apache.shiro.authz.UnauthorizedException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.ConversionNotSupportedException; +import org.springframework.beans.TypeMismatchException; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.web.HttpMediaTypeNotAcceptableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Map; + +*/ +/** + * 控制器基类 + * + * @author wyy + * @date 2019å¹´0月14æ—¥ + *//* + +public abstract class BaseController { + private static final long serialVersionUID = -6344078923170236539L; + protected Logger log = LoggerFactory.getLogger(this.getClass()); + + */ +/** + * 应用接å£å¼‚å¸¸å¤„ç† + * + * @param response Response相应对象 + * @param ex + *//* + + @ResponseBody + @ExceptionHandler(Exception.class) + public void handleException(HttpServletResponse response, Exception ex) { + Class eClass = ex.getClass(); + Map<String, Object> map = new HashMap<>(); + */ +/*map.put(Result.RESULT_FLG.valueOf(), ResultUtil.Result.FAIL.getValue());*//* + + if (!eClass.equals(BaseCustomException.class)) { + log.error(ExceptionUtils.getStackTrace(ex)); + } + //以下异常ä¸ï¼Œé™¤æ³¨é‡Šè¿‡çš„,其他异常å¯ä¸å…³æ³¨ + if (eClass.equals(MissingServletRequestParameterException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.MIS_REQ_PARAM, map); + } else if (eClass.equals(TypeMismatchException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.MIS_REQ_PARAM, map); + } else if (eClass.equals(HttpMessageNotReadableException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.MIS_REQ_PARAM, map); + } else if (eClass.equals(HttpRequestMethodNotSupportedException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.METHOD_NOT_SUPPORTED, map); + } else if (eClass.equals(HttpMediaTypeNotAcceptableException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.MEDIA_TYPE_NOT_ACCEPT, map); + } else if (eClass.equals(HttpMediaTypeNotSupportedException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.MEDIA_TYPE_NOT_SUPPORTED, map); + } else if (eClass.equals(ConversionNotSupportedException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.SERVER_ERROR, map); + } else if (eClass.equals(HttpMessageNotWritableException.class)) { + addResCodeToMap(BASE_RESP_CODE_ENUM.SERVER_ERROR, map); + } else if (eClass.equals(BaseCustomException.class)) { //系统业务异常 + addExceptionToMap((BaseCustomException) ex, map); + } else if (eClass.equals(UnauthorizedException.class)) { // æ— æƒé™ + addExceptionToMap(new BaseCustomException(BASE_RESP_CODE_ENUM.REJECT_REQUEST), map); + } else { + addResCodeToMap(BASE_RESP_CODE_ENUM.SERVER_ERROR, map); + } + + // 错误相应编ç 回写 + PrintWriter writer = null; + try { + response.setContentType("application/json; charset=UTF-8"); + writer = response.getWriter(); + writer.write(JSONObject.fromObject(map).toString()); + writer.flush(); + } catch (Exception e) { + IOUtils.closeQuietly(writer); + log.error("接å£å¼‚常:{}", ExceptionUtils.getFullStackTrace(e)); + } + } + + */ +/** + * æ·»åŠ ç³»ç»Ÿå¼‚å¸¸ä¿¡æ¯åˆ°mapä¸ + * + * @param responseCodeEnum 错误å“应编ç 枚举类对象 + * @param map å“应错误编ç é›†åˆ + *//* + + protected void addResCodeToMap(BASE_RESP_CODE_ENUM responseCodeEnum, Map<String, Object> map) { + map.put(ResultUtil.ERRORCODE_PARAM_NAME, responseCodeEnum.getCode()); + map.put(ResultUtil.ERRORMSG_PARAM_NAME, responseCodeEnum.getMsg()); + } + + */ +/** + * æ·»åŠ å¼‚å¸¸ä¿¡æ¯åˆ°mapä¸ + * + * @param baseCustomException 接å£å¼‚常类 + * @param map 接å£å¼‚å¸¸é›†åˆ + *//* + + protected void addExceptionToMap(BaseCustomException baseCustomException, Map<String, Object> map) { + map.put(ResultUtil.ERRORCODE_PARAM_NAME, baseCustomException.getErrorCode()); + map.put(ResultUtil.ERRORMSG_PARAM_NAME, baseCustomException.getErrorMsg()); + } + + */ +/** + * æ·»åŠ æ•°æ®åˆ°ç»“æžœå¯¹è±¡ä¸ + * + * @param obj å°è£…接å£é›†åˆå‚æ•° + * @return + *//* + + public Map<String, Object> getResult(Object obj) { + Map<String, Object> map = new HashMap<>(); + map.put(ResultUtil.RESULT_PARAM_NAME, ResultUtil.Result.SUCCESS.getValue()); + map.put(ResultUtil.DATA_PARAM_NAME, obj); + return map; + } +} +*/ diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/controller/loginController.java b/wisenergy-shiro/src/main/java/com/project/shiro/controller/loginController.java new file mode 100644 index 0000000000000000000000000000000000000000..84a95179c750e097dc41b2d1bbae97ffac86f9a4 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/controller/loginController.java @@ -0,0 +1,62 @@ +/* +package com.project.shiro.controller; + +import BaseCustomException; +import com.project.shiro.util.AuthenticationToken; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.subject.Subject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +*/ +/** + * åŽå°å…¬ç”¨controller + *//* + +@RestController("adminLoginController") +@RequestMapping("/admin") +public class loginController extends BaseController { + private static final long serialVersionUID = -7624305021416504596L; + + */ +/** + * shiro登录 + * + * @return + *//* + + @ApiOperation(value = "shiro登录", notes = "shiro登录", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "loginName", value = "账户å", dataType = "String"), + @ApiImplicitParam(name = "enPassword", value = "密ç ", dataType = "String") + }) + @PostMapping(value = "/login") + public Map<String, Object> login(String loginName, String enPassword) { + try { + Subject subject = SecurityUtils.getSubject(); + AuthenticationToken token = new AuthenticationToken(loginName, enPassword, false, "", "", ""); + subject.login(token); + } catch (UnknownAccountException e) { + String msg = "è´¦å·ä¸å˜åœ¨"; + throw new BaseCustomException("10090", msg); + } catch (IncorrectCredentialsException e) { + String msg = "密ç ä¸æ£ç¡®"; + throw new BaseCustomException("10091", msg); + } catch (AuthenticationException e) { + String msg = "用户验è¯å¤±è´¥"; + throw new BaseCustomException("10092", msg); + } + return getResult("success"); + } + +} +*/ diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationFilter.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..62be758c5b6bac1cf56aa8211fe143ee5f70cdbc --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationFilter.java @@ -0,0 +1,275 @@ +package com.project.shiro.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.StringUtils; +import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; +import org.apache.shiro.web.util.WebUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * 自定义表å•è®¤è¯è¿‡æ»¤å™¨ + * + * @author wyy + * @date 2019/07/26 + */ +public class AuthenticationFilter extends FormAuthenticationFilter { + private static final Logger log = LoggerFactory.getLogger(AuthenticationFilter.class); + + //åŠ å¯†å¯†ç å‚æ•° + private static final String DEFAULT_EN_PASSWORD_PARAM = "enPassword"; + + //默认的登录å称 + private static final String DEFAULT_USERNAME_PARAM = "loginName"; + + //默认验è¯ç IDå‚æ•° + private static final String DEFAULT_CAPTCHA_ID_PARAM = "captchaId"; + + //默认验è¯ç å‚æ•° + private static final String DEFAULT_CAPTCHA_PARAM = "captcha"; + + private String captchaIdParam = DEFAULT_CAPTCHA_ID_PARAM; + + private String captchaParam = DEFAULT_CAPTCHA_PARAM; + + private String usernameParam = DEFAULT_USERNAME_PARAM; + + private String enPasswordParam = DEFAULT_EN_PASSWORD_PARAM; + + /** + * 创建token + */ + @Override + protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) { + String loginName = getUsername(request); + String password = getPassword(request); + boolean isRemeberMe = isRememberMe(request); + String ip = getHost(request); + return new com.project.shiro.util.AuthenticationToken(loginName, password, isRemeberMe, ip, "", ""); + } + + /** + * 登录拒ç»ï¼›å¢žåŠ Ajax异æ¥å¤„ç† + * + * @param servletRequest 请求对象 + * @param servletResponse å“应对象 + * @return + * @throws Exception + */ + @Override + protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { + // 判æ–是å¦ä¸ºajax异æ¥è¯·æ±‚ + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + + // 判æ–是å¦ä¸ºç™»å½•è¯·æ±‚ + if (this.isLoginRequest(servletRequest, response)) { + if (this.isLoginSubmission(servletRequest, response)) { + + if (log.isTraceEnabled()) { + log.trace("Login submission detected. Attempting to execute login."); + } + boolean b = executeLogin(servletRequest, response); + return b; + } else { + if (log.isTraceEnabled()) { + log.trace("Login page view."); + } + return true; + } + } else { + if (log.isTraceEnabled()) { + log.trace("Attempting to access a path which requires authentication. Forwarding to the Authentication url [" + this.getLoginUrl() + "]"); + } + + // 异æ¥è¯·æ±‚报错 + if (isAjaxReq(request, response)) { + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + PrintWriter out = response.getWriter(); + JSONObject json = new JSONObject(); + json.put("result", "fail"); + json.put("msg", "未登录"); + out.println(json); + out.flush(); + out.close(); + return false; + } + +// 如果åŒæ¥è¯·æ±‚继ç»æ‰§è¡ŒåŸºç±»æ–¹æ³•ï¼ˆå½“为åŒæ¥æ–¹æ³•çš„时候,基类会直接跳转登录页é¢ï¼‰ + return super.onAccessDenied(request, response); + } + + } + + /** + * é‡å†™ç™»å½•æˆåŠŸçš„方法;如果为异æ¥è¯·æ±‚,直接返回æˆåŠŸå“应 + * + * @param token + * @param subject + * @param servletRequest + * @param servletResponse + * @return + * @throws Exception + */ + @Override + protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { + // 如果为异æ¥è¯·æ±‚,登录æˆåŠŸåŽï¼Œç›´æŽ¥è¿”回数æ®ï¼Œå‰å°è·³è½¬ç™»å½•åŽçš„页é¢å¤„ç† + if (isAjaxReq(servletRequest, servletResponse)) { + HttpServletResponse response = (HttpServletResponse) servletResponse; + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + PrintWriter out = response.getWriter(); + JSONObject json = new JSONObject(); + json.put("result", "success"); + json.put("msg", "登录æˆåŠŸ"); + out.write(json.toJSONString()); + out.flush(); + out.close(); + return true; + } + return super.onLoginSuccess(token, subject, servletRequest, servletResponse); + } + + @Override + public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + //Always return true if the request's method is OPTIONSif (request instanceof HttpServletRequest) { + if (((HttpServletRequest) request).getMethod().toUpperCase().equals("OPTIONS")) { + return true; + } + return super.isAccessAllowed(request, response, mappedValue); + } + + /** + * é‡å†™ç™»å½•å¤±è´¥çš„方法;如果为异æ¥è¯·æ±‚,直接返回失败å“应 + * + * @param token + * @param e + * @param request + * @param response + * @return + */ + @Override + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { + // 如果为异æ¥ç™»å½•ï¼Œç›´æŽ¥è¿”回错误结果 + if (isAjaxReq(request, response)) { + PrintWriter out = null; + try { + response = (HttpServletResponse) response; + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + out = response.getWriter(); + JSONObject json = new JSONObject(); + if (e.equals("org.apache.shiro.authc.pam.UnsupportedTokenException")) { + String message = "验è¯ç 错误!"; + json.put("result", "fail"); + json.put("msg", message); + } else if (e.equals("org.apache.shiro.authc.UnknownAccountException")) { + String message = "æ¤è´¦å·ä¸å˜åœ¨!"; + json.put("result", "fail"); + json.put("msg", message); + } else if (e.equals("org.apache.shiro.authc.DisabledAccountException")) { + String message = "æ¤è´¦å·å·²è¢«ç¦ç”¨!"; + json.put("result", "fail"); + json.put("msg", message); + } else if (e.equals("org.apache.shiro.authc.LockedAccountException")) { + String message = "æ¤è´¦å·å·²è¢«é”定"; + json.put("result", "fail"); + json.put("msg", message); + } else if (e.equals("org.apache.shiro.authc.IncorrectCredentialsException")) { + String message = "密ç 错误"; + json.put("result", "fail"); + json.put("msg", message); + } else if (e.equals("org.apache.shiro.authc.AuthenticationException")) { + String message = "è´¦å·è®¤è¯å¤±è´¥!"; + json.put("result", "fail"); + json.put("msg", message); + } + out.write(json.toJSONString()); + out.flush(); + out.close(); + return false; + } catch (IOException ex) { + ex.printStackTrace(); + log.error("shiro认è¯å¤±è´¥"); + } + + } + + // åŒæ¥è¯·æ±‚走基类 + return super.onLoginFailure(token, e, request, response); + } + + + /** + * 获å–密ç + * + * @param servletRequest + * @return + */ + @Override + protected String getPassword(ServletRequest servletRequest) { + String parameter = servletRequest.getParameter(enPasswordParam); + HttpServletRequest request = (HttpServletRequest) servletRequest; + String enPasswor = request.getParameter(enPasswordParam); + String password = enPasswor; + return password; + } + + /** + * 判æ–是å¦ä¸ºAjax请求 + * + * @param servletRequest + * @param servletResponse + * @return + */ + public boolean isAjaxReq(ServletRequest servletRequest, ServletResponse servletResponse) { + boolean isAjaxReq = false; + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + String requestType = request.getHeader("X-Requested-With"); + if (requestType != null && requestType.equalsIgnoreCase("XMLHttpRequest")) { + isAjaxReq = true; + } + return isAjaxReq; + } + + public String getEnPasswordParam() { + return enPasswordParam; + } + + public void setEnPasswordParam(String enPasswordParam) { + this.enPasswordParam = enPasswordParam; + } + + public String getUsernameParam() { + return usernameParam; + } + + public String getCaptchaIdParam() { + return captchaIdParam; + } + + public void setCaptchaIdParam(String captchaIdParam) { + this.captchaIdParam = captchaIdParam; + } + + public String getCaptchaParam() { + return captchaParam; + } + + public void setCaptchaParam(String captchaParam) { + this.captchaParam = captchaParam; + } + +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationRealm.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationRealm.java new file mode 100644 index 0000000000000000000000000000000000000000..ea43120159aafec5effe5d88ab128b962b6298a8 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationRealm.java @@ -0,0 +1,195 @@ +package com.project.shiro.util; + +import com.alibaba.fastjson.JSONObject; +import com.project.model.core.Admin; +import com.project.model.core.Menu; +import com.project.model.core.Role; +import com.project.service.core.AdminService; +import com.project.service.core.MenuService; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.Permission; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; + +import javax.annotation.Resource; +import java.io.PrintWriter; +import java.util.*; + +/** + * è®¤è¯ + */ +public class AuthenticationRealm extends AuthorizingRealm { + + @Resource(name = "adminServiceImpl") + private AdminService adminService; + + @Resource(name = "menuServiceImpl") + private MenuService menuService; + + /** + * 获å–认è¯ä¿¡æ¯ + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken token) { + AuthenticationToken authToken = (AuthenticationToken) token; + // 获å–登录åã€å¯†ç + String username = authToken.getUsername(); + String password = new String(authToken.getPassword()); + + if (username != null && password != null) { + Admin admin = adminService.getByLoginName(username); + + if (admin == null) { + throw new UnknownAccountException(); + } + + if (!admin.getStatus().equals(Admin.STATUS_ENUM.ENABLE.getValue())) { + throw new DisabledAccountException(); + } + + //用户é”定 + if (admin.getIsLocked()) { + + //è´¦å·é”定分钟数 + Date lockedDate = admin.getLockedDate(); + Date unlockedDate = DateUtils.addMinutes(lockedDate, 10); + + //判æ–é”定时间是å¦å·²è¿‡ + if (new Date().after(unlockedDate)) { + admin.setLoginFailCnt(0); + admin.setIsLocked(false); + admin.setLockedDate(null); + adminService.update(admin); + } else { + throw new LockedAccountException(); + } + } + + //密ç ä¸æ£ç¡® + if (!DigestUtils.md5Hex(password).equals(admin.getLoginPwd())) { + int loginFailCount = admin.getLoginFailCnt() + 1; + if (loginFailCount >= 5) { + admin.setIsLocked(true); + admin.setLockedDate(new Date()); + } + admin.setLoginFailCnt(loginFailCount); + adminService.update(admin); + throw new IncorrectCredentialsException(); + } + admin.setLoginFailCnt(0); + adminService.update(admin); + return new SimpleAuthenticationInfo(new Principal(admin.getId(), username), password, getName()); + } + throw new UnknownAccountException(); + } + + /** + * 获å–授æƒä¿¡æ¯ + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + + Principal principal = (Principal) principals.fromRealm(getName()).iterator().next(); + + if (principal != null) { + SimpleAuthorizationInfo authInfo = new SimpleAuthorizationInfo(); + + //获å–admin对象 + Admin adminTemp = new Admin(); + adminTemp.setId(principal.getId()); + List<Admin> admins = adminService.getAdminCascadeRole(adminTemp); + Admin admin = admins.get(0); + + //获å–ç”¨æˆ·çš„è§’è‰²ä¿¡æ¯ + Set<String> roleSet = new HashSet<String>(); + for (Role role : admin.getRoles()) { + if (role.getStatus().equals(Role.STATUS_ENUM.ENABLE.getValue())) { + roleSet.add(role.getRoleCode()); + } + } + + //æ ¹æ®è§’色ids获å–æƒé™ä¿¡æ¯ + List<Menu> menuList = menuService.findOrdinaryMenu(principal.getId()); + Set<String> menuSet = new HashSet<String>(); + for (Menu menu : menuList) { + if (StringUtils.isNotBlank(menu.getCode())) { + menuSet.add(menu.getCode()); + } + } + + //将角色和资æºæ”¾å…¥æŽˆæƒå¯¹è±¡ä¸ + authInfo.addRoles(roleSet); + authInfo.addStringPermissions(menuSet); + return authInfo; + } + + return null; + } + + /** + * 超级管ç†å‘˜è‡ªåŠ¨èŽ·å–所有æƒé™ + */ +// @Override +// public boolean isPermitted(PrincipalCollection principals, String permission) { +//// User user = ((User) principals.getPrimaryPrincipal()); +//// if (Role.ADMIN_FLAG_SUPER_ADMIN == user.getRole().getAdminFlag()) { +//// return true; +//// } +// +// return isPermitted(principals, getPermissionResolver().resolvePermission(permission)); +// } + + @Override + public boolean isPermitted(PrincipalCollection principals, Permission permission) { + AuthorizationInfo info = getAuthorizationInfo(principals); + Collection<Permission> perms = getPermissions(info); + if (CollectionUtils.isEmpty(perms)) { + return false; + } + + for (Permission perm : perms) { + if (perm.implies(permission)) { + return true; + } + } + + return false; + } + + /** + * 踢掉上一个登录的åŒå用户 + * + * @param id 主键 + */ + +// private void stopPreviousSession(Integer id) { +// Collection<Session> sessions = sessionDAO.getActiveSessions(); +// Session currSession = SecurityUtils.getSubject().getSession(); +// Serializable sId = currSession.getId(); +// for (Session session : sessions) { +// SimplePrincipalCollection collection = (SimplePrincipalCollection) session +// .getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); +// if (collection == null) { +// continue; +// } +// +// User u = (User) collection.getPrimaryPrincipal(); +// if (id.equals(u.getId())) { +// if (sId.equals(session.getId())) { +// continue; +// } +// +// session.stop(); +// break; +// } +// } +// } + + +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationToken.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationToken.java new file mode 100644 index 0000000000000000000000000000000000000000..01bef66991867274db6de3cad24d049ba43556cd --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthenticationToken.java @@ -0,0 +1,41 @@ +package com.project.shiro.util; + +import org.apache.shiro.authc.UsernamePasswordToken; + +/** + * 登录令牌 + */ +public class AuthenticationToken extends UsernamePasswordToken { + + private static final long serialVersionUID = 4628652632307774263L; + + //验è¯ç ID + private String captchaId; + + //验è¯ç + private String captcha; + + //ipä¿ç•™ + public AuthenticationToken(String loginName, String password, boolean remeberMe, String ip, String captchaId, String caprcha) { + super(loginName, password, remeberMe); + this.captchaId = captchaId; + this.captcha = caprcha; + } + + public String getCaptchaId() { + return captchaId; + } + + public void setCaptchaId(String captchaId) { + this.captchaId = captchaId; + } + + public String getCaptcha() { + return captcha; + } + + public void setCaptcha(String captcha) { + this.captcha = captcha; + } + +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthorizationFilter.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthorizationFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..3e4192f4c6535354f3761f964ea1fc8c3e0ee067 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/AuthorizationFilter.java @@ -0,0 +1,47 @@ +package com.project.shiro.util; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ResponseHeader; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * @author wyy + * @date 2019-09-14 17:57 + */ +public class AuthorizationFilter extends PermissionsAuthorizationFilter { + /** + * shiro认è¯perms资æºå¤±è´¥åŽå›žè°ƒæ–¹æ³• + * @param servletRequest + * @param servletResponse + * @return + * @throws IOException + */ + @Override + protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; + String requestedWith = httpServletRequest.getHeader("X-Requested-With"); + if (StringUtils.isNotEmpty(requestedWith) && StringUtils.equals(requestedWith, "XMLHttpRequest")) {//如果是ajaxè¿”å›žæŒ‡å®šæ ¼å¼æ•°æ® + httpServletResponse.setContentType("application/json"); + httpServletResponse.setCharacterEncoding("UTF-8"); + PrintWriter out = httpServletResponse.getWriter(); + JSONObject json = new JSONObject(); + json.put("result", "success"); + json.put("msg", "登录æˆåŠŸ"); + out.write(json.toJSONString()); + out.flush(); + out.close(); + } else {//如果是普通请求进行é‡å®šå‘ + httpServletResponse.sendRedirect("/403"); + } + return false; + } +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/Principal.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/Principal.java new file mode 100644 index 0000000000000000000000000000000000000000..332eaf4a13f19b795f7f7ee5ad8f229d033443c2 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/Principal.java @@ -0,0 +1,38 @@ +package com.project.shiro.util; + +import java.io.Serializable; + +public class Principal implements Serializable { + + private static final long serialVersionUID = 598764316789461315L; + + public Long id; + + public String loginName; + + public Principal(Long id, String loginName) { + this.id = id; + this.loginName = loginName; + } + + public Principal() { + + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisCache.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisCache.java new file mode 100644 index 0000000000000000000000000000000000000000..ac97a732598069a5c9585006b36066ea8388fedc --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisCache.java @@ -0,0 +1,178 @@ +package com.project.shiro.util.redis; + +import cn.wisenergy.service.common.utils.ByteUtil; +import cn.wisenergy.service.common.utils.redis.RedisClient; +import cn.wisenergy.service.common.utils.redis.RedisConsts; +import org.apache.shiro.cache.Cache; +import org.apache.shiro.cache.CacheException; +import org.apache.shiro.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.*; + +public class ShiroRedisCache<K, V> implements Cache<K, V> { + + //åˆå§‹åŒ–Log日志 + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + //注入redisClient实例 + @Resource(name = "redisClient") + private RedisClient redisClient; + + //shiroSessionçš„key值å‰ç¼€ + private String keyPrefix; + + //通过redisClient实例和prefixå‚æ•°æž„é€ redisCache + public ShiroRedisCache(RedisClient redisClient, String prefix) { + if (redisClient == null) { + throw new IllegalArgumentException("shiroRedisCaheåˆå§‹åŒ–时,redisClientå‚æ•°ä¸èƒ½ä¸ºç©º"); + } + this.redisClient = redisClient; + this.keyPrefix = prefix; + } + + /** + * 获得String类型的KEY + * + * @param key + * @return + */ + private String getPreStringKey(K key) { + String preKey = null; + if (key instanceof String) { + preKey = this.keyPrefix + key; + return preKey; + } else { + try { + preKey = keyPrefix + ByteUtil.bytesToHexString(ByteUtil.objectToBytes(key)); + } catch (IOException e) { + e.printStackTrace(); + } + return preKey; + } + } + + @Override + public V get(K key) throws CacheException { + logger.debug("æ ¹æ®key从Redisä¸èŽ·å–对象 key [" + key + "]"); + try { + if (key == null) { + return null; + } else { + V Vvalue = (V) redisClient.get(getPreStringKey(key)); + if (Vvalue == null) { + return null; + } + return Vvalue; + } + } catch (Throwable t) { + throw new CacheException(t); + } + + } + + @Override + public V put(K key, V value) throws CacheException { + logger.debug("æ ¹æ®key从å˜å‚¨ key [" + key + "]"); + try { + redisClient.set(getPreStringKey(key), value); + redisClient.setAndExpire(getPreStringKey(key), value, RedisConsts.ADMIN_SHIRO_REALM_EXPIRE); + return value; + } catch (Throwable t) { + throw new CacheException(t); + } + } + + @Override + public V remove(K key) throws CacheException { + logger.debug("从redisä¸åˆ 除 key [" + key + "]"); + try { + V previous = get(key); + redisClient.del(getPreStringKey(key)); + return previous; + } catch (Throwable t) { + throw new CacheException(t); + } + } + + @Override + public void clear() throws CacheException { + logger.debug("从redisä¸åˆ é™¤æ‰€æœ‰å…ƒç´ "); + try { +// redisClient.flushDB(); + } catch (Throwable t) { + throw new CacheException(t); + } + } + + @Override + public int size() { +// try { +// Long longSize = new Long(redisClient.dbSize()); +// return longSize.intValue(); +// } catch (Throwable t) { +// throw new CacheException(t); +// } + return 0; + } + + @SuppressWarnings("unchecked") + @Override + public Set<K> keys() { + try { + Set<byte[]> keys = redisClient.keys(ByteUtil.objectToBytes(this.keyPrefix + "*")); + if (CollectionUtils.isEmpty(keys)) { + return Collections.emptySet(); + } else { + Set<K> newKeys = new HashSet<K>(); + for (byte[] key : keys) { + newKeys.add((K) key); + } + return newKeys; + } + } catch (Throwable t) { + throw new CacheException(t); + } + } + + @Override + public Collection<V> values() { + try { + Set<byte[]> keys = redisClient.keys(ByteUtil.objectToBytes(this.keyPrefix + "*")); + if (!CollectionUtils.isEmpty(keys)) { + List<V> values = new ArrayList<V>(keys.size()); + for (byte[] key : keys) { + @SuppressWarnings("unchecked") + V value = get((K) key); + if (value != null) { + values.add(value); + } + } + return Collections.unmodifiableList(values); + } else { + return Collections.emptyList(); + } + } catch (Throwable t) { + throw new CacheException(t); + } + } + + public String getKeyPrefix() { + return keyPrefix; + } + + public void setKeyPrefix(String keyPrefix) { + this.keyPrefix = keyPrefix; + } + + public RedisClient getRedisClient() { + return redisClient; + } + + public void setRedisClient(RedisClient redisClient) { + this.redisClient = redisClient; + } +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisCacheManager.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisCacheManager.java new file mode 100644 index 0000000000000000000000000000000000000000..3aa5f43ecafabff6f7eeeaafed1f0dfc78138ea6 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisCacheManager.java @@ -0,0 +1,59 @@ +package com.project.shiro.util.redis; + + +import cn.wisenergy.service.common.utils.redis.RedisClient; +import cn.wisenergy.service.common.utils.redis.RedisConsts; +import org.apache.shiro.cache.Cache; +import org.apache.shiro.cache.CacheException; +import org.apache.shiro.cache.CacheManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +public class ShiroRedisCacheManager implements CacheManager { + + private static final Logger logger = LoggerFactory.getLogger(ShiroRedisCacheManager.class); + + private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap<String, Cache>(); + + //注入redisClient实例 + @Resource(name = "redisClient") + private RedisClient redisClient; + + /** + * shiroæƒé™ç¼“å˜å‰ç¼€ + */ + private String keyPrefix = RedisConsts.ADMIN_SHIRO_REALM_KEY; + + + @Override + public <K, V> Cache<K, V> getCache(String name) throws CacheException { + + logger.debug("获å–å称为: " + name + " çš„RedisCache实例"); + Cache c = caches.get(keyPrefix + name); + if (c == null) { + c = new ShiroRedisCache<K, V>(redisClient, keyPrefix); + caches.put(keyPrefix + name, c); + } + return c; + } + + public RedisClient getRedisClient() { + return redisClient; + } + + public void setRedisClient(RedisClient redisClient) { + this.redisClient = redisClient; + } + + public String getKeyPrefix() { + return keyPrefix; + } + + public void setKeyPrefix(String keyPrefix) { + this.keyPrefix = keyPrefix; + } +} diff --git a/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisSessionDAO.java b/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisSessionDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..d921480e2ec515384e2e0fb908d653b6857e5cb4 --- /dev/null +++ b/wisenergy-shiro/src/main/java/com/project/shiro/util/redis/ShiroRedisSessionDAO.java @@ -0,0 +1,129 @@ +package com.project.shiro.util.redis; + +import cn.wisenergy.service.common.utils.ByteUtil; +import cn.wisenergy.service.common.utils.redis.RedisClient; +import cn.wisenergy.service.common.utils.redis.RedisConsts; +import org.apache.shiro.session.Session; +import org.apache.shiro.session.UnknownSessionException; +import org.apache.shiro.session.mgt.eis.AbstractSessionDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.Serializable; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +public class ShiroRedisSessionDAO extends AbstractSessionDAO { + + private static Logger logger = LoggerFactory.getLogger(ShiroRedisSessionDAO.class); + + //注入redisClient实例 + @Resource(name = "redisClient") + private RedisClient redisClient; + + /** + * shiro-redisçš„session对象å‰ç¼€ + */ + + private String keyPrefix = RedisConsts.ADMIN_SHIRO_SESSION_KEY; + + @Override + public void update(Session session) throws UnknownSessionException { + this.saveSession(session); + } + + private void saveSession(Session session) throws UnknownSessionException { + if (session == null || session.getId() == null) { + logger.error("session or session id is null"); + return; + } + this.redisClient.setAndExpire(this.getPreStringKey(session.getId()), session, RedisConsts.ADMIN_SHIRO_SESSION_EXPIRE); + } + + @Override + public void delete(Session session) { + if (session == null || session.getId() == null) { + logger.error("session or session id is null"); + return; + } + redisClient.del(getPreStringKey(session.getId())); + + } + + @Override + public Collection<Session> getActiveSessions() { + Set<Session> sessions = new HashSet<Session>(); + + Set<byte[]> keys = null; + try { + keys = redisClient.keys(ByteUtil.objectToBytes(this.keyPrefix + "*")); + } catch (IOException e) { + e.printStackTrace(); + } + if (keys != null && keys.size() > 0) { + for (byte[] key : keys) { + Session s = null; + try { + s = (Session) ByteUtil.bytesToObject(redisClient.get(key)); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + sessions.add(s); + } + } + + return sessions; + } + + @Override + protected Serializable doCreate(Session session) { + Serializable sessionId = this.generateSessionId(session); + this.assignSessionId(session, sessionId); + this.saveSession(session); + return sessionId; + } + + @Override + protected Session doReadSession(Serializable sessionId) { + if (sessionId == null) { + logger.error("session id is null"); + return null; + } + + Session s = (Session) redisClient.get(this.getPreStringKey(sessionId)); + return s; + } + + /** + * 获得String类型的key + * + * @param + * @return + */ + private String getPreStringKey(Serializable sessionId) { + String preKey = this.keyPrefix + sessionId; + return preKey; + } + + public String getKeyPrefix() { + return keyPrefix; + } + + public void setKeyPrefix(String keyPrefix) { + this.keyPrefix = keyPrefix; + } + + public void setRedisClient(RedisClient redisClient) { + this.redisClient = redisClient; + } + + public RedisClient getRedisClient() { + return redisClient; + } + +} diff --git a/wisenergy-web-admin/.gitignore b/wisenergy-web-admin/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f66076247712dbd69e9ec586a827b3bd8fcd7b --- /dev/null +++ b/wisenergy-web-admin/.gitignore @@ -0,0 +1,7 @@ +workspace +.project +.classpath +*.settings +.idea +*.class +target/ \ No newline at end of file diff --git a/wisenergy-web-admin/pom.xml b/wisenergy-web-admin/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb0b86183b5f5f7c02f8a87ed080ca529061ab32 --- /dev/null +++ b/wisenergy-web-admin/pom.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>cn.wisenergy</groupId> + <artifactId>wisenergy-parent</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>wisenergy-web-admin</artifactId> + <version>${moduleVersion.wisenergy-web-admin}</version> + <packaging>jar</packaging> + <name>${project.artifactId} Webapp</name> + + <!-- 项目ä¾èµ– --> + <dependencies> + <!-- 模å—ä¾èµ– --> + <dependency> + <groupId>cn.wisenergy</groupId> + <artifactId>wisenergy-service</artifactId> + <version>${moduleVersion.wisenergy-service}</version> + </dependency> + + <dependency> + <groupId>org.apache.shiro</groupId> + <artifactId>shiro-spring</artifactId> + <version>1.4.0</version> + </dependency> + </dependencies> + + <!-- MAVEN构建 --> + <build> + <finalName>${project.artifactId}-${moduleVersion.wisenergy-web-admin}</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <fork>true</fork> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/Application.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/Application.java new file mode 100644 index 0000000000000000000000000000000000000000..4165de6e495fc9ddc83047b5be0495464f57cfc1 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/Application.java @@ -0,0 +1,25 @@ +package cn.wisenergy; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableScheduling; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +/** + * é…ç½®nettyå¯åŠ¨ + */ +@EnableCaching +@SpringBootApplication(exclude = {MultipartAutoConfiguration.class}) +@MapperScan( + basePackages = "cn.wisenergy.mapper") +@EnableSwagger2 +@EnableScheduling +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} + diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/AccountController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/AccountController.java new file mode 100644 index 0000000000000000000000000000000000000000..0461a77714f1b6b5be67b8d071157a760de1cda5 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/AccountController.java @@ -0,0 +1,38 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.dto.AccountDto; +import cn.wisenergy.model.vo.AccountLoginVo; +import cn.wisenergy.service.app.AccountSerivce; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +/** + * @author 86187 + */ +@Api(tags = "管ç†å‘˜ç™»å½•") +@RestController +@RequestMapping("/account") +@Slf4j +public class AccountController { + @Autowired + private AccountSerivce accountSerivce; + + @ApiOperation(value = "管ç†å‘˜ç™»å½•",notes = "管ç†å‘˜ç™»å½•",httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userName",value = "è´¦å·",required = true), + @ApiImplicitParam(name = "password",value = "密ç ",required = true) + }) + @PostMapping("/login") + public R<AccountDto> getAccountInfo(@RequestBody AccountLoginVo accountLoginVo){ + log.info("AccountController[].getAccountInfo[].input.param:accountLoginVo:"+accountLoginVo); + //è¿”å›žæ•°æ® + return accountSerivce.getAccountInfo(accountLoginVo); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/BannerController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/BannerController.java new file mode 100644 index 0000000000000000000000000000000000000000..1f055e3ef39655997beaef6d0e88ddec674d5f96 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/BannerController.java @@ -0,0 +1,102 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Banner; +import cn.wisenergy.model.dto.BannerDto; +import cn.wisenergy.model.vo.AdvertisingQueryVo; +import cn.wisenergy.service.app.BannerService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author 86187 + * @ Description: 管ç†ç«¯-å¹¿å‘Šç®¡ç† + * @ Author : 86187 + * @ Date : 2021/1/14 10:43 + */ +@RestController +@Api(tags = "管ç†ç«¯-广告管ç†") +@RequestMapping("/banner") +@Slf4j +public class BannerController { + @Autowired + private BannerService bannerService; + + @ApiOperation(value = "å¹¿å‘Šæ·»åŠ ", notes = "å¹¿å‘Šæ·»åŠ ", httpMethod = "POST") + @ApiImplicitParam(name = "advertising", value = "广告数æ®", dataType = "Banner") + @PostMapping("/add") + public R<Boolean> add(@RequestBody Banner advertising) { + log.info("BannerController[].add[].input.param:advertising:" + advertising); + return bannerService.add(advertising); + } + + @ApiOperation(value = "广告查询", notes = "广告查询", httpMethod = "POST") + @ApiImplicitParam(name = "advertisingQueryVo", value = "分页数æ®", dataType = "AdvertisingQueryVo") + @PostMapping("/getList") + public R<PageInfo<BannerDto>> getList(@RequestBody AdvertisingQueryVo advertisingQueryVo) { + log.info("BannerController[].add[].input.param:advertisingQueryVo:" + advertisingQueryVo); + return bannerService.getList(advertisingQueryVo); + } + + @ApiOperation(value = "查看详情", notes = "查看详情", httpMethod = "GET") + @ApiImplicitParam(name = "id", value = "广告id", dataType = "int") + @GetMapping("/getById") + public R<Banner> getById(Integer id) { + log.info("BannerController[].getById[].input.param:id" + id); + return bannerService.getById(id); + + } + + @ApiOperation(value = "广告投放", notes = "广告投放", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "广告id", dataType = "int", required = true), + @ApiImplicitParam(name = "status", value = "广告状æ€:0:暂åœä¸ 1:投放ä¸", dataType = "int", required = true) + }) + @GetMapping("/putIn") + public R<Boolean> editStatus(Integer id, Integer status) { + log.info("BannerController[]editStatus[]input.param:id,status{}" + id, status); + return bannerService.editStatus(id, status); + } + + @ApiOperation(value = "广告编辑", notes = "广告编辑", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "advertising", value = "广告修改数æ®", dataType = "Banner"), + }) + @PostMapping("/edit") + public R<Boolean> edit(@RequestBody Banner advertising) { + log.info("BannerController[].edit[].input.param:advertising:" + advertising); + return bannerService.edit(advertising); + } + + + @ApiOperation(value = "获å–顶部/底部广告", notes = "获å–顶部/底部广告", httpMethod = "GET") + @ApiImplicitParam(name = "type", value = "广告类型:1:顶部 2:底部", dataType = "int", required = true) + @GetMapping("/getBanners") + public R<List<Banner>> getBanners(Integer type) { + log.info("BannerController[]getBanners[]input.param.type:" + type); + if (null == type) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + return bannerService.getTopBanners(type); + } + + @ApiOperation(value = "åˆ é™¤å¹¿å‘Š", notes = "åˆ é™¤å¹¿å‘Š", httpMethod = "GET") + @ApiImplicitParam(name = "id", value = "广告id", dataType = "int", required = true) + @GetMapping("/delBanner") + public R<Boolean> delBanner(Integer id) { + log.info("BannerController[]delBanner[]input.param.id:" + id); + if (null == id) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + return bannerService.delBanner(id); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/FileUploadController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/FileUploadController.java new file mode 100644 index 0000000000000000000000000000000000000000..f13985c578531af823beb62280396c918986b974 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/FileUploadController.java @@ -0,0 +1,84 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +/** + * @author 86187 + * @ Description: + * @ Author : 86187 + * @ Date : 2021/2/3 17:05 + */ +@Api(tags = "å›¾ç‰‡ä¸Šä¼ ") +@RestController +@RequestMapping("/pic") +@Slf4j +public class FileUploadController { + + /** + * 请求 url ä¸çš„资æºæ˜ 射,ä¸æŽ¨è写æ»åœ¨ä»£ç ä¸ï¼Œæœ€å¥½æä¾›å¯é…置,如 /upload_flowChart/** + */ + @Value("${uploadFile.resourceHandler}") + private String resourceHandler; + + /** + * ä¸Šä¼ æ–‡ä»¶ä¿å˜çš„本地目录,使用@Value获å–全局é…置文件ä¸é…置的属性值,如 D:/java/upload_flowChart/ + */ + @Value("${uploadFile.location}") + private String uploadImagesLocation; + + /** + * å…è®¸ä¸Šä¼ çš„æ ¼å¼ + */ + private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png", ".xlsx", ".xls"}; + + @ApiOperation(value = "æ–‡ä»¶ä¸Šä¼ ", notes = "æ–‡ä»¶ä¸Šä¼ ") + @PostMapping(value = "/upload", headers = "content-type=multipart/form-data") + public R file( + @ApiParam(required = true, value = "ä¸Šä¼ æ–‡ä»¶") + @RequestParam("file") MultipartFile file, + HttpServletRequest request) { + + boolean isLegal = true; + + if (file.isEmpty()) { + // ä¸Šä¼ æ–‡ä»¶ä¸ºç©º + return R.error("ä¸Šä¼ æ–‡ä»¶ä¸èƒ½ä¸ºç©º"); + } + for (String type : IMAGE_TYPE) { + if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) { + isLegal = false; + break; + } + } + if (isLegal) { + return R.error("ä¸Šä¼ æ–‡ä»¶ç±»åž‹ä¸ç¬¦åˆ"); + } + File folder = new File(uploadImagesLocation); + if (!folder.exists()) { + folder.mkdirs(); + } + String oldName = file.getOriginalFilename(); + String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf(".")); + try { + file.transferTo(new File(folder, newName)); + String url = "/upload_flowChart/" + newName; + return R.ok(200, url); + } catch (IOException e) { + e.printStackTrace(); + } + return R.error("ä¸Šä¼ æ–‡ä»¶å¤±è´¥ï¼"); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/GraduationController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/GraduationController.java new file mode 100644 index 0000000000000000000000000000000000000000..777749b4038410201128954353fc9932f1474c67 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/GraduationController.java @@ -0,0 +1,31 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Graduation; +import cn.wisenergy.service.app.GraduationSerivce; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Api(tags = "æ¯•ä¸šé™¢æ ¡æŸ¥è¯¢") +@RestController +@RequestMapping("/school") +@Slf4j +public class GraduationController { + + @Autowired + private GraduationSerivce graduationSerivce; + + @ApiOperation(value = "æ¯•ä¸šé™¢æ ¡æŸ¥è¯¢", notes = "æ¯•ä¸šé™¢æ ¡æŸ¥è¯¢",httpMethod = "GET") + @GetMapping(value = "/getList") + public R<List<Graduation>> getSchool(){ + return graduationSerivce.getList(); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayController.java new file mode 100644 index 0000000000000000000000000000000000000000..43eccc6407f9260a3d0f1fe6f89513546ef90f00 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayController.java @@ -0,0 +1,218 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.dto.PayPageDto; +import cn.wisenergy.model.dto.PayQueryDto; +import cn.wisenergy.service.app.WxPayService; +import cn.wisenergy.service.common.Common; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.request.AlipayTradeQueryRequest; +import com.alipay.api.response.AlipayTradeQueryResponse; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.crypto.IllegalBlockSizeException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; +import java.security.spec.InvalidKeySpecException; + +/** + * @author 86187 + * @ Description: + * @ Author : 86187 + * @ Date : 2021/2/1 10:05 + */ +@RestController +@Api(tags = "PC-支付接å£") +@RequestMapping("/pay") +@Slf4j +public class PayController { + private static final String CHARSET = "UTF-8"; + + @Autowired + private WxPayService wxPayService; + + @ApiOperation(value = "PC支付å®-支付接å£", notes = "PC支付å®-支付接å£", httpMethod = "POST") + @ApiImplicitParam(name = "payPageDto", value = "å‚æ•°", dataType = "PayPageDto") + @PostMapping("/page") + public R<String> doPost(@RequestBody PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse httpResponse) throws IOException, AlipayApiException { + + if (null == payPageDto || null == payPageDto.getTotal()) { + return R.error("人å‚ä¸èƒ½ä¸ºç©º!"); + } + + AlipayClient alipayClient = new DefaultAlipayClient(Common.PAY_URL_CS, Common.APP_ID_CS, Common.PRIVATE_KEY_CS, "json", "GBK", Common.ALIPAY_PUBLIC_KEY_CS, "RSA2"); + AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); + String tradeNo = "21" + System.currentTimeMillis(); + + //创建API对应的request + alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); + //在公共å‚æ•°ä¸è®¾ç½®å›žè·³å’Œé€šçŸ¥åœ°å€ + alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp"); + alipayRequest.setBizContent("{" + + "\"out_trade_no\":\"" + tradeNo + "\"," + + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"," + + "\"total_amount\":" + payPageDto.getTotal() + "," + + "\"subject\":\"充值\"," + + "\"body\":\"充值\"," + + "\"time_expire\":\"2021-01-30 10:05:01\"," + + " \"goods_detail\":[{" + + " \"goods_id\":\"apple-01\"," + + "\"alipay_goods_id\":\"20010001\"," + + "\"goods_name\":\"ipad\"," + + "\"quantity\":1," + + "\"price\":2000," + + "\"goods_category\":\"34543238\"," + + "\"categories_tree\":\"124868003|126232002|126252004\"," + + "\"body\":\"特价手机\"," + + "\"show_url\":\"http://www.alipay.com/xxx.jpg\"" + + " }]," + + "\"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\"," + + "\"extend_params\":{" + + "\"sys_service_provider_id\":\"2088511833207846\"," + + "\"hb_fq_num\":\"3\"," + + "\"hb_fq_seller_percent\":\"100\"," + + "\"industry_reflux_info\":\"{\\\\\\\"scene_code\\\\\\\":\\\\\\\"metro_tradeorder\\\\\\\",\\\\\\\"channel\\\\\\\":\\\\\\\"xxxx\\\\\\\",\\\\\\\"scene_data\\\\\\\":{\\\\\\\"asset_name\\\\\\\":\\\\\\\"ALIPAY\\\\\\\"}}\"," + + "\"card_type\":\"S0JP0000\"" + + " }," + + "\"goods_type\":\"0\"," + + "\"timeout_express\":\"90m\"," + + "\"promo_params\":\"{\\\"storeIdType\\\":\\\"1\\\"}\"," + + "\"royalty_info\":{" + + "\"royalty_type\":\"ROYALTY\"," + + " \"royalty_detail_infos\":[{" + + " \"serial_no\":1," + + "\"trans_in_type\":\"userId\"," + + "\"batch_no\":\"123\"," + + "\"out_relation_id\":\"20131124001\"," + + "\"trans_out_type\":\"userId\"," + + "\"trans_out\":\"2088101126765726\"," + + "\"trans_in\":\"2088101126708402\"," + + "\"amount\":0.1," + + "\"desc\":\"分账测试1\"," + + "\"amount_percentage\":\"100\"" + + " }]" + + " }," + + "\"sub_merchant\":{" + + "\"merchant_id\":\"2088000603999128\"," + + "\"merchant_type\":\"alipay: 支付å®åˆ†é…的间连商户编å·, merchant: 商户端的间连商户编å·\"" + + " }," + + "\"merchant_order_no\":\"20161008001\"," + + "\"enable_pay_channels\":\"pcredit,moneyFund,debitCardExpress\"," + + "\"store_id\":\"NJ_001\"," + + "\"disable_pay_channels\":\"pcredit,moneyFund,debitCardExpress\"," + + "\"qr_pay_mode\":\"1\"," + + "\"qrcode_width\":100," + + "\"settle_info\":{" + + " \"settle_detail_infos\":[{" + + " \"trans_in_type\":\"cardAliasNo\"," + + "\"trans_in\":\"A0001\"," + + "\"summary_dimension\":\"A0001\"," + + "\"settle_entity_id\":\"2088xxxxx;ST_0001\"," + + "\"settle_entity_type\":\"SecondMerchantã€Store\"," + + "\"amount\":0.1" + + " }]," + + "\"settle_period_time\":\"7d\"" + + " }," + + "\"invoice_info\":{" + + "\"key_info\":{" + + "\"is_support_invoice\":true," + + "\"invoice_merchant_name\":\"ABC|003\"," + + "\"tax_num\":\"1464888883494\"" + + " }," + + "\"details\":\"[{\\\"code\\\":\\\"100294400\\\",\\\"name\\\":\\\"æœé¥°\\\",\\\"num\\\":\\\"2\\\",\\\"sumPrice\\\":\\\"200.00\\\",\\\"taxRate\\\":\\\"6%\\\"}]\"" + + " }," + + "\"agreement_sign_params\":{" + + "\"personal_product_code\":\"GENERAL_WITHHOLDING_P\"," + + "\"sign_scene\":\"INDUSTRY|CARRENTAL\"," + + "\"external_agreement_no\":\"test\"," + + "\"external_logon_id\":\"13852852877\"," + + "\"sign_validity_period\":\"2m\"," + + "\"third_party_type\":\"PARTNER\"," + + "\"buckle_app_id\":\"1001164\"," + + "\"buckle_merchant_id\":\"268820000000414397785\"," + + "\"promo_params\":\"{\\\"key\\\",\\\"value\\\"}\"" + + " }," + + "\"integration_type\":\"PCWEB\"," + + "\"request_from_url\":\"https://\"," + + "\"business_params\":\"{\\\"data\\\":\\\"123\\\"}\"," + + "\"ext_user_info\":{" + + "\"name\":\"æŽæ˜Ž\"," + + "\"mobile\":\"16587658765\"," + + "\"cert_type\":\"IDENTITY_CARD\"," + + "\"cert_no\":\"362334768769238881\"," + + "\"min_age\":\"18\"," + + "\"fix_buyer\":\"F\"," + + "\"need_check_info\":\"F\"" + + " }" + + " }"); + String form = ""; + //调用SDK生æˆè¡¨å• + form = alipayClient.pageExecute(alipayRequest).getBody(); + + httpResponse.setContentType("text/html;charset=" + CHARSET); + //直接将完整的表å•htmlè¾“å‡ºåˆ°é¡µé¢ + httpResponse.getWriter().write(form); + httpResponse.getWriter().flush(); + httpResponse.getWriter().close(); + return R.ok(); + } + + @ApiOperation(value = "PC支付å®-交易查询", notes = "PC支付å®-交易查询", httpMethod = "POST") + @ApiImplicitParam(name = "payQueryDto", value = "查询å‚æ•°", dataType = "PayQueryDto") + @PostMapping("/query") + public R<String> query(@RequestBody PayQueryDto payQueryDto) throws AlipayApiException { + AlipayClient alipayClient = new DefaultAlipayClient(Common.PAY_URL_CS, Common.APP_ID_CS, Common.PRIVATE_KEY_CS, "json", "GBK", Common.ALIPAY_PUBLIC_KEY_CS, "RSA2"); + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + request.setBizContent("{" + + " \"out_trade_no\":\"" + payQueryDto.getOutTradeNo() + "\"," + + " \"trade_no\":\"" + payQueryDto.getTradeNo() + "\"" + + " }"); + AlipayTradeQueryResponse response = alipayClient.execute(request); + System.out.println(response.getBody()); + return R.ok(response.getBody()); + } + + + @ApiOperation(value = "微行支付-统一下å•", notes = "微行支付-统一下å•", httpMethod = "POST") + @ApiImplicitParam(name = "payPageDto", value = "支付入å‚", dataType = "PayPageDto") + @PostMapping("/wxPay") + public R<String> wxPay(@RequestBody PayPageDto payPageDto) throws AlipayApiException, UnsupportedEncodingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, SignatureException { + return wxPayService.wxPay(payPageDto); + } + + + @ApiOperation(value = "微信支付-交易查询", notes = "微信支付-交易查询", httpMethod = "POST") + @ApiImplicitParam(name = "payQueryDto", value = "查询å‚æ•°", dataType = "PayQueryDto") + @PostMapping("/queryWx") + public R<String> queryWx(@RequestBody PayQueryDto payQueryDto) throws AlipayApiException, InvalidKeySpecException, SignatureException, NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException { + if (null == payQueryDto || StringUtils.isBlank(payQueryDto.getOutTradeNo())) { + return R.error("æ“作错误!"); + } + + return wxPayService.queryWx(payQueryDto); + } + + @ApiOperation(value = "测试-微行支付-统一下å•", notes = "测试-微行支付-统一下å•", httpMethod = "POST") + @ApiImplicitParam(name = "payPageDto", value = "支付入å‚", dataType = "PayPageDto") + @PostMapping("/wx_Pay") + public R<String> wx_Pay(@RequestBody PayPageDto payPageDto) throws AlipayApiException, IOException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, SignatureException, IllegalBlockSizeException { + return wxPayService.wx_Pay(payPageDto); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayRecordController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayRecordController.java new file mode 100644 index 0000000000000000000000000000000000000000..675e704126d125f00aa99e528209bc4719203214 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayRecordController.java @@ -0,0 +1,60 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.PayRecord; +import cn.wisenergy.model.app.Volunteer; +import cn.wisenergy.model.vo.PayRecordQueryVo; +import cn.wisenergy.model.vo.PayRecordShowVo; +import cn.wisenergy.service.app.PayRecordService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * @ Description: PC-我的账户 + * @ Author : 86187 + * @ Date : 2021/1/14 10:45 + * @author 86187 + */ +@RestController +@Api(tags = "PC-我的账户") +@RequestMapping("/pay/record") +@Slf4j +public class PayRecordController { + + @Autowired + private PayRecordService payRecordService; + + @ApiOperation(value = "ä¿å˜å……值记录", notes = "ä¿å˜å……值记录", httpMethod = "POST") + @ApiImplicitParam(name = "payRecord", value = "充值记录信æ¯", dataType = "PayRecord") + @PostMapping("/add") + public R<Boolean> add(@RequestBody PayRecord payRecord) { + log.info("volunteer-service[]PayRecordController[]add[]input.param.payRecord:" + payRecord); + if (null == payRecord) { + return R.error("å…¥å‚为空!"); + } + + return payRecordService.add(payRecord); + } + + @ApiOperation(value = "获å–充值记录列表", notes = "获å–充值记录列表", httpMethod = "GET") + @ApiImplicitParam(name = "payVo", value = "充值记录查询å‚æ•°", dataType = "PayRecord") + @GetMapping("/getList") + public R<PageInfo<PayRecordShowVo>> getList(PayRecordQueryVo payVo) { + log.info("volunteer-service[]PayRecordController[]getList[]input.param.payVo:" + payVo); + if (null == payVo) { + return R.error("å…¥å‚为空!"); + } + + return payRecordService.getList(payVo); + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PriceController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PriceController.java new file mode 100644 index 0000000000000000000000000000000000000000..d0bfa111ccf03a9b44e4f6950f54f518fc2ec8bc --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PriceController.java @@ -0,0 +1,36 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Price; +import cn.wisenergy.service.app.PriceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +/** + * @author 86187 + */ +@Api(tags = "ä»·æ ¼æ˜Žç»†") +@RestController +@RequestMapping("/price") +@Slf4j +public class PriceController { + + @Autowired + private PriceService priceService; + + @ApiOperation(value = "获å–ä»·æ ¼æ˜Žç»†", notes = "获å–ä»·æ ¼æ˜Žç»†", httpMethod = "GET") + @GetMapping("/getList") + public R<List<Price>> getList() { + log.info("volunteer-service[]PriceController[]getList[]input.param"); + + return priceService.getList(); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/ProfessionController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/ProfessionController.java new file mode 100644 index 0000000000000000000000000000000000000000..0ce7e347d636f6d575e0d01d2931a60d21027806 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/ProfessionController.java @@ -0,0 +1,44 @@ +package cn.wisenergy.web.admin.controller.app; + + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.Profession; +import cn.wisenergy.service.app.ProfessionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @ Description: 用户管ç†æ¨¡ + * @ Author : 86187 + * @ Date : 2021/1/13 10:29 + */ +@RestController +@Api(tags = "专业管ç†") +@RequestMapping("/profession") +@Slf4j +public class ProfessionController { + @Autowired + private ProfessionService professionService; + + @ApiOperation(value = "获å–ä¸“ä¸šæ ‘ç»“æž„", notes = "获å–ä¸“ä¸šæ ‘ç»“æž„", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "type", value = "考生类型 1:文化考生 2:美术考生 3:体育生 4:文å¦ç¼–导", dataType = "int"), + @ApiImplicitParam(name = "userId", value = "考生id", dataType = "int") + }) + @GetMapping("/getTree") + public R<List<Profession>> getTree(Integer type,Integer userId) { + if (null == type || null == userId) { + return R.error("å…¥å‚为空!"); + } + return professionService.getTree(type,userId); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/RefillCardController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/RefillCardController.java new file mode 100644 index 0000000000000000000000000000000000000000..32f8c3abe40571af5a82f5b62e0d5acdd4d293b5 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/RefillCardController.java @@ -0,0 +1,77 @@ +package cn.wisenergy.web.admin.controller.app; + + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.RefillCard; +import cn.wisenergy.model.dto.RefillCardDto; +import cn.wisenergy.service.app.RefillCardService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; + +@Api(tags = "充值å¡ç®¡ç†") +@RestController +@RequestMapping("/refillCard") +@Slf4j +public class RefillCardController { + + @Autowired + private RefillCardService refillCardService; + + @ApiOperation(value = "æ·»åŠ å……å€¼å¡",notes = "æ·»åŠ å……å€¼å¡",httpMethod = "POST") + @ApiImplicitParam(name = "numbers",value = "å¡çš„æ•°é‡",dataType="int",required = true) + @PostMapping("/manage") + public R<Boolean> manage(Integer numbers){ + log.info("RefillCardController[].manage[].input.param,numbers"+numbers); + + //创建对象å‚æ•° + RefillCard refillCard = new RefillCard(); + refillCard.setCardNumber(numbers); + return refillCardService.add(refillCard); + } + + @ApiOperation(value = "激活充值å¡",notes = "激活充值å¡",httpMethod = "POST") + @ApiImplicitParam(name = "batchNumber",value = "批次å·",dataType = "string",required = true) + @PostMapping("/update") + public R<Boolean> update(String batchNumber){ + log.info("RefillCardController[].manage[].input.param,batchNumber"+batchNumber); + return refillCardService.update(batchNumber); + } + + @ApiOperation(value = "充值å¡æŸ¥è¯¢",notes = "充值å¡æŸ¥è¯¢",httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNo",value = "页数",dataType="int"), + @ApiImplicitParam(name = "pageSize",value = "æ¯é¡µæ˜¾ç¤ºæ¡æ•°",dataType="int") + }) + @GetMapping("/select") + public R<PageInfo<RefillCardDto>> select(Integer pageNo, Integer pageSize){ + log.info("RefillCardController[].select[].input.param.parampageNo,pageSize"+pageNo,pageSize); + return refillCardService.getList(pageNo, pageSize); + } + + @ApiOperation(value = "生æˆå¡ç‰‡",notes = "生æˆå¡ç‰‡",httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id",value = "充值å¡id",dataType="int"), + }) + @GetMapping("/createCard") + public R<Boolean> createCard(Integer id){ + log.info("RefillCardController[].createCard[].input.param:id"+id); + return refillCardService.createCard(id); + } + + @ApiOperation(value = "充值å¡å¯¼å‡º",notes = "充值å¡å¯¼å‡º",httpMethod = "GET") + @ApiImplicitParam(name = "batchNumber",value = "充值å¡æ‰¹æ¬¡å·",dataType = "string",required = true) + @GetMapping(value = "/exportCard") + public R<Boolean> exportCard(String batchNumber, HttpServletResponse response){ + log.info("RefillCardController[].exportCard[].input.param:batchNumber"+batchNumber); + + return refillCardService.createExcel(batchNumber,response); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java new file mode 100644 index 0000000000000000000000000000000000000000..9a8b1d5ab6afeb7091fbc0e36775f8754d850d47 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java @@ -0,0 +1,136 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.expection.BaseException; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.SchemeInfo; +import cn.wisenergy.model.vo.SchemeQueryVo; +import cn.wisenergy.model.vo.SchemeVo; +import cn.wisenergy.model.vo.VolunteerVo; +import cn.wisenergy.service.app.SchemeService; +import cn.wisenergy.service.app.VolunteerService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + * @author 86187 + * @ Description: PC-方案 + * @ Author : 86187 + * @ Date : 2021/1/14 10:50 + */ +@RestController +@Api(tags = "PC-方案") +@RequestMapping("/scheme") +@Slf4j +public class SchemeController { + + @Autowired + private SchemeService schemeService; + + @Autowired + private VolunteerService volunteerService; + + @ApiOperation(value = "方案查询", notes = "方案查询", httpMethod = "GET") + @ApiImplicitParam(name = "queryVo", value = "志愿查询å‚æ•°", dataType = "SchemeQueryVo") + @GetMapping("/getList") + public R<VolunteerVo> getList(SchemeVo queryVo) { + log.info("volunteer-service[]SchemeController[]getList[]input.param.queryVo:" + queryVo); + if (null == queryVo) { + return R.error("å…¥å‚为空!"); + } + + return schemeService.getList(queryVo); + } + + @ApiOperation(value = "Excel批é‡æ·»åŠ 方案志愿", notes = "Excel批é‡æ·»åŠ 方案志愿") + @PostMapping("/excel/add") + public R excelAdd(@RequestParam("file") MultipartFile file, @RequestParam("type") Integer type, + @RequestParam("schemeName") String schemeName, + @RequestParam("fileUrl") String fileUrl, HttpServletResponse response) throws IOException { + log.info("volunteer-service[]SchemeController[]excelAdd[]input.param.file:" + file); + if (file == null || file.isEmpty() || null == type || StringUtils.isBlank(schemeName) || + StringUtils.isBlank(fileUrl)) { + throw new BaseException("æ“作错误"); + } + + volunteerService.excelAdd(file, type, schemeName, fileUrl, response); + return R.ok("æ·»åŠ æˆåŠŸ"); + } + + @ApiOperation(value = "测试Excel", notes = "测试Excel") + @ApiImplicitParam(name = "file", value = "志愿查询å‚æ•°", dataType = "MultipartFile") + @PostMapping("/excel/add/ceshi") + public R ceshi(@RequestBody MultipartFile file, HttpServletResponse response) throws IOException { + log.info(""); + if (file == null || file.isEmpty()) { + throw new BaseException("æ“作错误"); + } + + volunteerService.ceshi(file, response); + return R.ok("æ·»åŠ æˆåŠŸ"); + } + + + @ApiOperation(value = "æ–¹æ¡ˆä¸Šä¼ Excel模æ¿", notes = "æ–¹æ¡ˆä¸Šä¼ Excel模æ¿") + @PostMapping("/excel/template") + public R excelTemplate(HttpServletResponse response) throws IOException { + + volunteerService.excelTemplate(response); + return R.ok(response); + } + + @ApiOperation(value = "获å–方案列表", notes = "获å–方案列表", httpMethod = "GET") + @ApiImplicitParam(name = "queryVo", value = "查询å‚æ•°", dataType = "SchemeQueryVo") + @GetMapping("/getSchemeList") + public R<PageInfo<SchemeInfo>> getSchemeList(SchemeQueryVo queryVo) { + log.info("volunteer-service[]SchemeController[]getSchemeList[]input.param.queryVo:" + queryVo); + if (null == queryVo) { + return R.error("å…¥å‚为空!"); + } + + return schemeService.getSchemeList(queryVo); + } + + @ApiOperation(value = "åˆ é™¤æ–¹æ¡ˆ", notes = "åˆ é™¤æ–¹æ¡ˆ", httpMethod = "DELETE") + @ApiImplicitParam(name = "schemeId", value = "方案id", dataType = "schemeId") + @DeleteMapping("/delete") + public R<Boolean> delete(Integer schemeId) { + log.info("volunteer-service[]SchemeController[]getSchemeList[]input.param.schemeId:" + schemeId); + if (null == schemeId) { + return R.error("å…¥å‚为空!"); + } + + return schemeService.deleteById(schemeId); + } + + @ApiOperation(value = "获å–方案下载路径", notes = "获å–方案下载路径", httpMethod = "GET") + @ApiImplicitParam(name = "schemeId", value = "方案id", dataType = "int") + @GetMapping("/download") + public R<String> download(Integer schemeId) { + log.info("volunteer-service[]SchemeController[]download[]input.param.schemeId:" + schemeId); + if (null == schemeId) { + return R.error("å…¥å‚为空!"); + } + + return schemeService.download(schemeId); + } + + @ApiOperation(value = "测试é‡å¤æ•°æ®", notes = "测试é‡å¤æ•°æ®", httpMethod = "GET") + @ApiImplicitParam(name = "schemeId", value = "方案id", dataType = "int") + @GetMapping("/ceishi") + public List<Integer> ceishi(Integer schemeId) { + + return schemeService.ceishi(schemeId); + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeRecordController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeRecordController.java new file mode 100644 index 0000000000000000000000000000000000000000..ade25a045eebcc2b434ca2f490fceea09d1cc893 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeRecordController.java @@ -0,0 +1,99 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.SchemeQueryRecord; +import cn.wisenergy.model.app.Volunteer; +import cn.wisenergy.model.vo.SchemeRecordQueryVo; +import cn.wisenergy.service.app.SchemeRecordService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * @ Description: PC-我的方案 + * @ Author : 86187 + * @ Date : 2021/1/14 10:48 + * @author 86187 + */ +@RestController +@Api(tags = "PC-我的方案") +@RequestMapping("/scheme/record") +@Slf4j +public class SchemeRecordController { + + @Autowired + private SchemeRecordService schemeRecordService; + + @ApiOperation(value = "ä¿å˜æ–¹æ¡ˆæŸ¥è¯¢è®°å½•", notes = "ä¿å˜æ–¹æ¡ˆæŸ¥è¯¢è®°å½•", httpMethod = "POST") + @ApiImplicitParam(name = "query", value = "方案查询信æ¯", dataType = "SchemeQueryRecord") + @PostMapping("/add") + public R<SchemeQueryRecord> add(@RequestBody SchemeQueryRecord query) { + log.info("volunteer-service[]SchemeRecordController[]add[]input.param.query:" + query); + if (null == query) { + return R.error("å…¥å‚为空!"); + } + + return schemeRecordService.add(query); + } + + @ApiOperation(value = "获å–方案查询记录列表", notes = "获å–方案查询记录列表", httpMethod = "GET") + @ApiImplicitParam(name = "queryVo", value = "方案查询记录å‚æ•°", dataType = "SchemeRecordQueryVo") + @GetMapping("/getList") + public R<PageInfo<SchemeQueryRecord>> getList(SchemeRecordQueryVo queryVo) { + log.info("volunteer-service[]SchemeRecordController[]getList[]input.param.queryVo:" + queryVo); + if (null == queryVo) { + return R.error("å…¥å‚为空!"); + } + + return schemeRecordService.getList(queryVo); + } + + @ApiOperation(value = "获å–充值记录志愿列表", notes = "获å–充值记录志愿列表", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "int", required = true), + @ApiImplicitParam(name = "recordId", value = "记录id", dataType = "int", required = true) + }) + @GetMapping("/getVolunteerList") + public R<List<Volunteer>> getVolunteerList(Integer userId, Integer recordId) { + log.info("volunteer-service[]SchemeRecordController[]getVolunteerList[]input.param.userId:{},recordId:" + userId, recordId); + if (null == userId || null == recordId) { + return R.error("å…¥å‚为空!"); + } + + return schemeRecordService.getVolunteerList(userId, recordId); + } + + @ApiOperation(value = "方案导出", notes = "方案导出", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "int", required = true), + @ApiImplicitParam(name = "recordId", value = "记录id", dataType = "int", required = true) + }) + @GetMapping("/export") + public R<Boolean> export(Integer userId, Integer recordId, HttpServletResponse response) { + log.info("volunteer-service[]SchemeRecordController[]getVolunteerList[]input.param.userId,recordId:" + userId, recordId); + if (null == userId || null == recordId) { + return R.error("å…¥å‚为空!"); + } + + return schemeRecordService.export(userId, recordId,response); + } + + @ApiOperation(value = "方案Excel导出",notes = "方案Excel导出",httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "int", required = true), + @ApiImplicitParam(name = "recordId", value = "记录id", dataType = "int", required = true) + }) + @GetMapping(value = "/createExcel") + public R<Boolean> createExcel(Integer userId, Integer recordId, HttpServletResponse response){ + log.info("volunteer-service[]SchemeRecordController[]createExcel[]input.param.userId,recordId:" + userId, recordId); + return schemeRecordService.createExcel(userId,recordId,response); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SendSmsController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SendSmsController.java new file mode 100644 index 0000000000000000000000000000000000000000..5e72103f6f2b6b7ba2fd31807cb40fdbdf62a680 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SendSmsController.java @@ -0,0 +1,59 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.vo.SendSmsVo; +import cn.wisenergy.service.app.SendSmsSerVice; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author 86187 + * @ Description: çŸä¿¡ç®¡ç† + * @ Author : 86187 + * @ Date : 2021/1/15 15:40 + */ +@RestController +@Api(tags = "çŸä¿¡ç®¡ç†") +@RequestMapping("/user") +@Slf4j +public class SendSmsController { + @Autowired + private SendSmsSerVice sendSmsSerVice; + + @ApiOperation(value = "å‘é€çŸä¿¡éªŒè¯ç ", notes = "å‘é€çŸä¿¡éªŒè¯ç ", httpMethod = "POST") + @ApiImplicitParam(name = "sendSmsVo", value = "手机å·ç ", dataType = "SendSmsVo") + @PostMapping("/sendSms") + public R<Boolean> sendSms(@RequestBody SendSmsVo sendSmsVo) throws Exception { + log.info("SendSmsController[]sendSms[]input.param.sendSmsVo:" + sendSmsVo); + if (null == sendSmsVo || StringUtils.isBlank(sendSmsVo.getPhone()) || + null == sendSmsVo.getSource() || null == sendSmsVo.getScene()) { + return R.error("å…¥å‚为空!"); + } + + return sendSmsSerVice.sendSmCode(sendSmsVo); + } + + @ApiOperation(value = "在缓å˜ä¸è®°å½•éªŒè¯ç ", notes = "在缓å˜ä¸è®°å½•éªŒè¯ç ", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "phone", value = "手机å·ç ", dataType = "String", required = true), + @ApiImplicitParam(name = "code", value = "çŸä¿¡éªŒè¯ç ", dataType = "String", required = true), + @ApiImplicitParam(name = "scene", value = "场景类型 1:验è¯ç 登录 2:手机注册 3:修改密ç 4:找回密ç ", dataType = "int", required = true), + @ApiImplicitParam(name = "source", value = "æ¥æº PC/APP", dataType = "String", required = true) + }) + @GetMapping("/valid") + public R<Boolean> valid(String phone, String code, Integer scene, String source) { + log.info("SendSmsController[]valid[]input.param:phone,code,type" + phone, code, scene); + if (StringUtils.isBlank(phone) || StringUtils.isBlank(code) || StringUtils.isBlank(source) || + null == scene) { + return R.error("å…¥å‚为空!"); + } + + return sendSmsSerVice.valid(phone, code, scene, source); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserController.java new file mode 100644 index 0000000000000000000000000000000000000000..2367b663a3055fcd0215625dec031f7b1bba2df5 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserController.java @@ -0,0 +1,129 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.constant.RedisConsts; +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.User; +import cn.wisenergy.model.dto.UserCommitDto; +import cn.wisenergy.model.dto.UserInfoDto; +import cn.wisenergy.model.vo.UserInfoVo; +import cn.wisenergy.model.vo.UserQueryVo; +import cn.wisenergy.model.vo.UserShowVo; +import cn.wisenergy.service.app.UserService; +import cn.wisenergy.web.config.JwtConfig; +import cn.wisenergy.web.shiro.JwtUtil; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * @ Description: 用户管ç†æ¨¡ + * @ Author : 86187 + * @ Date : 2021/1/7 10:29 + * @author 86187 + */ +@RestController +@Api(tags = "PC-用户管ç†") +@RequestMapping("/user") +@Slf4j +public class UserController { + @Autowired + private UserService userService; + + @Autowired + private JwtUtil jwtUtil; + @Autowired + private JwtConfig jwtConfig; + @Autowired + private RedisTemplate<String, Object> redisTemplate; + + + @ApiOperation(value = "用户管ç†", notes = "用户管ç†", httpMethod = "POST") + @ApiImplicitParam(name = "queryVo", value = "用户信æ¯", dataType = "UserQueryVo") + @PostMapping("/manage") + public R<PageInfo<UserInfoDto>> manageUser(@RequestBody UserQueryVo queryVo) { + log.info("UserController[]manageUser[]input.param:queryV0:" + queryVo); + if (null == queryVo) { + return R.error("å…¥å‚为空!"); + } + //è¿”å›žæ•°æ® + return userService.getUserList(queryVo); + } + + @ApiOperation(value = "æ交个人信æ¯", notes = "æ交个人信æ¯", httpMethod = "POST") + @ApiImplicitParam(name = "userInfo", value = "个人信æ¯", dataType = "UserCommitDto") + @PostMapping("/commit") + public R<UserInfoVo> commitUserInfo(@RequestBody UserCommitDto userInfo) { + log.info("UserController[]commitUserInfo[]input.param:queryV0:" + userInfo); + if (null == userInfo) { + return R.error("å…¥å‚为空!"); + } + //è¿”å›žæ•°æ® + return userService.commitUserInfo(userInfo); + } + + @ApiOperation(value = "编辑个人信æ¯", notes = "编辑个人信æ¯", httpMethod = "POST") + @ApiImplicitParam(name = "userInfo", value = "个人信æ¯", dataType = "UserCommitDto") + @PostMapping("/edit") + public R<Boolean> edit(@RequestBody UserCommitDto userInfo) { + log.info("UserController[]edit[]input.param:queryV0:" + userInfo); + if (null == userInfo) { + return R.error("å…¥å‚为空!"); + } + //è¿”å›žæ•°æ® + return userService.edit(userInfo); + } + + @ApiOperation(value = "获å–个人信æ¯", notes = "获å–个人信æ¯", httpMethod = "GET") + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "int") + @GetMapping("/getById") + public R<UserShowVo> getById(Integer userId) { + log.info("UserController[]getById[]input.param:queryV0:" + userId); + if (null == userId) { + return R.error("å…¥å‚为空!"); + } + + //è¿”å›žæ•°æ® + return userService.getById(userId); + } + + @ApiOperation(value = "测试like循环查询", notes = "测试like循环查询", httpMethod = "GET") + @GetMapping("/test") + public R<List<User>> test() { + log.info("UserController[]test[]input.param"); + + //è¿”å›žæ•°æ® + return userService.test(); + } + + /** + * shiro登录 + * + * @return + */ + @ApiOperation(value = "获å–token接å£", notes = "获å–token接å£", httpMethod = "POST") + @PostMapping(value = "/login") + public R<String> login(String phone) { + if (StringUtils.isBlank(phone)) { + return R.error("å…¥å‚为空!"); + } + + //ç”¨æˆ·ä¿¡æ¯ + User user = userService.getByPhone(phone); + + // 创建token + String token = jwtUtil.generateToken(user); + // ä¿å˜Redis + redisTemplate.opsForValue().set(RedisConsts.JWT_ACCESS_TOKEN + token, token); + return R.ok(token); + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserLimitController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserLimitController.java new file mode 100644 index 0000000000000000000000000000000000000000..c37b751d6584e643b3b6d91e03d40cd132840f96 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserLimitController.java @@ -0,0 +1,68 @@ +package cn.wisenergy.web.admin.controller.app; + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.app.UserLimit; +import cn.wisenergy.model.vo.AddLimitVo; +import cn.wisenergy.model.vo.MinusLimitVo; +import cn.wisenergy.service.app.UserLimitService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author 86187 + * @ Description: PC-用户查询次数 + * @ Author : 86187 + * @ Date : 2021/1/14 10:50 + */ +@RestController +@Api(tags = "PC-用户查询次数") +@RequestMapping("/user/limit") +@Slf4j +public class UserLimitController { + + @Autowired + private UserLimitService userLimitService; + + @ApiOperation(value = "获å–用户查询次数", notes = "获å–用户查询次数", httpMethod = "GET") + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "int", required = true) + @GetMapping("/getByUserId") + public R<UserLimit> getByUserId(Integer userId) { + log.info("volunteer-service[]UserLimitController[]getVolunteerList[]input.param.userId:" + userId); + if (null == userId) { + return R.error("å…¥å‚为空!"); + } + + return userLimitService.getByUserId(userId); + } + + @ApiOperation(value = "用户充值", notes = "用户充值", httpMethod = "POST") + @ApiImplicitParam(name = "addLimitVo", value = "充值信æ¯", dataType = "AddLimitVo") + @PostMapping("/addLimit") + public R<Boolean> addLimit(@RequestBody AddLimitVo addLimitVo) { + log.info("volunteer-service[]UserLimitController[]addLimit[]input.param.addLimitVo:" + addLimitVo); + if (null == addLimitVo || null == addLimitVo.getUserId() || null == addLimitVo.getPayType()) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + return userLimitService.addLimit(addLimitVo); + } + + + @ApiOperation(value = "扣å‡ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°", notes = "扣å‡ç”¨æˆ·æŸ¥è¯¢æ¬¡æ•°", httpMethod = "POST") + @ApiImplicitParam(name = "minusLimitVo", value = "用户id", dataType = "MinusLimitVo") + @PostMapping("/minusLimit") + public R<Boolean> minusLimit(@RequestBody MinusLimitVo minusLimitVo) { + log.info("volunteer-service[]UserLimitController[]minusLimit[]input.param.minusLimitVo:" + minusLimitVo); + if (null == minusLimitVo || null == minusLimitVo.getUserId()) { + return R.error("å…¥å‚为空!"); + } + + return userLimitService.minusLimit(minusLimitVo.getUserId()); + } + + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserLoginController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserLoginController.java new file mode 100644 index 0000000000000000000000000000000000000000..2cbc569049d0fe40619d686e2d55cc1885f2a7ce --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/UserLoginController.java @@ -0,0 +1,122 @@ +package cn.wisenergy.web.admin.controller.app; + + +import cn.wisenergy.common.utils.R; +import cn.wisenergy.model.vo.*; +import cn.wisenergy.service.app.UserLoginService; +import cn.wisenergy.web.common.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author 86187 + * @ Description: PC-用户登录 + * @ Author : 86187 + * @ Date : 2021/1/14 10:50 + */ +@RestController +@Api(tags = "PC-用户登录") +@RequestMapping("/user/login") +@Slf4j +public class UserLoginController extends BaseController { + + @Autowired + private UserLoginService userLoginService; + + @ApiOperation(value = "用户注册", notes = "用户注册", httpMethod = "POST") + @ApiImplicitParam(name = "userVo", value = "用户信æ¯", dataType = "UserRegisterVo") + @PostMapping("/register") + public R<UserInfoVo> register(@RequestBody UserRegisterVo userVo) { + log.info("volunteer-service[]UserLongController[]resetPassword[]input.param.userVo:" + userVo); + + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || + StringUtils.isBlank(userVo.getPassword()) || StringUtils.isBlank(userVo.getSmCode()) || + null == userVo.getSource() || null == userVo.getScene()) { + return R.error("å…¥å‚为空!"); + } + + return userLoginService.register(userVo); + } + + @ApiOperation(value = "用户验è¯ç 登录", notes = "用户验è¯ç 登录", httpMethod = "POST") + @ApiImplicitParam(name = "userVo", value = "用户信æ¯", dataType = "UserLoginVo") + @PostMapping("/loginCode") + public R<UserInfoVo> loginCode(@RequestBody UserLoginVo userVo) { + log.info("volunteer-service[]UserLongController[]loginCode[]input.param.userVo:" + userVo); + + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getCode()) || + null == userVo.getSource() || null == userVo.getScene()) { + return R.error("å…¥å‚为空!"); + } + + return userLoginService.loginCode(userVo); + } + + @ApiOperation(value = "用户账å·å¯†ç 登录", notes = "用户账å·å¯†ç 登录", httpMethod = "POST") + @ApiImplicitParam(name = "userVo", value = "登录用户信æ¯", dataType = "UserLoginVo") + @PostMapping("/login") + public R<UserInfoVo> login(@RequestBody UserLoginVo userVo) { + log.info("volunteer-service[]UserLongController[]login[]input.param.userVo:" + userVo); + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getPassword())) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + return userLoginService.login(userVo); + } + + + @ApiOperation(value = "退出登录", notes = "退出登录", httpMethod = "POST") + @ApiImplicitParam(name = "outVo", value = "退出用户信æ¯", dataType = "LoginOutVo") + @PostMapping("/loginOut") + public R<Boolean> loginOut(@RequestBody LoginOutVo outVo) { + log.info("volunteer-service[]UserLongController[]loginOut[]input.param.outVo:" + outVo); + if (null == outVo || null == outVo.getUserId()) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + return userLoginService.loginOut(outVo.getUserId()); + } + + @ApiOperation(value = "修改用户密ç ", notes = "修改用户密ç ", httpMethod = "POST") + @ApiImplicitParam(name = "userVo", value = "用户密ç ", dataType = "UpdatePasswordVo") + @PostMapping("/updatePassword") + public R<Boolean> updatePassword(@RequestBody UpdatePasswordVo userVo) { + log.info("volunteer-service[]UserLongController[]updatePassword[]input.param.userVo:" + userVo); + if (null == userVo || null == userVo.getUserId() || StringUtils.isBlank(userVo.getOldPassword()) || + StringUtils.isBlank(userVo.getNewPassword())) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + return userLoginService.updatePassword(userVo); + } + + @ApiOperation(value = "é‡ç½®å¯†ç ", notes = "é‡ç½®å¯†ç ", httpMethod = "POST") + @PostMapping("/resetPassword") + public R<Boolean> resetPassword(Integer userId) { + log.info("volunteer-service[]UserLongController[]resetPassword[]input.param.userId:" + userId); + if (null == userId) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + return userLoginService.resetPassword(userId); + } + + @ApiOperation(value = "çŸä¿¡é‡ç½®å¯†ç ", notes = "修改用户密ç ", httpMethod = "POST") + @ApiImplicitParam(name = "userVo", value = "用户密ç ", dataType = "UserLoginVo") + @PostMapping("/smsResetPassword") + public R<Boolean> smsResetPassword(@RequestBody UserLoginVo userVo) { + log.info("volunteer-service[]UserLongController[]smsResetPassword[]input.param.userVo:" + userVo); + if (null == userVo || StringUtils.isBlank(userVo.getPhone()) || StringUtils.isBlank(userVo.getPassword()) || + null == userVo.getSource() || null == userVo.getScene()) { + return R.error("å…¥å‚ä¸èƒ½ä¸ºç©º!"); + } + + return userLoginService.smsResetPassword(userVo); + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/VolunteerController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/VolunteerController.java new file mode 100644 index 0000000000000000000000000000000000000000..deff57dcc3280094a8417b49231c6182b5f7f066 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/VolunteerController.java @@ -0,0 +1,19 @@ +package cn.wisenergy.web.admin.controller.app; + +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ Description: PC-å¿—æ„¿æ¨¡å— + * @ Author : 86187 + * @ Date : 2021/1/14 10:55 + * @author 86187 + */ +@RestController +@Api(tags = "PC-志愿模å—") +@RequestMapping("/volunteer") +@Slf4j +public class VolunteerController { +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/DataAuthAspect.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/DataAuthAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..4ffb6c7a69ff098feeb22e9940ddc674e0dfb3a3 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/DataAuthAspect.java @@ -0,0 +1,71 @@ +package cn.wisenergy.web.aspect; + +import cn.wisenergy.common.annotation.DataAuth; +import cn.wisenergy.common.constant.CommonConstants; +import cn.wisenergy.common.enums.RespCodeEnum; +import cn.wisenergy.common.utils.exception.Result; +import cn.wisenergy.model.app.AccountInfo; +import cn.wisenergy.service.app.AccountSerivce; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.Map; + +/** + * æ•°æ®æƒé™ï¼Œåˆ‡é¢å¤„ç†ç±» + */ +@Aspect +@Component +public class DataAuthAspect { + @Autowired + AccountSerivce sysUserService; + + @Pointcut("@annotation(cn.wisenergy.common.annotation.DataAuth)") + public void dataPointCut() { + } + + @Around("dataPointCut()") + public Object around(ProceedingJoinPoint pjp) throws Throwable { + MethodSignature signature = (MethodSignature) pjp.getSignature(); + Method method = signature.getMethod(); + // 获å–方法上的注解 + DataAuth dataAuth = method.getAnnotation(DataAuth.class); + if (dataAuth != null) { + // 获å–注解值 + String mapKey = dataAuth.value(); + // 获å–请求å‚æ•° + Object[] args = pjp.getArgs(); + for (Object obj : args) { + if (obj instanceof Map) { + Map<String, Object> map = (Map<String, Object>) obj; + // 获å–当å‰ç”¨æˆ· + AccountInfo sysUser = (AccountInfo) SecurityUtils.getSubject().getPrincipal(); + if (sysUser != null) { + // 超级管ç†å‘˜è¿”回全é‡æ•°æ® + if (!StringUtils.equals(sysUser.getId().toString(), CommonConstants.SUPER_ADMIN)) { + // 查询用户的数æ®æƒé™ä¿¡æ¯ï¼Œå¦‚æžœå˜åœ¨æ•°æ®æƒé™é›†åˆï¼Œå°†é›†åˆå˜å…¥è¯·æ±‚å‚æ•°mapä¸ +// Set<String> dataAuthList = sysUserService.getUserDataAuth(sysUser); +// if (dataAuthList != null && !dataAuthList.isEmpty()) { +// map.put(mapKey, dataAuthList); +// } + } + return pjp.proceed(); + } + } + } + } + Result result = new Result(); + result.setResult(Result.RESULT_FLG.FAIL.getValue()); + result.setErrorCode(RespCodeEnum.DATA_AUTH_UNAUTHORIZED.getCode()); + result.setErrorMsg(RespCodeEnum.DATA_AUTH_UNAUTHORIZED.getMsg()); + return result; + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/SysLogAspect.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/SysLogAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..e5e5b44b3f01ec351b6150f89a882563150f60fd --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/SysLogAspect.java @@ -0,0 +1,93 @@ +package cn.wisenergy.web.aspect; + +import cn.wisenergy.common.utils.exception.Result; +import cn.wisenergy.common.utils.ip.IpUtils; +import com.alibaba.fastjson.JSON; +import org.apache.shiro.SecurityUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Date; + +/** + * 系统日志,切é¢å¤„ç†ç±» + */ +@Aspect +@Component +public class SysLogAspect { +// @Autowired +// private SysLogService sysLogService; +// +// @Pointcut("@annotation(cn.wisenergy.common.annotation.SysLog)") +// public void logPointCut() { +// } +// +// @Around("logPointCut()") +// public Object around(ProceedingJoinPoint point) throws Throwable { +// long beginTime = System.currentTimeMillis(); +// //执行方法 +// Object result = point.proceed(); +// //执行时长(毫秒) +// long time = System.currentTimeMillis() - beginTime; +// +// //ä¿å˜æ—¥å¿— +// saveSysLog(point, time, result); +// +// return result; +// } +// +// private void saveSysLog(ProceedingJoinPoint joinPoint, long time,Object result) { +// MethodSignature signature = (MethodSignature) joinPoint.getSignature(); +// Method method = signature.getMethod(); +// +// SysLogEntity sysLog = new SysLogEntity(); +// cn.wisenergy.common.annotation.SysLog syslog = method.getAnnotation(cn.wisenergy.common.annotation.SysLog.class); +// if(syslog != null){ +// //注解上的æè¿° +// sysLog.setOperation(syslog.value()); +// } +// +// //请求的方法å +// String className = joinPoint.getTarget().getClass().getName(); +// String methodName = signature.getName(); +// sysLog.setMethod(className + "." + methodName + "()"); +// +// //请求的å‚æ•° +// Object[] args = joinPoint.getArgs(); +// String params = JSON.toJSONString(args); +// sysLog.setParams(params); +// +// //返回值 +// Result<?> r= (Result<?>) result; +// if("success".equals(r.getResult())) { +// sysLog.setState("æˆåŠŸ"); +// }else { +// sysLog.setState("失败"); +// } +// //获å–request +// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); +// //设置IPåœ°å€ +// sysLog.setIp(IpUtils.getIpAddr(request)); +// //用户å +// SysUserEntity principal = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); +// String username =principal.getUsername(); +// sysLog.setUsername(username); +// sysLog.setTime(time); +// sysLog.setCreateDate(new Date()); +// //ä¿å˜ç³»ç»Ÿæ—¥å¿— +// try { +// sysLogService.save(sysLog); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/WebLogAspect.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/WebLogAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..d92bf6e486903c90c34ecc0440a20e47adf5de37 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/aspect/WebLogAspect.java @@ -0,0 +1,62 @@ +package cn.wisenergy.web.aspect; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * AOP日志 + */ +@Aspect +@Component +@Slf4j +public class WebLogAspect { + + /** + * 两个..代表所有å目录,最åŽæ‹¬å·é‡Œçš„两个..代表所有å‚æ•° + */ + @Pointcut("execution( * cn.wisenergy.web.admin.controller..*.*(..))") + public void logPointCut() { + } + + @Before("logPointCut()") + public void doBefore(JoinPoint joinPoint) { + // 接收到请求,记录请求内容 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + + // 记录下请求内容 + log.info(" ___________________________________________________________"); + log.info("| è¯·æ±‚åœ°å€ : {}", request.getRequestURL().toString()); + log.info("| è¯·æ±‚æ–¹å¼ : {}", request.getMethod()); + // 获å–执行的方法全路径 + String methodName = joinPoint.getSignature().getName(); + log.info("| 执行方法 : {}.{}", joinPoint.getSignature().getDeclaringTypeName(), methodName); + } + + /** + * returning的值和doAfterReturningçš„å‚æ•°å一致 + */ + @AfterReturning(returning = "ret", pointcut = "logPointCut()") + public void doAfterReturning(Object ret) { + // 处ç†å®Œè¯·æ±‚,返回内容 + log.info("| 返回值 : {}", JSON.toJSONString(ret)); + log.info(" ———————————————————————————————————————————"); + } + + @Around("logPointCut()") + public Object doAround(ProceedingJoinPoint pjp) throws Throwable { + long startTime = System.currentTimeMillis(); + // ob 为方法的返回值 + Object ob = pjp.proceed(); + log.info("| 耗时 : {}", (System.currentTimeMillis() - startTime)); + return ob; + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/common/BaseController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/common/BaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..ec69513687499b1b60ff3eca9914c2f136ec080d --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/common/BaseController.java @@ -0,0 +1,49 @@ +package cn.wisenergy.web.common; + +import cn.wisenergy.model.app.User; +import cn.wisenergy.service.app.UserService; +import cn.wisenergy.web.shiro.JwtUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.servlet.http.HttpServletRequest; + +/** + * 控制器基类 + * + * @author wyy + * @date 2019å¹´08月15æ—¥ + */ +@Slf4j +public abstract class BaseController { + + @Autowired + private UserService authUserService; + @Autowired + JwtUtil jwtUtil; + @Autowired + HttpServletRequest request; + + /** + * 获å–当å‰ç™»å½•ç”¨æˆ· + * + * @return + */ + public User getUser() { + return (User) SecurityUtils.getSubject().getPrincipal(); + } + + + protected <T> Page<T> getPage(int size) { + int _size = size, _index = 1; + if (request.getParameter("_size") != null) { + _size = Integer.parseInt(request.getParameter("_size")); + } + if (request.getParameter("_index") != null) { + _index = Integer.parseInt(request.getParameter("_index")); + } + return new Page<T>(_index, _size); + } +} \ No newline at end of file diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/FilterConfig.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/FilterConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..8a51b76a1ca323b2c1ff62df4098154bc2d9dd44 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/FilterConfig.java @@ -0,0 +1,25 @@ +package cn.wisenergy.web.config; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.DelegatingFilterProxy; + +/** + * Filteré…ç½® + */ +@Configuration +public class FilterConfig { + + @Bean + public FilterRegistrationBean shiroFilterRegistration() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new DelegatingFilterProxy("shiroFilter")); + //该值缺çœä¸ºfalse,表示生命周期由SpringApplicationContext管ç†ï¼Œè®¾ç½®ä¸ºtrue则表示由ServletContainerç®¡ç† + registration.addInitParameter("targetFilterLifecycle", "true"); + registration.setEnabled(true); + registration.setOrder(Integer.MAX_VALUE - 1); + registration.addUrlPatterns("/*"); + return registration; + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/JwtConfig.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/JwtConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..7fec8e26059541cacd500652a764cdbf3f2ff019 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/JwtConfig.java @@ -0,0 +1,27 @@ +package cn.wisenergy.web.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * Jwté…ç½® + * + * @author lut + */ +@Data +@Component +@ConfigurationProperties(prefix = "jwt") +public class JwtConfig { + + /** + * 过期时间 + */ + private int expire; + + /** + * 秘钥串 + */ + private String secret; + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/MvcConfiguration.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/MvcConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..7632b8e7f25dcef52d7f8c026762a1a18d1c82ea --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/MvcConfiguration.java @@ -0,0 +1,164 @@ +package cn.wisenergy.web.config; + +import com.alibaba.fastjson.PropertyNamingStrategy; +import com.alibaba.fastjson.serializer.SerializeConfig; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.serializer.ToStringSerializer; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; +import org.springframework.format.FormatterRegistry; +import org.springframework.http.MediaType; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.math.BigInteger; +import java.nio.charset.Charset; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * MVCé…ç½® + * + * @author WYY + * @date 2019/4/18 + */ +@Configuration +public class MvcConfiguration implements WebMvcConfigurer { + + @Value("${uploadFile.resourceHandler}") + private String resourceHandler; + + @Value("${uploadFile.location}") + private String location; + + /** + * åŽç½®è·¨åŸŸæ”¯æŒã€å½“出现跨域请求,æ¤å¤„会放在拦截器最åŽæ‰§è¡Œï¼ŒCORS失效】 + * + * @param registry + */ + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedHeaders("*") + .allowedMethods("*") + .allowCredentials(true) + .maxAge(3600); + } + + /** + * é…置消æ¯è½¬æ¢å™¨ï¼šAliå¼€æºçš„fastJson + * + * @param converters + */ + @Override + public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { + // 先移除jackson转æ¢å™¨,springBoot1.xå¯ä»¥ä¸æŽ’除 + for (int i = converters.size() - 1; i >= 0; i--) { + if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) { + converters.remove(i); + } + } + //1.需è¦å®šä¹‰ä¸€ä¸ªconvert转æ¢æ¶ˆæ¯çš„对象; + FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); + StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); + ByteArrayHttpMessageConverter byteArrayHttpMessageConverter = new ByteArrayHttpMessageConverter(); + + //2.æ·»åŠ fastJsonçš„é…置信æ¯ï¼Œæ¯”如:是å¦è¦æ ¼å¼åŒ–返回的jsonæ•°æ®; + FastJsonConfig fastJsonConfig = new FastJsonConfig(); + fastJsonConfig.setSerializerFeatures( + SerializerFeature.PrettyFormat, + SerializerFeature.WriteMapNullValue, + SerializerFeature.WriteNullStringAsEmpty, + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.WriteNullListAsEmpty, + SerializerFeature.BrowserCompatible, + SerializerFeature.WriteDateUseDateFormat); + // 设置编ç + fastJsonConfig.setCharset(Charset.forName("UTF-8")); + fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); + + // 设置数å—转化问题 + SerializeConfig serializeConfig = SerializeConfig.globalInstance; + serializeConfig.put(BigInteger.class, ToStringSerializer.instance); + serializeConfig.put(Long.class, ToStringSerializer.instance); + serializeConfig.put(Long.TYPE, ToStringSerializer.instance); + serializeConfig.setPropertyNamingStrategy( PropertyNamingStrategy.CamelCase); + fastJsonConfig.setSerializeConfig(serializeConfig); + + //3处ç†ä¸æ–‡ä¹±ç 问题 + List<MediaType> fastMediaTypes = new ArrayList<>(); + fastMediaTypes.add(MediaType.APPLICATION_JSON); + fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); + fastMediaTypes.add(MediaType.TEXT_HTML); + fastMediaTypes.add(MediaType.MULTIPART_FORM_DATA); + + //4.在convertä¸æ·»åŠ é…置信æ¯. + fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); + fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); + + //5.å°†convertæ·»åŠ åˆ°converters当ä¸. + converters.add(fastJsonHttpMessageConverter); + converters.add(stringHttpMessageConverter); + converters.add(byteArrayHttpMessageConverter); + } + + /** + * å¯ç”¨@EnableWebMvcåŽï¼Œproperties文件ä¸çš„é™æ€è·¯å¾„失效,必须覆盖åŽé‡æ–°åˆ¶å®š + * é…ç½®é™æ€è®¿é—®èµ„æº + * + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + // swagger2é…ç½® + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + + // é™æ€èµ„æºæ‹¦æˆª + registry.addResourceHandler("/**") + .addResourceLocations("classpath:/META-INF/") + .addResourceLocations("classpath:/META-INF/resources/") + .addResourceLocations("classpath:/resources/") + .addResourceLocations("classpath:/static/") + .addResourceLocations("classpath:/public/") + .addResourceLocations("classpath:/"); + //ä¸Šä¼ æ–‡ä»¶é…ç½® + registry.addResourceHandler(resourceHandler) + .addResourceLocations("file:///"+location); + } + + @Override + public void addFormatters(FormatterRegistry registry) { + registry.addConverter(new Converter<String, Date>(){ + @Override + public Date convert(String source) { + SimpleDateFormat simpleDateFormat; + if (source.contains(" ")) { + simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } else { + simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + } + try { + return simpleDateFormat.parse(source); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + }); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/MyBatisPlusConfig.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/MyBatisPlusConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..593deac2a05495e8954ccd1ada3989febb17f583 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/MyBatisPlusConfig.java @@ -0,0 +1,22 @@ +package cn.wisenergy.web.config; + +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MyBatisPlusConfig { + + @Bean + public PaginationInterceptor paginationInterceptor() { + PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); + // 设置请求的页é¢å¤§äºŽæœ€å¤§é¡µåŽæ“作, true调回到首页,false 继ç»è¯·æ±‚ 默认false + // paginationInterceptor.setOverflow(false); + // 设置最大å•é¡µé™åˆ¶æ•°é‡ï¼Œé»˜è®¤ 500 æ¡ï¼Œ-1 ä¸å—é™åˆ¶ + // paginationInterceptor.setLimit(500); + // å¼€å¯ count çš„ join 优化,åªé’ˆå¯¹éƒ¨åˆ† left join + paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); + return paginationInterceptor; + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/rest/RestTemplateConfig.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/rest/RestTemplateConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..9d8de9fed5bb256b949be4c319e62e258a44d152 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/rest/RestTemplateConfig.java @@ -0,0 +1,14 @@ +package cn.wisenergy.web.config.rest; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Bean + RestTemplate restTemplate(){ + return new RestTemplate(); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/swagger/Swagger2.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/swagger/Swagger2.java new file mode 100644 index 0000000000000000000000000000000000000000..56e1b4443a91b08f20c7ba5f9987496117f86a12 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/swagger/Swagger2.java @@ -0,0 +1,51 @@ +package cn.wisenergy.web.config.swagger; + + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +//æ³¨è§£å¼€å¯ swagger2 功能 +@EnableSwagger2 +//æ³¨è§£æ ‡ç¤º,这是一个é…置类,@Configuation注解包å«äº†@Component注解 +//å¯ä»¥ä¸ç”¨åœ¨ä½¿ç”¨@Componentæ³¨è§£æ ‡è®°è¿™æ˜¯ä¸ªbean了, +@Configuration +public class Swagger2 { + + /** + * 通过 createRestApi函数æ¥æž„建一个DocketBean + * 函数å,å¯ä»¥éšæ„命å,喜欢什么命å就什么命å + */ + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo())//调用apiInfo方法,创建一个ApiInfo实例,里é¢æ˜¯å±•ç¤ºåœ¨æ–‡æ¡£é¡µé¢ä¿¡æ¯å†…容 + .select() + //控制暴露出去的路径下的实例 + //如果æŸä¸ªæŽ¥å£ä¸æƒ³æš´éœ²,å¯ä»¥ä½¿ç”¨ä»¥ä¸‹æ³¨è§£ + //@ApiIgnore è¿™æ ·,该接å£å°±ä¸ä¼šæš´éœ²åœ¨ swagger2 的页é¢ä¸‹ + .apis(RequestHandlerSelectors.basePackage("cn.wisenergy.web.admin.controller.app")) + .paths(PathSelectors.any()) + .build(); + } + + //构建 api文档的详细信æ¯å‡½æ•° + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + //页é¢æ ‡é¢˜ + .title("高考志愿一点通") + //创建人 + .contact(new Contact("WYY", "", "")) + //ç‰ˆæœ¬å· + .version("2.0") + //æè¿° + .description("API接å£æè¿°") + .build(); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/AuthToken.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/AuthToken.java new file mode 100644 index 0000000000000000000000000000000000000000..dfc30b13d62ea4037dc6466d797f9dd5f4ee859c --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/AuthToken.java @@ -0,0 +1,25 @@ +package cn.wisenergy.web.shiro; + + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * token + */ +public class AuthToken implements AuthenticationToken { + private String token; + + public AuthToken(String token) { + this.token = token; + } + + @Override + public String getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/JwtUtil.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/JwtUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..1e281e49ca607ef2bf066efe7ada1d598f168b6e --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/JwtUtil.java @@ -0,0 +1,108 @@ +package cn.wisenergy.web.shiro; + +import cn.wisenergy.common.enums.RespCodeEnum; +import cn.wisenergy.model.app.User; +import cn.wisenergy.web.config.JwtConfig; +import com.alibaba.fastjson.JSON; +import io.jsonwebtoken.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * Jwt-Token工具类 + * + * @author lut + */ +@Slf4j +@Component +@EnableConfigurationProperties(JwtConfig.class) +public class JwtUtil { + + @Autowired + JwtConfig jwtConfig; + + /** + * 生æˆJwt令牌 + * + * @param jSubject + * @return + */ + private String createJWT(String jSubject) { + log.info("构建Jwt令牌-->{}", jSubject); + return Jwts.builder() + .signWith(SignatureAlgorithm.HS512, jwtConfig.getSecret()) + .setSubject(jSubject) + .setIssuedAt(DateTime.now().toDate()) + //.setExpiration(DateTime.now().plusSeconds(jwtConfig.getExpire() * 2).toDate()) + .compact(); + } + + /** + * 解æžä»¤ç‰Œæ•°æ® + * + * @param token + * @return + */ + public Claims getClaimsFromToken(String token) { + Claims claims; + try { + claims = Jwts.parser() + .setSigningKey(jwtConfig.getSecret()) + .parseClaimsJws(token) + .getBody(); + } catch (ExpiredJwtException e) { + throw new IncorrectCredentialsException(RespCodeEnum.TOKEN_IS_NOT_TIMEOUT.getMsg()); + } catch (MalformedJwtException | SignatureException e) { + log.error("JWT解æžå¼‚常,ex={}", e.getMessage(), e); + throw new IncorrectCredentialsException(RespCodeEnum.TOKEN_IS_NOT_ERROR.getMsg()); + } + return claims; + } + + /** + * 生æˆJwt令牌 + * + * @param userDetails ç”¨æˆ·ä¿¡æ¯ + * @return + */ + public String generateToken(User userDetails) { + return createJWT(JSON.toJSONString(userDetails)); + } + + /** + * 从令牌ä¸èŽ·å–ç”¨æˆ·ä¿¡æ¯ + * + * @return + */ + public User getUserFromToken(Claims claims) { + return JSON.parseObject(claims.getSubject(), User.class); + } + + /** + * 判æ–令牌是å¦è¿‡æœŸ + * + * @param claims + * @return 是å¦è¿‡æœŸ + */ + public Boolean isTokenExpired(Claims claims) { + return claims.getExpiration().before(DateTime.now().plusSeconds(jwtConfig.getExpire()).toDate()); + } + + /** + * 从请求头ä¸èŽ·å–token + * + * @return + */ + public String getToken() { + HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest(); + return request.getHeader("Authorization"); + } +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/ShiroConfig.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/ShiroConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..26eddc497cd7962e64fd6d0e8b3071c122f33c9a --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/ShiroConfig.java @@ -0,0 +1,118 @@ +package cn.wisenergy.web.shiro; + +import cn.wisenergy.web.shiro.filter.AuthFilter; +import cn.wisenergy.web.shiro.filter.AuthRealm; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.Filter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * shiroé…置类 + */ +@Configuration +public class ShiroConfig { + + /** + * é…置拦截器 + * <p> + * 定义拦截URLæƒé™ï¼Œä¼˜å…ˆçº§ä»Žä¸Šåˆ°ä¸‹ + * 1). anon : 匿åè®¿é—®ï¼Œæ— éœ€ç™»å½• + * 2). authc : 登录åŽæ‰èƒ½è®¿é—® + * 3). logout: 登出 + * 4). frameperms : 自定义的过滤器 + * <p> + * URL 匹é…é£Žæ ¼ + * 1). ?:匹é…一个å—符,如 /admin? å°†åŒ¹é… /admin1,但ä¸åŒ¹é… /admin 或 /admin/ï¼› + * 2). *:匹é…零个或多个å—符串,如 /admin* å°†åŒ¹é… /admin 或/admin123,但ä¸åŒ¹é… /admin/1ï¼› + * 3). **:匹é…路径ä¸çš„零个或多个路径,如 /admin/** å°†åŒ¹é… /admin/a 或 /admin/a/b + * <p> + * é…置身份验è¯æˆåŠŸï¼Œå¤±è´¥çš„跳转路径 + */ + @Bean("shiroFilter") + public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + // 设置securityManager + shiroFilterFactoryBean.setSecurityManager(securityManager); + + // 自定义的过滤器 + Map<String, Filter> filterMap = new HashMap<>(); + // map里é¢key值è¦ä¸ºè¿‡æ»¤å™¨çš„å称,value为过滤器对象 + filterMap.put("oauth2", new AuthFilter()); + // å°†è‡ªå®šä¹‰çš„è¿‡æ»¤å™¨åŠ å…¥åˆ°è¿‡æ»¤å™¨é›†åˆä¸ + shiroFilterFactoryBean.setFilters(filterMap); + + // è®¾ç½®æ‹¦æˆªå™¨é›†åˆ + Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); +// filterChainDefinitionMap.put("/authInformation/save", "anon");//å˜å‚¨è®¾å¤‡IMEIå·å’Œæ‰‹æœºSIMå¡IDå· +// filterChainDefinitionMap.put("/sys/login", "anon"); // 登录页é¢-èº«ä»½è®¤è¯ +// filterChainDefinitionMap.put("/sys/registered", "anon"); // æ³¨å†Œé¡µé¢ +// filterChainDefinitionMap.put("/swagger-ui.html", "anon"); // swagger接å£-匿å访问 +// filterChainDefinitionMap.put("/swagger/**", "anon"); +// filterChainDefinitionMap.put("/admin/anon/**", "anon"); +// filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon"); +// filterChainDefinitionMap.put("/swagger-resources/**", "anon"); +// filterChainDefinitionMap.put("/v2/api-docs", "anon"); +// filterChainDefinitionMap.put("/upload_flowChart/**", "anon");//å›¾ç‰‡åœ°å€ +// filterChainDefinitionMap.put("/webSocket/**", "anon");//socket +// filterChainDefinitionMap.put("/message/**", "anon");//消æ¯æŽ¨é€æŽ¥å£ +// filterChainDefinitionMap.put("/**", "oauth2"); // 其他路径å‡éœ€è¦èº«ä»½è®¤è¯ï¼Œä¸€èˆ¬ä½äºŽæœ€ä¸‹é¢ï¼Œä¼˜å…ˆçº§æœ€ä½Ž + + // 设置拦截器 + shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); + return shiroFilterFactoryBean; + } + + /** + * é…ç½®Shiro生命周期处ç†å™¨ + */ + @Bean("lifecycleBeanPostProcessor") + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + @Bean + public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); + defaultAdvisorAutoProxyCreator.setUsePrefix(true); + return defaultAdvisorAutoProxyCreator; + } + + /** + * é…ç½®åŠ å¯†åŒ¹é…,使用MD5çš„æ–¹å¼ï¼Œè¿›è¡Œ1024æ¬¡åŠ å¯† + */ +// @Bean +// public HashedCredentialsMatcher hashedCredentialsMatcher() { +// HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); +// hashedCredentialsMatcher.setHashAlgorithmName("MD5"); +// hashedCredentialsMatcher.setHashIterations(1024); +// return hashedCredentialsMatcher; +// } + @Bean("securityManager") + public SecurityManager securityManager(AuthRealm authRealm) { + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + securityManager.setRealm(authRealm); + securityManager.setRememberMeManager(null); + return securityManager; + } + + /** + * å¼€å¯Shiro的注解 + */ + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { + AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); + advisor.setSecurityManager(securityManager); + return advisor; + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthFilter.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..a6262ce6f168cf1578b022e3fd573938228f5ae9 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthFilter.java @@ -0,0 +1,138 @@ +package cn.wisenergy.web.shiro.filter; + +import cn.wisenergy.common.enums.RespCodeEnum; +import cn.wisenergy.common.utils.HttpContextUtils; +import cn.wisenergy.common.utils.exception.Result; +import cn.wisenergy.web.shiro.AuthToken; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpStatus; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.web.filter.authc.AuthenticatingFilter; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * oauth2过滤器 + */ +@Slf4j +public class AuthFilter extends AuthenticatingFilter { + + /** + * 这里é‡å†™äº†çˆ¶ç±»çš„方法,使用我们自己定义的Token类,æ交给shiro。 + * 这个方法返回nullçš„è¯ä¼šç›´æŽ¥æŠ›å‡ºå¼‚常,进入isAccessAllowed() 的异常处ç†é€»è¾‘。 + * + * @throws Exception + */ + @Override + protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception { + //获å–请求token + String token = getRequestToken((HttpServletRequest) request); + if (StringUtils.isBlank(token)) { + return null; + } + return new AuthToken(token); + } + + /** + * 父类会在请求进入拦截器åŽè°ƒç”¨è¯¥æ–¹æ³•ï¼Œè¿”回true则继ç»ï¼Œè¿”回false则会调用onAccessDenied()。这里在ä¸é€šè¿‡æ—¶ï¼Œè¿˜è°ƒç”¨äº†isPermissive()方法 + */ + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + if (((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())) { + return true; + } +// boolean allowed = false; +// try { +// allowed = executeLogin(request, response); +// } catch(IllegalStateException e){ //not found any token +// log.error("Not found any token"); +// }catch (Exception e) { +// log.error("Error occurs when login", e); +// } + +// return allowed || super.isPermissive(mappedValue); + return false; + } + + /** + * 如果这个Filter在之å‰isAccessAllowed()方法ä¸è¿”回false,则会进入这个方法。这里直接返回错误的response + */ + @Override + protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { + //获å–请求token,如果tokenä¸å˜åœ¨ï¼Œç›´æŽ¥è¿”回40101 + String token = getRequestToken((HttpServletRequest) request); + if (StringUtils.isBlank(token)) { + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); + httpResponse.setCharacterEncoding("gbk"); + + Result result = new Result(); + result.setResult(Result.RESULT_FLG.FAIL.getValue()); + result.setErrorCode(RespCodeEnum.NO_AUTH_REQUEST.getCode()); + result.setErrorMsg(RespCodeEnum.NO_AUTH_REQUEST.getMsg()); + String json = JSON.toJSONString(result); + httpResponse.getWriter().print(json); + return false; + } + + return executeLogin(request, response); + } + +// /** +// * 如果Shiro Login认è¯æˆåŠŸï¼Œä¼šè¿›å…¥è¯¥æ–¹æ³•ï¼Œç‰åŒäºŽç”¨æˆ·å密ç 登录æˆåŠŸï¼Œè¿™é‡Œè¿˜åˆ¤æ–了是å¦è¦åˆ·æ–°Token +// */ +// @Override +// protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception { +// HttpServletResponse httpResponse = WebUtils.toHttp(response); +// if(token instanceof AuthToken){ +// AuthToken jwtToken = (AuthToken)token; +// String newtoken = jwtToken.getPrincipal(); +// if(StringUtils.isNotBlank(newtoken)){ +// httpResponse.setHeader("x-auth-token", newtoken); +// } +// } +// return true; +// } + + /** + * 如果调用shiroçš„login认è¯å¤±è´¥ï¼Œä¼šå›žè°ƒè¿™ä¸ªæ–¹æ³• + */ + @Override + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setContentType("application/json;charset=utf-8"); + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); + try { + //处ç†ç™»å½•å¤±è´¥çš„异常 + Throwable throwable = e.getCause() == null ? e : e.getCause(); + Result result = new Result(); + result.setErrorCode(String.valueOf(HttpStatus.SC_UNAUTHORIZED)); + result.setResult(Result.RESULT_FLG.FAIL.getValue()); + result.setErrorMsg(throwable.getMessage()); + String json = JSON.toJSONString(result); + httpResponse.getWriter().print(json); + } catch (IOException e1) { + } + return false; + } + + /** + * 获å–请求头ä¸çš„token + */ + private String getRequestToken(HttpServletRequest httpRequest) { + //从headerä¸èŽ·å–token + String token = httpRequest.getHeader("Authorization"); + return token; + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthRealm.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthRealm.java new file mode 100644 index 0000000000000000000000000000000000000000..4f29f00814b6143a7c3fc25f6f61f4318b8c0736 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthRealm.java @@ -0,0 +1,128 @@ +package cn.wisenergy.web.shiro.filter; + +import cn.wisenergy.common.constant.RedisConsts; +import cn.wisenergy.common.enums.RespCodeEnum; +import cn.wisenergy.model.app.AccountInfo; +import cn.wisenergy.model.app.User; +import cn.wisenergy.service.app.UserService; +import cn.wisenergy.web.config.JwtConfig; +import cn.wisenergy.web.shiro.AuthToken; +import cn.wisenergy.web.shiro.JwtUtil; +import io.jsonwebtoken.Claims; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Set; + +/** + * è®¤è¯ + * + * @author lut + */ +@Slf4j +@Component +public class AuthRealm extends AuthorizingRealm { + + @Autowired + private UserService sysUserService; + @Autowired + private UserService authUserService; + @Autowired + private JwtUtil jwtUtil; + @Autowired + private JwtConfig jwtConfig; + @Resource + RedisTemplate<String, Object> redisTemplate; + + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof AuthToken; + } + + /** + * 授æƒ(验è¯æƒé™æ—¶è°ƒç”¨) + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + AccountInfo user = (AccountInfo) principals.getPrimaryPrincipal(); + String userId = user.getId().toString(); + //用户æƒé™åˆ—表 +// Set<String> permsSet = sysUserService.queryAllPerms(userId); + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); +// info.setStringPermissions(permsSet); + return info; + } + + /** + * 认è¯(登录时调用) + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { + // 获å–token + String accessToken = (String) token.getPrincipal(); + User userEntity = null; + Boolean refreshFlag = false; + // 解æžtoken + Claims claims = jwtUtil.getClaimsFromToken(accessToken); + // 从tokenä¸èŽ·å–用户 + userEntity = jwtUtil.getUserFromToken(claims); + // 获å–redis Key + String redisKey = RedisConsts.JWT_ACCESS_TOKEN + accessToken; + // 从redisä¸èŽ·å–token + String redisToken = (String) redisTemplate.opsForValue().get(redisKey); + /* try { + if (redisToken != null) { + //这里刷新token 是å¦è¿‡æœŸï¼Œå¦‚果过期需è¦æ›´æ–°token + if (jwtUtil.isTokenExpired(claims)) { + // é‡æ–°ç¾å‘token + String refreshToken = jwtUtil.generateToken(userEntity); + // 将新tokenå˜å…¥Redisä¸ + redisTemplate.opsForValue().set(RedisConsts.JWT_ACCESS_TOKEN + refreshToken, refreshToken, jwtConfig.getExpire() + 60 * 60); + HttpServletResponse resp = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); + resp.setHeader("refresh-token", accessToken); + refreshFlag = true; + } + } else { + throw new IncorrectCredentialsException(RespCodeEnum.NO_AUTH_REQUEST.getMsg()); + } + } catch (ExpiredJwtException e) { + // token解æžå¼‚常 + log.error("token解æžå¼‚常,ex={}", e.getMessage(), e); + throw new IncorrectCredentialsException(RespCodeEnum.TOKEN_IS_NOT_TIMEOUT.getMsg()); + }*/ + //æŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯ + User user = authUserService.getByPhone(userEntity.getPhone()); + // 判æ–请求token与redisä¸æ˜¯å¦ç›¸åŒï¼Œå¦‚æžœtoken被刷新,则ä¸åˆ¤æ– + if (!refreshFlag && !StringUtils.equals(accessToken, redisToken)) { + throw new IncorrectCredentialsException(RespCodeEnum.NO_AUTH_REQUEST.getMsg()); + } + // è´¦å·ä¸å˜åœ¨ + if (user == null) { + throw new UnknownAccountException("è´¦å·ä¸å˜åœ¨"); + } + // 密ç 错误 +// if (!password.equals(user.getPassword())) { +// throw new IncorrectCredentialsException("è´¦å·æˆ–密ç ä¸æ£ç¡®"); +// } + //è´¦å·é”定 +// if (user.getStatus() == 2) { +// throw new LockedAccountException("è´¦å·å·²è¢«é”定,请è”系管ç†å‘˜"); +// } + if (refreshFlag) { + // é‡ç½®Redisä¸token过期时间,如果token被刷新,则ä¸è¿›è¡Œé‡ç½® + redisTemplate.opsForValue().set(redisKey, accessToken, jwtConfig.getExpire() + 60 * 60); + } + SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, accessToken, getName()); + return info; + } + +} diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthorizationFilter.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthorizationFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..4c7c4ec84801e2f70358f52f904fc742382ae1c7 --- /dev/null +++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/shiro/filter/AuthorizationFilter.java @@ -0,0 +1,46 @@ +package cn.wisenergy.web.shiro.filter; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * @author wyy + * @date 2019-09-14 17:57 + */ +public class AuthorizationFilter extends PermissionsAuthorizationFilter { + /** + * shiro认è¯perms资æºå¤±è´¥åŽå›žè°ƒæ–¹æ³• + * @param servletRequest + * @param servletResponse + * @return + * @throws IOException + */ + @Override + protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; + String requestedWith = httpServletRequest.getHeader("X-Requested-With"); + if (StringUtils.isNotEmpty(requestedWith) && StringUtils.equals(requestedWith, "XMLHttpRequest")) {//如果是ajaxè¿”å›žæŒ‡å®šæ ¼å¼æ•°æ® + httpServletResponse.setContentType("application/json"); + httpServletResponse.setCharacterEncoding("UTF-8"); + PrintWriter out = httpServletResponse.getWriter(); + JSONObject json = new JSONObject(); + json.put("result", "success"); + json.put("msg", "登录æˆåŠŸ"); + out.write(json.toJSONString()); + out.flush(); + out.close(); + } else {//如果是普通请求进行é‡å®šå‘ + httpServletResponse.sendRedirect("/403"); + } + return false; + } +} diff --git a/wisenergy-web-admin/src/main/resources/application-dev.yml b/wisenergy-web-admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..1c86162db82bbae6d1ef057add79cc07f7bcf56a --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/application-dev.yml @@ -0,0 +1,70 @@ +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://192.168.110.165:3306/volunteer?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8 + username: root + password: adm4HYservice$ + initial-size: 10 + max-active: 100 + min-idle: 10 + max-wait: 60000 + # 打开PSCache,并且指定æ¯ä¸ªè¿žæŽ¥ä¸ŠPSCacheçš„å¤§å° + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + #Oracle需è¦æ‰“开注释 + #validation-query: SELECT 1 FROM DUAL + test-while-idle: true + test-on-borrow: false + test-on-return: false + stat-view-servlet: + enabled: true + url-pattern: /druid/* + #login-username: admin + #login-password: admin + # é…置监控统计拦截的filters,去掉åŽç›‘控界é¢sqlæ— æ³•ç»Ÿè®¡ï¼Œ'wall'用于防ç«å¢™ + filter: + stat: + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: false + wall: + config: + multi-statement-allow: true + #æ–‡ä»¶ä¸Šä¼ é…ç½® + servlet: + multipart: + # å¯ç”¨ + enabled: true + # ä¸Šä¼ æ–‡ä»¶å•ä¸ªé™åˆ¶ + max-file-size: 10MB + # 总é™åˆ¶ + max-request-size: 20MB + + redis: + database: 0 + host: 192.168.110.165 + port: 6379 + password: adm4HYservice$ # 密ç (默认为空) + timeout: 6000ms # 连接超时时长(毫秒) + jedis: + pool: + max-active: 1000 # è¿žæŽ¥æ± æœ€å¤§è¿žæŽ¥æ•°ï¼ˆä½¿ç”¨è´Ÿå€¼è¡¨ç¤ºæ²¡æœ‰é™åˆ¶ï¼‰ + max-wait: -1ms # è¿žæŽ¥æ± æœ€å¤§é˜»å¡žç‰å¾…时间(使用负值表示没有é™åˆ¶ï¼‰ + max-idle: 10 # è¿žæŽ¥æ± ä¸çš„最大空闲连接 + min-idle: 5 # è¿žæŽ¥æ± ä¸çš„最å°ç©ºé—²è¿ž +###ä¸Šä¼ æ–‡ä»¶é…ç½® :该é…ç½®å¯æ ¹æ®éƒ¨ç½²çš„系统或开å‘人员自定义路径,æ¯æ¬¡éƒ¨ç½²ä¹‹å‰éœ€è¦ä¿®æ”¹location +uploadFile: + resourceHandler: /upload_flowChart/** #请求 url ä¸çš„资æºæ˜ 射也是ä¿å˜åˆ°æ•°æ®åº“ä¸çš„父级路径 + #location: D:/java/test/upload_flowChart/ #è‡ªå®šä¹‰ä¸Šä¼ æ–‡ä»¶æœåŠ¡å™¨ç¡¬ç›˜ä¿å˜è·¯å¾„ ,linuxæœåŠ¡å™¨ä¿å˜è·¯å¾„ /home/changfa/app/wxbjgkpt/upload_flowChart + location: /opt/images/upload_flowChart/ #è‡ªå®šä¹‰ä¸Šä¼ æ–‡ä»¶æœåŠ¡å™¨ç¡¬ç›˜ä¿å˜è·¯å¾„ ,linuxæœåŠ¡å™¨ä¿å˜è·¯å¾„ /home/changfa/app/wxbjgkpt/upload_flowChart/ +jwt: + # åŠ å¯†ç§˜é’¥ + secret: f4e2e52034348f86b67cde581c0f9eb5 + # token有效时长,å•ä½ç§’ + expire: 14400 +logging: + config: classpath:logback-spring.xml \ No newline at end of file diff --git a/wisenergy-web-admin/src/main/resources/application-prod.yml b/wisenergy-web-admin/src/main/resources/application-prod.yml new file mode 100644 index 0000000000000000000000000000000000000000..a662340dbda0abc3da9bd9bac229eb6ad5c713b0 --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/application-prod.yml @@ -0,0 +1,58 @@ +logging: + level: + root: info + com.sinosoft: info +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/dydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 + username: root + password: root + initial-size: 10 + max-active: 100 + min-idle: 10 + # é…置获å–连接ç‰å¾…超时的时间 + max-wait: 60000 + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + time-between-eviction-runs-millis: 60000 + validationQuery: select 'x' + #Oracle需è¦æ‰“开注释 + #validation-query: SELECT 1 FROM DUAL + test-while-idle: true + test-on-borrow: false + test-on-return: false + stat-view-servlet: + enabled: true + url-pattern: /druid/* + #login-username: admin + #login-password: admin + filter: + stat: + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: false + wall: + config: + multi-statement-allow: true + # redisé…ç½® + redis: + open: false # 是å¦å¼€å¯redisç¼“å˜ trueå¼€å¯ falseå…³é— + database: 0 + host: localhost + port: 6379 + password: # 密ç (默认为空) + timeout: 6000ms # 连接超时时长(毫秒) + jedis: + pool: + max-active: 1000 # è¿žæŽ¥æ± æœ€å¤§è¿žæŽ¥æ•°ï¼ˆä½¿ç”¨è´Ÿå€¼è¡¨ç¤ºæ²¡æœ‰é™åˆ¶ï¼‰ + max-wait: -1ms # è¿žæŽ¥æ± æœ€å¤§é˜»å¡žç‰å¾…时间(使用负值表示没有é™åˆ¶ï¼‰ + max-idle: 10 # è¿žæŽ¥æ± ä¸çš„最大空闲连接 + min-idle: 5 # è¿žæŽ¥æ± ä¸çš„最å°ç©ºé—²è¿žæŽ¥ +jwt: + # åŠ å¯†ç§˜é’¥ + secret: f4e2e52034348f86b67cde581c0f9eb5 + # token有效时长,å•ä½ç§’ + expire: 14400 \ No newline at end of file diff --git a/wisenergy-web-admin/src/main/resources/application-test.yml b/wisenergy-web-admin/src/main/resources/application-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..e4fb385193b2711b7423e309105bcd67f3f9d41d --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/application-test.yml @@ -0,0 +1,52 @@ +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/dydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 + username: root + password: root + initial-size: 10 + max-active: 100 + min-idle: 10 + max-wait: 60000 + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + #Oracle需è¦æ‰“开注释 + #validation-query: SELECT 1 FROM DUAL + test-while-idle: true + test-on-borrow: false + test-on-return: false + stat-view-servlet: + enabled: true + url-pattern: /druid/* + #login-username: admin + #login-password: admin + filter: + stat: + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: false + wall: + config: + multi-statement-allow: true + redis: + open: false # 是å¦å¼€å¯redisç¼“å˜ trueå¼€å¯ falseå…³é— + database: 0 + host: localhost + port: 6379 + password: # 密ç (默认为空) + timeout: 6000ms # 连接超时时长(毫秒) + jedis: + pool: + max-active: 1000 # è¿žæŽ¥æ± æœ€å¤§è¿žæŽ¥æ•°ï¼ˆä½¿ç”¨è´Ÿå€¼è¡¨ç¤ºæ²¡æœ‰é™åˆ¶ï¼‰ + max-wait: -1ms # è¿žæŽ¥æ± æœ€å¤§é˜»å¡žç‰å¾…时间(使用负值表示没有é™åˆ¶ï¼‰ + max-idle: 10 # è¿žæŽ¥æ± ä¸çš„最大空闲连接 + min-idle: 5 # è¿žæŽ¥æ± ä¸çš„最å°ç©ºé—²è¿žæŽ¥ +#jwt: + ## # åŠ å¯†ç§˜é’¥ + ## secret: f4e2e52034348f86b67cde581c0f9eb5 + ## # token有效时长,å•ä½ç§’ + ## expire: 14400 diff --git a/wisenergy-web-admin/src/main/resources/application.yml b/wisenergy-web-admin/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..dbf602d47e2172ab6be8292d6e7d34d9eb7024ef --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/application.yml @@ -0,0 +1,64 @@ +server: + tomcat: + uri-encoding: UTF-8 + max-threads: 1000 + min-spare-threads: 30 + port: 8997 + connection-timeout: 5000ms + +spring: + main: + allow-bean-definition-overriding: true + # 环境 dev|test|prod + profiles: + active: dev + # jacksonæ—¶é—´æ ¼å¼åŒ– + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + enabled: true + mvc: + throw-exception-if-no-handler-found: true +# resources: +# add-mappings: false + +#mybatis +mybatis-plus: + mapper-locations: classpath*:/mapper/**/*.xml + #实体扫æ,多个package用逗å·æˆ–者分å·åˆ†éš” + #typeAliasesPackage: cn.wisenergy.service.* + global-config: + #æ•°æ®åº“相关é…ç½® + db-config: + #主键类型 AUTO:"æ•°æ®åº“ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (æ•°å—类型唯一ID)", UUID:"全局唯一ID UUID"; + id-type: AUTO + #é©¼å³°ä¸‹åˆ’çº¿è½¬æ¢ + column-underline: true + logic-delete-value: -1 + logic-not-delete-value: 0 + banner: false + #原生é…ç½® + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + + +camera: + ysy: #è¤çŸ³äº‘ + api: + appKey: 53ff83088a8b445ea1b30c0ba85f7653 + appSecret: 0274e379003912b7ec1f3ef18a169624 + + isc: #海康å¨è§† + api: + host: 172.18.1.51:4443 + #host: 111.203.232.172:4443 + appKey: 23756916 + appSecret: TDrCbqQXe9XSt7SimYDO + path: /artemis diff --git a/wisenergy-web-admin/src/main/resources/db/ljfl.sql b/wisenergy-web-admin/src/main/resources/db/ljfl.sql new file mode 100644 index 0000000000000000000000000000000000000000..e1b681ab404235a0ab5dbd24c4c9dc453c096256 --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/db/ljfl.sql @@ -0,0 +1,80 @@ +/* + Navicat MySQL Data Transfer + + Source Server : test + Source Server Type : MySQL + Source Server Version : 50727 + Source Host : localhost:3306 + Source Schema : ljfl + + Target Server Type : MySQL + Target Server Version : 50727 + File Encoding : 65001 + + Date: 03/11/2020 10:07:47 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for camera +-- ---------------------------- +DROP TABLE IF EXISTS `camera`; +CREATE TABLE `camera` ( + `id` int(11) NOT NULL COMMENT '主键', + `camera_number` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'æ‘„åƒæœºç¼–å·', + `name` varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'å称', + `site` varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '投放点', + `inspector_name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'ç£å¯Ÿå‘˜å§“å', + `inspector_phone` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'ç£å¯Ÿå‘˜æ‰‹æœºå·', + `longitude` double NULL DEFAULT NULL COMMENT 'ç»åº¦', + `latitude` double NULL DEFAULT NULL COMMENT '纬度', + `status` int(2) NULL DEFAULT NULL COMMENT '状æ€ï¼š0:在线 1:离线', + `is_delete` int(2) NULL DEFAULT NULL COMMENT '是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤', + `remark` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '备注', + `rubbish_id` int(11) NULL DEFAULT NULL COMMENT '所属垃圾点id', + `create_time` datetime(0) NULL DEFAULT NULL, + `update_time` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for resident +-- ---------------------------- +DROP TABLE IF EXISTS `resident`; +CREATE TABLE `resident` ( + `id` int(11) NOT NULL COMMENT '主键id', + `name` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '姓å', + `phone` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '手机å·ç ', + `sex` int(2) NULL DEFAULT NULL COMMENT '性别 1:ç”· 2:女', + `street` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '所属街é“', + `community` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '所属社区', + `remark` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '备注', + `is_delete` int(2) NULL DEFAULT NULL COMMENT '是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤', + `create_time` datetime(0) NULL DEFAULT NULL, + `update_time` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for rubbish +-- ---------------------------- +DROP TABLE IF EXISTS `rubbish`; +CREATE TABLE `rubbish` ( + `id` int(11) NOT NULL COMMENT '主键id', + `rubbish_number` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '垃圾站编å·', + `user_name` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '负责人姓å', + `street` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '所属街é“', + `community` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '所属社区', + `live_time` datetime(0) NULL DEFAULT NULL COMMENT 'ç›´æ’时间', + `click_time` datetime(0) NULL DEFAULT NULL COMMENT '点æ’时间', + `remark` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '备注', + `status` int(2) NULL DEFAULT NULL COMMENT 'çŠ¶æ€ ï¼š0:å†ç”¨ 1:弃用', + `is_delete` int(2) NULL DEFAULT NULL COMMENT '是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git "a/wisenergy-web-admin/src/main/resources/db/\346\231\272\350\203\275\345\236\203\345\234\276\345\210\206\347\261\273\350\241\250\347\273\223\346\236\204\346\250\241\345\236\213.ndm2" "b/wisenergy-web-admin/src/main/resources/db/\346\231\272\350\203\275\345\236\203\345\234\276\345\210\206\347\261\273\350\241\250\347\273\223\346\236\204\346\250\241\345\236\213.ndm2" new file mode 100644 index 0000000000000000000000000000000000000000..24645022b85e3283d9b168c99d909481a5f731a8 --- /dev/null +++ "b/wisenergy-web-admin/src/main/resources/db/\346\231\272\350\203\275\345\236\203\345\234\276\345\210\206\347\261\273\350\241\250\347\273\223\346\236\204\346\250\241\345\236\213.ndm2" @@ -0,0 +1,1228 @@ +{ + "paper": { + "name": "A4", + "leftMargin": 0.5, + "rightMargin": 0.5, + "topMargin": 0.5, + "bottomMargin": 0.5, + "isPortriat": true + }, + "modelVersion": 2.01, + "defaultSchema": "Default", + "server": { + "objectType": "Server_MYSQL", + "name": "Default", + "serverVersion": 50727, + "edition": "Default", + "lowerCaseTableNames": 0, + "schemas": [ + { + "objectType": "Schema_MYSQL", + "name": "Default", + "tables": [], + "views": [] + }, + { + "objectType": "Schema_MYSQL", + "name": "ljfl", + "tables": [ + { + "objectType": "Table_MYSQL", + "name": "camera", + "comment": "", + "engine": "InnoDB", + "characterSet": "latin1", + "collation": "latin1_swedish_ci", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "Dynamic", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "camera", + "encryption": false, + "createOptions": "", + "createTime": "2020-11-03 10:13:38", + "checkTime": "", + "dataFree": 0, + "dataLength": 16384, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "CREATE TABLE `camera` (\n `id` int(11) NOT NULL COMMENT '主键',\n `camera_number` varchar(20) DEFAULT NULL COMMENT 'æ‘„åƒæœºç¼–å·',\n `name` varchar(30) DEFAULT NULL COMMENT 'å称',\n `inspector_name` varchar(255) DEFAULT NULL COMMENT 'ç£å¯Ÿå‘˜å§“å',\n `inspector_phone` varchar(255) DEFAULT NULL COMMENT 'ç£å¯Ÿå‘˜æ‰‹æœºå·',\n `longitude` double DEFAULT NULL COMMENT 'ç»åº¦',\n `latitude` double DEFAULT NULL COMMENT '纬度',\n `status` int(2) DEFAULT NULL COMMENT '状æ€ï¼š0:在线 1:离线',\n `is_delete` int(2) DEFAULT NULL COMMENT '是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤',\n `remark` varchar(255) DEFAULT NULL COMMENT '备注',\n `rubbish_id` int(11) DEFAULT NULL COMMENT '所属垃圾点id',\n `create_time` datetime DEFAULT NULL COMMENT '创建时间',\n `update_time` datetime DEFAULT NULL COMMENT '更新时间',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "id", + "type": "int", + "length": 11, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "主键", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "id" + }, + { + "objectType": "TableField_MYSQL", + "name": "camera_number", + "type": "varchar", + "length": 20, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "æ‘„åƒæœºç¼–å·", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "camera_number" + }, + { + "objectType": "TableField_MYSQL", + "name": "name", + "type": "varchar", + "length": 30, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "å称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "name" + }, + { + "objectType": "TableField_MYSQL", + "name": "inspector_name", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "ç£å¯Ÿå‘˜å§“å", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "inspector_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "inspector_phone", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "ç£å¯Ÿå‘˜æ‰‹æœºå·", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "inspector_phone" + }, + { + "objectType": "TableField_MYSQL", + "name": "longitude", + "type": "double", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "ç»åº¦", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "longitude" + }, + { + "objectType": "TableField_MYSQL", + "name": "latitude", + "type": "double", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "纬度", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "latitude" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": 2, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "状æ€ï¼š0:在线 1:离线", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "is_delete", + "type": "int", + "length": 2, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "is_delete" + }, + { + "objectType": "TableField_MYSQL", + "name": "remark", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "备注", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "remark" + }, + { + "objectType": "TableField_MYSQL", + "name": "rubbish_id", + "type": "int", + "length": 11, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属垃圾点id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "rubbish_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "create_time", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "create_time" + }, + { + "objectType": "TableField_MYSQL", + "name": "update_time", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "update_time" + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "id", + "keyLength": 0, + "order": "", + "oldName": "id" + } + ], + "oldName": "", + "indexMethod": "BTREE", + "comment": "" + }, + "foreignKeys": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "resident", + "comment": "", + "engine": "InnoDB", + "characterSet": "latin1", + "collation": "latin1_swedish_ci", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "Dynamic", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "resident", + "encryption": false, + "createOptions": "", + "createTime": "2020-11-03 09:58:48", + "checkTime": "", + "dataFree": 0, + "dataLength": 16384, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "CREATE TABLE `resident` (\n `id` int(11) NOT NULL COMMENT '主键id',\n `name` varchar(20) DEFAULT NULL COMMENT '姓å',\n `phone` varchar(20) DEFAULT NULL COMMENT '手机å·ç ',\n `sex` int(2) DEFAULT NULL COMMENT '性别 1:ç”· 2:女',\n `street` varchar(255) DEFAULT NULL COMMENT '所属街é“',\n `community` varchar(255) DEFAULT NULL COMMENT '所属社区',\n `remark` varchar(255) DEFAULT NULL COMMENT '备注',\n `is_delete` int(2) DEFAULT NULL COMMENT '是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤',\n `create_time` datetime DEFAULT NULL,\n `update_time` datetime DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "id", + "type": "int", + "length": 11, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "主键id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "id" + }, + { + "objectType": "TableField_MYSQL", + "name": "name", + "type": "varchar", + "length": 20, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "姓å", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "name" + }, + { + "objectType": "TableField_MYSQL", + "name": "phone", + "type": "varchar", + "length": 20, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "手机å·ç ", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "phone" + }, + { + "objectType": "TableField_MYSQL", + "name": "sex", + "type": "int", + "length": 2, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "性别 1:ç”· 2:女", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "sex" + }, + { + "objectType": "TableField_MYSQL", + "name": "street", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属街é“", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "street" + }, + { + "objectType": "TableField_MYSQL", + "name": "community", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属社区", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "community" + }, + { + "objectType": "TableField_MYSQL", + "name": "remark", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "备注", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "remark" + }, + { + "objectType": "TableField_MYSQL", + "name": "is_delete", + "type": "int", + "length": 2, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "is_delete" + }, + { + "objectType": "TableField_MYSQL", + "name": "create_time", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "create_time" + }, + { + "objectType": "TableField_MYSQL", + "name": "update_time", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "update_time" + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "id", + "keyLength": 0, + "order": "", + "oldName": "id" + } + ], + "oldName": "", + "indexMethod": "BTREE", + "comment": "" + }, + "foreignKeys": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "rubbish", + "comment": "", + "engine": "InnoDB", + "characterSet": "latin1", + "collation": "latin1_swedish_ci", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "Dynamic", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "rubbish", + "encryption": false, + "createOptions": "", + "createTime": "2020-11-03 10:04:00", + "checkTime": "", + "dataFree": 0, + "dataLength": 16384, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "CREATE TABLE `rubbish` (\n `id` int(11) NOT NULL COMMENT '主键id',\n `rubbish_number` varchar(20) DEFAULT NULL COMMENT '垃圾站编å·',\n `user_name` varchar(20) DEFAULT NULL COMMENT '负责人姓å',\n `street` varchar(255) DEFAULT NULL COMMENT '所属街é“',\n `community` varchar(255) DEFAULT NULL COMMENT '所属社区',\n `live_time` int(11) DEFAULT NULL COMMENT 'ç›´æ’时间',\n `click_time` int(11) DEFAULT NULL COMMENT '点æ’时间',\n `remark` varchar(255) DEFAULT NULL COMMENT '备注',\n `status` int(2) DEFAULT NULL COMMENT 'çŠ¶æ€ ï¼š0:å†ç”¨ 1:弃用',\n `is_delete` int(2) DEFAULT NULL COMMENT '是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤',\n `create_time` datetime DEFAULT NULL COMMENT '创建时间',\n `update_time` datetime DEFAULT NULL COMMENT '更新时间',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "id", + "type": "int", + "length": 11, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "主键id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "id" + }, + { + "objectType": "TableField_MYSQL", + "name": "rubbish_number", + "type": "varchar", + "length": 20, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "垃圾站编å·", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "rubbish_number" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_name", + "type": "varchar", + "length": 20, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "负责人姓å", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "street", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属街é“", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "street" + }, + { + "objectType": "TableField_MYSQL", + "name": "community", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属社区", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "community" + }, + { + "objectType": "TableField_MYSQL", + "name": "live_time", + "type": "int", + "length": 11, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "ç›´æ’时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "live_time" + }, + { + "objectType": "TableField_MYSQL", + "name": "click_time", + "type": "int", + "length": 11, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "点æ’时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "click_time" + }, + { + "objectType": "TableField_MYSQL", + "name": "remark", + "type": "varchar", + "length": 255, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "latin1", + "collation": "latin1_swedish_ci", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "备注", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "remark" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": 2, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "çŠ¶æ€ ï¼š0:å†ç”¨ 1:弃用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "is_delete", + "type": "int", + "length": 2, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是å¦åˆ 除 0:æ£å¸¸ 1ï¼šåˆ é™¤", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "is_delete" + }, + { + "objectType": "TableField_MYSQL", + "name": "create_time", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "create_time" + }, + { + "objectType": "TableField_MYSQL", + "name": "update_time", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "update_time" + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "id", + "keyLength": 0, + "order": "", + "oldName": "id" + } + ], + "oldName": "", + "indexMethod": "BTREE", + "comment": "" + }, + "foreignKeys": [], + "triggers": [], + "tablePartitions": [] + } + ], + "views": [] + } + ] + }, + "diagrams": [ + { + "name": "Diagram 1", + "paperWidth": 1, + "paperHeight": 1, + "tableFont": "Arial Unicode MS", + "tableFontSize": 14, + "isBalckWhite": false, + "showDBSchemaName": false, + "showViewRelations": true, + "notation": "default", + "showFieldComment": false, + "showTableComment": false, + "shapes": [ + { + "type": "table", + "schemaName": "ljfl", + "tableName": "camera", + "x": 240, + "y": 0, + "width": 214, + "height": 310, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "ljfl", + "tableName": "resident", + "x": 20, + "y": 300, + "width": 187, + "height": 250, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "ljfl", + "tableName": "rubbish", + "x": 10, + "y": 0, + "width": 204, + "height": 290, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + } + ], + "layers": [], + "relations": [], + "viewRelations": [] + } + ] +} \ No newline at end of file diff --git a/wisenergy-web-admin/src/main/resources/loadFFmpeg.properties b/wisenergy-web-admin/src/main/resources/loadFFmpeg.properties new file mode 100644 index 0000000000000000000000000000000000000000..e9ea598b1a8c1f8c9a2f37adca1052bd86293ef0 --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/loadFFmpeg.properties @@ -0,0 +1,20 @@ +#ffmpeg\u6267\u884C\u8DEF\u5F84\uFF0C\u4E00\u822C\u4E3Affmpeg\u7684\u5B89\u88C5\u76EE\u5F55\uFF0C\u8BE5\u8DEF\u5F84\u53EA\u80FD\u662F\u76EE\u5F55\uFF0C\u4E0D\u80FD\u4E3A\u5177\u4F53\u6587\u4EF6\u8DEF\u5F84\uFF0C\u5426\u5219\u4F1A\u62A5\u9519 +#windows \u4E0B\u914D\u7F6E +#path=D:/ffmpeg/bin/ +#\u6D4B\u8BD5\u73AF\u5883 +path=/home/hy/ffmpeg-git-20201128-amd64-static +#path=F:/ffmpeg/ffmpeg-N-100449-g28aedc7f54-win64-gpl-shared/bin/ +#\u751F\u4EA7\u73AF\u5883linux \u4E0B\u914D\u7F6E +#path=/usr/local/ffmpeg/bin/ +#\u5B58\u653E\u4EFB\u52A1\u7684\u9ED8\u8BA4Map\u7684\u521D\u59CB\u5316\u5927\u5C0F +size=10 +#\u4E8B\u4EF6\u56DE\u8C03\u901A\u77E5\u63A5\u53E3\u5730\u5740 +callback= +#\u7F51\u7EDC\u8D85\u65F6\u8BBE\u7F6E\uFF08\u6BEB\u79D2\uFF09 +timeout=300 + +#\u5F00\u542F\u4FDD\u6D3B\u7EBF\u7A0B +keepalive=true + +#\u662F\u5426\u8F93\u51FAdebug\u6D88\u606F +debug=true diff --git a/wisenergy-web-admin/src/main/resources/logback-spring.xml b/wisenergy-web-admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e3d346f8c8c565dd07d4e977635ddc16b769f8e --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/logback-spring.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration scan="true" scanPeriod="60 seconds" debug="false" > + <!-- 定义日志路径ã€çº§åˆ« --> + <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/> + <property name="LOG_DIR" value="/logs/${spring.application.name}" /> + <property name="LOG_LEVEL" value="info" /> + <!-- å½©è‰²æ—¥å¿—æ ¼å¼ --> + <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> + <!-- 彩色日志ä¾èµ–的渲染类 --> + <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> + <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> + <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> + <!-- 打å°æ—¥å¿—åˆ°æŽ§åˆ¶å° --> + <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> + <Target>System.out</Target> + <encoder> + <pattern>${CONSOLE_LOG_PATTERN}</pattern> + </encoder> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>DEBUG</level> + </filter> + </appender> + + <!-- 打å°error日志 --> + <appender name="E" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <Append>true</Append> + <encoder> + <pattern>%date [%level] %logger{80} [%file : %line] - %msg%n</pattern> + </encoder> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>ERROR</level> + </filter> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${LOG_DIR}/${project.artifactId}/error.%d{yyyy-MM-dd}.log</fileNamePattern> + </rollingPolicy> + </appender> + + <!-- 打å°info日志 --> + <appender name="I" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <Append>true</Append> + <encoder> + <pattern>%date [%level] %logger{80} [%file : %line] - %msg%n</pattern> + </encoder> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>INFO</level> + </filter> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${LOG_DIR}/${project.artifactId}/info.%d{yyyy-MM-dd}.log</fileNamePattern> + </rollingPolicy> + </appender> + + <!-- 打å°Druid监控日志 --> + <appender name="druidLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <Append>true</Append> + <encoder> + <pattern>%date [%level] %logger{80} [%file : %line] - %msg%n</pattern> + </encoder> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>Debug</level> + </filter> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${LOG_DIR}/${project.artifactId}/druid.%d{yyyy-MM-dd}.log</fileNamePattern> + </rollingPolicy> + </appender> + + <!-- druid转å˜ç›‘控日志 --> + <logger name="druid.statLog" additivity="false"> + <appender-ref ref="druidLog"/> + </logger> + + <!-- 项目日志 --> + <logger name="cn.wisenergy"/> + + <!-- æ—¥å¿—æ ¹ --> + <root level="${LOG_LEVEL}"> + <appender-ref ref="stdout"/> + <appender-ref ref="E"/> + <appender-ref ref="I"/> + </root> +</configuration> \ No newline at end of file diff --git a/wisenergy-web-admin/src/main/resources/static/readme.md b/wisenergy-web-admin/src/main/resources/static/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..28ef6a03d1ca41d5305ba36af0211a8993e8489e --- /dev/null +++ b/wisenergy-web-admin/src/main/resources/static/readme.md @@ -0,0 +1 @@ +# å¼€å‘æ—¶è¯·åˆ é™¤æ¤æ–‡ä»¶ \ No newline at end of file diff --git a/wisenergy-web-admin/wisenergy-web-admin.iml b/wisenergy-web-admin/wisenergy-web-admin.iml new file mode 100644 index 0000000000000000000000000000000000000000..edb2e99f0489da0f59e6357ad854b91a1666a6b3 --- /dev/null +++ b/wisenergy-web-admin/wisenergy-web-admin.iml @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="wisenergy-service" /> + <orderEntry type="module" module-name="wisenergy-mapper" /> + <orderEntry type="module" module-name="wisenergy-model" /> + <orderEntry type="module" module-name="wisenergy-common" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.19" level="project" /> + <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" /> + <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.3.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.glassfish:javax.el:3.0.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" /> + <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" /> + <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> + <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" /> + <orderEntry type="library" name="Maven: org.mockito:mockito-core:2.23.4" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.12" level="project" /> + <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> + <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" /> + <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-test:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" /> + <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" /> + <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" /> + <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.16" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.7.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.6.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.36.Final" level="project" /> + <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.9.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" /> + <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" /> + <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.2" level="project" /> + <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.6.7" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.23" level="project" /> + <orderEntry type="library" name="Maven: com.hikvision.ga:artemis-http-client:1.1.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains:annotations:20.1.0" level="project" /> + <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.3" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" /> + <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" /> + <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" /> + <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.5" level="project" /> + <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" /> + <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" /> + <orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" /> + <orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" /> + <orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:4.11.33.ALL" level="project" /> + <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.62" level="project" /> + <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.6.0" level="project" /> + <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.11.0" level="project" /> + <orderEntry type="library" name="Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpmime:4.5.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.5.13" level="project" /> + <orderEntry type="library" name="Maven: com.itextpdf:itext-asian:5.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" /> + <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" /> + <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> + <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.8" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> + <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" /> + <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" /> + <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" /> + <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" /> + <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" /> + <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" /> + <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> + <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" /> + </component> +</module> \ No newline at end of file