Commit 75c4b84b by 涂亚平

start。。。

0 parents
Showing with 13105 additions and 0 deletions
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="subsidy" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="8">
<module name="subsidy" target="1.8" />
</bytecodeTargetLevel>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="subsidy" options="-parameters" />
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliDeprecation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliEqualsAvoidNull" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliWrapperTypeEquality" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="INNER_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="METHOD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
</value>
</option>
<option name="FIELD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="IGNORE_DEPRECATED" value="false" />
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
<option name="myAdditionalJavadocTags" value="date" />
</inspection_tool>
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: ch.qos.logback:logback-classic:1.2.3">
<CLASSES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: ch.qos.logback:logback-core:1.2.3">
<CLASSES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: cn.hutool:hutool-all:5.5.2">
<CLASSES>
<root url="jar://D:/install/jars/cn/hutool/hutool-all/5.5.2/hutool-all-5.5.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/cn/hutool/hutool-all/5.5.2/hutool-all-5.5.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/cn/hutool/hutool-all/5.5.2/hutool-all-5.5.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:druid:1.1.22">
<CLASSES>
<root url="jar://D:/install/jars/com/alibaba/druid/1.1.22/druid-1.1.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/alibaba/druid/1.1.22/druid-1.1.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/alibaba/druid/1.1.22/druid-1.1.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22">
<CLASSES>
<root url="jar://D:/install/jars/com/alibaba/druid-spring-boot-starter/1.1.22/druid-spring-boot-starter-1.1.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/alibaba/druid-spring-boot-starter/1.1.22/druid-spring-boot-starter-1.1.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/alibaba/druid-spring-boot-starter/1.1.22/druid-spring-boot-starter-1.1.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:fastjson:1.2.58">
<CLASSES>
<root url="jar://D:/install/jars/com/alibaba/fastjson/1.2.58/fastjson-1.2.58.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/alibaba/fastjson/1.2.58/fastjson-1.2.58-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/alibaba/fastjson/1.2.58/fastjson-1.2.58-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.6">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-core/4.4.6/aliyun-java-sdk-core-4.4.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-core/4.4.6/aliyun-java-sdk-core-4.4.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-core/4.4.6/aliyun-java-sdk-core-4.4.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.1.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-dysmsapi/1.1.0/aliyun-java-sdk-dysmsapi-1.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-dysmsapi/1.1.0/aliyun-java-sdk-dysmsapi-1.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-dysmsapi/1.1.0/aliyun-java-sdk-dysmsapi-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-kms/2.11.0/aliyun-java-sdk-kms-2.11.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-kms/2.11.0/aliyun-java-sdk-kms-2.11.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-kms/2.11.0/aliyun-java-sdk-kms-2.11.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-ram/3.1.0/aliyun-java-sdk-ram-3.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-ram/3.1.0/aliyun-java-sdk-ram-3.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-ram/3.1.0/aliyun-java-sdk-ram-3.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.15.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/oss/aliyun-sdk-oss/3.15.0/aliyun-sdk-oss-3.15.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/oss/aliyun-sdk-oss/3.15.0/aliyun-sdk-oss-3.15.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/oss/aliyun-sdk-oss/3.15.0/aliyun-sdk-oss-3.15.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.auth0:java-jwt:3.10.3">
<CLASSES>
<root url="jar://D:/install/jars/com/auth0/java-jwt/3.10.3/java-jwt-3.10.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/auth0/java-jwt/3.10.3/java-jwt-3.10.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/auth0/java-jwt/3.10.3/java-jwt-3.10.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus:3.3.0">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus/3.3.0/mybatis-plus-3.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus/3.3.0/mybatis-plus-3.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus/3.3.0/mybatis-plus-3.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-annotation:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-annotation/3.3.2/mybatis-plus-annotation-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-annotation/3.3.2/mybatis-plus-annotation-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-annotation/3.3.2/mybatis-plus-annotation-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-boot-starter:3.3.0">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-boot-starter/3.3.0/mybatis-plus-boot-starter-3.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-boot-starter/3.3.0/mybatis-plus-boot-starter-3.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-boot-starter/3.3.0/mybatis-plus-boot-starter-3.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-core:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-core/3.3.2/mybatis-plus-core-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-core/3.3.2/mybatis-plus-core-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-core/3.3.2/mybatis-plus-core-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-extension:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-extension/3.3.2/mybatis-plus-extension-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-extension/3.3.2/mybatis-plus-extension-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-extension/3.3.2/mybatis-plus-extension-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-generator:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-generator/3.3.2/mybatis-plus-generator-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-generator/3.3.2/mybatis-plus-generator-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-generator/3.3.2/mybatis-plus-generator-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.belerweb:pinyin4j:2.5.1">
<CLASSES>
<root url="jar://D:/install/jars/com/belerweb/pinyin4j/2.5.1/pinyin4j-2.5.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/belerweb/pinyin4j/2.5.1/pinyin4j-2.5.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/belerweb/pinyin4j/2.5.1/pinyin4j-2.5.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml:classmate:1.4.0">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/classmate/1.4.0/classmate-1.4.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/classmate/1.4.0/classmate-1.4.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/classmate/1.4.0/classmate-1.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.9">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.jsqlparser:jsqlparser:3.1">
<CLASSES>
<root url="jar://D:/install/jars/com/github/jsqlparser/jsqlparser/3.1/jsqlparser-3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/github/jsqlparser/jsqlparser/3.1/jsqlparser-3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/github/jsqlparser/jsqlparser/3.1/jsqlparser-3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.code.gson:gson:2.8.6">
<CLASSES>
<root url="jar://D:/install/jars/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/google/code/gson/gson/2.8.6/gson-2.8.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.guava:guava:20.0">
<CLASSES>
<root url="jar://D:/install/jars/com/google/guava/guava/20.0/guava-20.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/google/guava/guava/20.0/guava-20.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/google/guava/guava/20.0/guava-20.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.itextpdf:itext-asian:5.2.0">
<CLASSES>
<root url="jar://D:/install/jars/com/itextpdf/itext-asian/5.2.0/itext-asian-5.2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/itextpdf/itext-asian/5.2.0/itext-asian-5.2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/itextpdf/itext-asian/5.2.0/itext-asian-5.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.itextpdf:itextpdf:5.4.1">
<CLASSES>
<root url="jar://D:/install/jars/com/itextpdf/itextpdf/5.4.1/itextpdf-5.4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/itextpdf/itextpdf/5.4.1/itextpdf-5.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/itextpdf/itextpdf/5.4.1/itextpdf-5.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.mchange:mchange-commons-java:0.2.15">
<CLASSES>
<root url="jar://D:/install/jars/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.qcloud:cos_api:5.6.8">
<CLASSES>
<root url="jar://D:/install/jars/com/qcloud/cos_api/5.6.8/cos_api-5.6.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/qcloud/cos_api/5.6.8/cos_api-5.6.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/qcloud/cos_api/5.6.8/cos_api-5.6.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.qcloud:vod_api:2.1.2">
<CLASSES>
<root url="jar://D:/install/jars/com/qcloud/vod_api/2.1.2/vod_api-2.1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/qcloud/vod_api/2.1.2/vod_api-2.1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/qcloud/vod_api/2.1.2/vod_api-2.1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.squareup.okhttp3:okhttp:3.10.0">
<CLASSES>
<root url="jar://D:/install/jars/com/squareup/okhttp3/okhttp/3.10.0/okhttp-3.10.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/squareup/okhttp3/okhttp/3.10.0/okhttp-3.10.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/squareup/okhttp3/okhttp/3.10.0/okhttp-3.10.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.squareup.okhttp:logging-interceptor:2.7.5">
<CLASSES>
<root url="jar://D:/install/jars/com/squareup/okhttp/logging-interceptor/2.7.5/logging-interceptor-2.7.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/squareup/okhttp/logging-interceptor/2.7.5/logging-interceptor-2.7.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/squareup/okhttp/logging-interceptor/2.7.5/logging-interceptor-2.7.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.squareup.okhttp:okhttp:2.7.5">
<CLASSES>
<root url="jar://D:/install/jars/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.squareup.okio:okio:1.13.0">
<CLASSES>
<root url="jar://D:/install/jars/com/squareup/okio/okio/1.13.0/okio-1.13.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/squareup/okio/okio/1.13.0/okio-1.13.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/squareup/okio/okio/1.13.0/okio-1.13.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.tencentcloudapi:tencentcloud-sdk-java:3.1.322">
<CLASSES>
<root url="jar://D:/install/jars/com/tencentcloudapi/tencentcloud-sdk-java/3.1.322/tencentcloud-sdk-java-3.1.322.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/tencentcloudapi/tencentcloud-sdk-java/3.1.322/tencentcloud-sdk-java-3.1.322-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/tencentcloudapi/tencentcloud-sdk-java/3.1.322/tencentcloud-sdk-java-3.1.322-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.zaxxer:HikariCP:3.2.0">
<CLASSES>
<root url="jar://D:/install/jars/com/zaxxer/HikariCP/3.2.0/HikariCP-3.2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/zaxxer/HikariCP/3.2.0/HikariCP-3.2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/zaxxer/HikariCP/3.2.0/HikariCP-3.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-beanutils:commons-beanutils:1.8.0">
<CLASSES>
<root url="jar://D:/install/jars/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-codec:commons-codec:1.11">
<CLASSES>
<root url="jar://D:/install/jars/commons-codec/commons-codec/1.11/commons-codec-1.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-codec/commons-codec/1.11/commons-codec-1.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-collections:commons-collections:3.2.2">
<CLASSES>
<root url="jar://D:/install/jars/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-lang:commons-lang:2.5">
<CLASSES>
<root url="jar://D:/install/jars/commons-lang/commons-lang/2.5/commons-lang-2.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-lang/commons-lang/2.5/commons-lang-2.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-logging:commons-logging:1.2">
<CLASSES>
<root url="jar://D:/install/jars/commons-logging/commons-logging/1.2/commons-logging-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-logging/commons-logging/1.2/commons-logging-1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.lettuce:lettuce-core:5.1.8.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/io/lettuce/lettuce-core/5.1.8.RELEASE/lettuce-core-5.1.8.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/lettuce/lettuce-core/5.1.8.RELEASE/lettuce-core-5.1.8.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/lettuce/lettuce-core/5.1.8.RELEASE/lettuce-core-5.1.8.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-buffer:4.1.38.Final">
<CLASSES>
<root url="jar://D:/install/jars/io/netty/netty-buffer/4.1.38.Final/netty-buffer-4.1.38.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/netty/netty-buffer/4.1.38.Final/netty-buffer-4.1.38.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/netty/netty-buffer/4.1.38.Final/netty-buffer-4.1.38.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-codec:4.1.38.Final">
<CLASSES>
<root url="jar://D:/install/jars/io/netty/netty-codec/4.1.38.Final/netty-codec-4.1.38.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/netty/netty-codec/4.1.38.Final/netty-codec-4.1.38.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/netty/netty-codec/4.1.38.Final/netty-codec-4.1.38.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-common:4.1.38.Final">
<CLASSES>
<root url="jar://D:/install/jars/io/netty/netty-common/4.1.38.Final/netty-common-4.1.38.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/netty/netty-common/4.1.38.Final/netty-common-4.1.38.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/netty/netty-common/4.1.38.Final/netty-common-4.1.38.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-handler:4.1.38.Final">
<CLASSES>
<root url="jar://D:/install/jars/io/netty/netty-handler/4.1.38.Final/netty-handler-4.1.38.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/netty/netty-handler/4.1.38.Final/netty-handler-4.1.38.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/netty/netty-handler/4.1.38.Final/netty-handler-4.1.38.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-resolver:4.1.38.Final">
<CLASSES>
<root url="jar://D:/install/jars/io/netty/netty-resolver/4.1.38.Final/netty-resolver-4.1.38.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/netty/netty-resolver/4.1.38.Final/netty-resolver-4.1.38.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/netty/netty-resolver/4.1.38.Final/netty-resolver-4.1.38.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.netty:netty-transport:4.1.38.Final">
<CLASSES>
<root url="jar://D:/install/jars/io/netty/netty-transport/4.1.38.Final/netty-transport-4.1.38.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/netty/netty-transport/4.1.38.Final/netty-transport-4.1.38.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/netty/netty-transport/4.1.38.Final/netty-transport-4.1.38.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.projectreactor:reactor-core:3.2.11.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/io/projectreactor/reactor-core/3.2.11.RELEASE/reactor-core-3.2.11.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/projectreactor/reactor-core/3.2.11.RELEASE/reactor-core-3.2.11.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/projectreactor/reactor-core/3.2.11.RELEASE/reactor-core-3.2.11.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-core:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-core/2.9.2/springfox-core-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-core/2.9.2/springfox-core-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-core/2.9.2/springfox-core-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-schema:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-schema/2.9.2/springfox-schema-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-schema/2.9.2/springfox-schema-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-schema/2.9.2/springfox-schema-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-spi:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-spi/2.9.2/springfox-spi-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-spi/2.9.2/springfox-spi-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-spi/2.9.2/springfox-spi-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-spring-web:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger2:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger2/2.9.2/springfox-swagger2-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger2/2.9.2/springfox-swagger2-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger2/2.9.2/springfox-swagger2-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger-common:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-common/2.9.2/springfox-swagger-common-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-common/2.9.2/springfox-swagger-common-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-common/2.9.2/springfox-swagger-common-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger-ui:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.swagger:swagger-annotations:1.5.20">
<CLASSES>
<root url="jar://D:/install/jars/io/swagger/swagger-annotations/1.5.20/swagger-annotations-1.5.20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/swagger/swagger-annotations/1.5.20/swagger-annotations-1.5.20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/swagger/swagger-annotations/1.5.20/swagger-annotations-1.5.20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.swagger:swagger-models:1.5.20">
<CLASSES>
<root url="jar://D:/install/jars/io/swagger/swagger-models/1.5.20/swagger-models-1.5.20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/swagger/swagger-models/1.5.20/swagger-models-1.5.20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/swagger/swagger-models/1.5.20/swagger-models-1.5.20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.activation:javax.activation-api:1.2.0">
<CLASSES>
<root url="jar://D:/install/jars/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.annotation:javax.annotation-api:1.3.2">
<CLASSES>
<root url="jar://D:/install/jars/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.validation:validation-api:2.0.1.Final">
<CLASSES>
<root url="jar://D:/install/jars/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.xml.bind:jaxb-api:2.3.1">
<CLASSES>
<root url="jar://D:/install/jars/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: joda-time:joda-time:2.10.3">
<CLASSES>
<root url="jar://D:/install/jars/joda-time/joda-time/2.10.3/joda-time-2.10.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/joda-time/joda-time/2.10.3/joda-time-2.10.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/joda-time/joda-time/2.10.3/joda-time-2.10.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: log4j:log4j:1.2.17">
<CLASSES>
<root url="jar://D:/install/jars/log4j/log4j/1.2.17/log4j-1.2.17.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/log4j/log4j/1.2.17/log4j-1.2.17-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/log4j/log4j/1.2.17/log4j-1.2.17-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: mysql:mysql-connector-java:8.0.17">
<CLASSES>
<root url="jar://D:/install/jars/mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.bytebuddy:byte-buddy:1.9.16">
<CLASSES>
<root url="jar://D:/install/jars/net/bytebuddy/byte-buddy/1.9.16/byte-buddy-1.9.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/bytebuddy/byte-buddy/1.9.16/byte-buddy-1.9.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/bytebuddy/byte-buddy/1.9.16/byte-buddy-1.9.16-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.polyv:polyv-java-live-sdk:2.0.4">
<CLASSES>
<root url="jar://D:/install/jars/net/polyv/polyv-java-live-sdk/2.0.4/polyv-java-live-sdk-2.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/polyv/polyv-java-live-sdk/2.0.4/polyv-java-live-sdk-2.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/polyv/polyv-java-live-sdk/2.0.4/polyv-java-live-sdk-2.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.polyv:polyv-java-sdk-common:2.0.4">
<CLASSES>
<root url="jar://D:/install/jars/net/polyv/polyv-java-sdk-common/2.0.4/polyv-java-sdk-common-2.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/polyv/polyv-java-sdk-common/2.0.4/polyv-java-sdk-common-2.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/polyv/polyv-java-sdk-common/2.0.4/polyv-java-sdk-common-2.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.ehcache:ehcache:2.10.6">
<CLASSES>
<root url="jar://D:/install/jars/net/sf/ehcache/ehcache/2.10.6/ehcache-2.10.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/sf/ehcache/ehcache/2.10.6/ehcache-2.10.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/sf/ehcache/ehcache/2.10.6/ehcache-2.10.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.ezmorph:ezmorph:1.0.6">
<CLASSES>
<root url="jar://D:/install/jars/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.json-lib:json-lib:jdk15:2.4">
<CLASSES>
<root url="jar://D:/install/jars/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/sf/json-lib/json-lib/2.4/json-lib-2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/sf/json-lib/json-lib/2.4/json-lib-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-lang3:3.9">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-pool2:2.6.2">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/commons/commons-pool2/2.6.2/commons-pool2-2.6.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/commons/commons-pool2/2.6.2/commons-pool2-2.6.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/commons/commons-pool2/2.6.2/commons-pool2-2.6.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpclient:4.5.9">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.11">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpcore/4.4.11/httpcore-4.4.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpcore/4.4.11/httpcore-4.4.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpcore/4.4.11/httpcore-4.4.11-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpmime:4.5.9">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpmime/4.5.9/httpmime-4.5.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpmime/4.5.9/httpmime-4.5.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpmime/4.5.9/httpmime-4.5.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.logging.log4j:log4j-api:2.11.2">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi:3.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/poi/poi/3.13/poi-3.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/poi/poi/3.13/poi-3.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/poi/poi/3.13/poi-3.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi-ooxml:3.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi-ooxml-schemas:3.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml-schemas/3.13/poi-ooxml-schemas-3.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml-schemas/3.13/poi-ooxml-schemas-3.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml-schemas/3.13/poi-ooxml-schemas-3.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.22">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-core/9.0.22/tomcat-embed-core-9.0.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-core/9.0.22/tomcat-embed-core-9.0.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-core/9.0.22/tomcat-embed-core-9.0.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.22">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-el/9.0.22/tomcat-embed-el-9.0.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-el/9.0.22/tomcat-embed-el-9.0.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-el/9.0.22/tomcat-embed-el-9.0.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.22">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.22/tomcat-embed-websocket-9.0.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.22/tomcat-embed-websocket-9.0.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.22/tomcat-embed-websocket-9.0.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.aspectj:aspectjweaver:1.9.4">
<CLASSES>
<root url="jar://D:/install/jars/org/aspectj/aspectjweaver/1.9.4/aspectjweaver-1.9.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/aspectj/aspectjweaver/1.9.4/aspectjweaver-1.9.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/aspectj/aspectjweaver/1.9.4/aspectjweaver-1.9.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.bouncycastle:bcprov-jdk15on:1.59">
<CLASSES>
<root url="jar://D:/install/jars/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.jettison:jettison:1.1">
<CLASSES>
<root url="jar://D:/install/jars/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/codehaus/jettison/jettison/1.1/jettison-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/codehaus/jettison/jettison/1.1/jettison-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.freemarker:freemarker:2.3.28">
<CLASSES>
<root url="jar://D:/install/jars/org/freemarker/freemarker/2.3.28/freemarker-2.3.28.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/freemarker/freemarker/2.3.28/freemarker-2.3.28-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/freemarker/freemarker/2.3.28/freemarker-2.3.28-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.hibernate.validator:hibernate-validator:6.0.17.Final">
<CLASSES>
<root url="jar://D:/install/jars/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.ini4j:ini4j:0.5.4">
<CLASSES>
<root url="jar://D:/install/jars/org/ini4j/ini4j/0.5.4/ini4j-0.5.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/ini4j/ini4j/0.5.4/ini4j-0.5.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/ini4j/ini4j/0.5.4/ini4j-0.5.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3">
<CLASSES>
<root url="jar://D:/install/jars/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-runtime.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.java-websocket:Java-WebSocket:1.5.1">
<CLASSES>
<root url="jar://D:/install/jars/org/java-websocket/Java-WebSocket/1.5.1/Java-WebSocket-1.5.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/java-websocket/Java-WebSocket/1.5.1/Java-WebSocket-1.5.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/java-websocket/Java-WebSocket/1.5.1/Java-WebSocket-1.5.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final">
<CLASSES>
<root url="jar://D:/install/jars/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jdom:jdom2:2.0.6">
<CLASSES>
<root url="jar://D:/install/jars/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/jdom/jdom2/2.0.6/jdom2-2.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/jdom/jdom2/2.0.6/jdom2-2.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mapstruct:mapstruct:1.2.0.Final">
<CLASSES>
<root url="jar://D:/install/jars/org/mapstruct/mapstruct/1.2.0.Final/mapstruct-1.2.0.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/mapstruct/mapstruct/1.2.0.Final/mapstruct-1.2.0.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/mapstruct/mapstruct/1.2.0.Final/mapstruct-1.2.0.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mybatis:mybatis:3.5.4">
<CLASSES>
<root url="jar://D:/install/jars/org/mybatis/mybatis/3.5.4/mybatis-3.5.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/mybatis/mybatis/3.5.4/mybatis-3.5.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/mybatis/mybatis/3.5.4/mybatis-3.5.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mybatis:mybatis-spring:2.0.4">
<CLASSES>
<root url="jar://D:/install/jars/org/mybatis/mybatis-spring/2.0.4/mybatis-spring-2.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/mybatis/mybatis-spring/2.0.4/mybatis-spring-2.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/mybatis/mybatis-spring/2.0.4/mybatis-spring-2.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.projectlombok:lombok:1.18.8">
<CLASSES>
<root url="jar://D:/install/jars/org/projectlombok/lombok/1.18.8/lombok-1.18.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/projectlombok/lombok/1.18.8/lombok-1.18.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/projectlombok/lombok/1.18.8/lombok-1.18.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.quartz-scheduler:quartz:2.3.1">
<CLASSES>
<root url="jar://D:/install/jars/org/quartz-scheduler/quartz/2.3.1/quartz-2.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/quartz-scheduler/quartz/2.3.1/quartz-2.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/quartz-scheduler/quartz/2.3.1/quartz-2.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.reactivestreams:reactive-streams:1.0.2">
<CLASSES>
<root url="jar://D:/install/jars/org/reactivestreams/reactive-streams/1.0.2/reactive-streams-1.0.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/reactivestreams/reactive-streams/1.0.2/reactive-streams-1.0.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/reactivestreams/reactive-streams/1.0.2/reactive-streams-1.0.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scilab.forge:jlatexmath:1.0.7">
<CLASSES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath/1.0.7/jlatexmath-1.0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath/1.0.7/jlatexmath-1.0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath/1.0.7/jlatexmath-1.0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scilab.forge:jlatexmath-font-cyrillic:1.0.7">
<CLASSES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-cyrillic/1.0.7/jlatexmath-font-cyrillic-1.0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-cyrillic/1.0.7/jlatexmath-font-cyrillic-1.0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-cyrillic/1.0.7/jlatexmath-font-cyrillic-1.0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scilab.forge:jlatexmath-font-greek:1.0.7">
<CLASSES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-greek/1.0.7/jlatexmath-font-greek-1.0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-greek/1.0.7/jlatexmath-font-greek-1.0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-greek/1.0.7/jlatexmath-font-greek-1.0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.26">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-api:1.7.26">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-log4j12:1.7.26">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-log4j12/1.7.26/slf4j-log4j12-1.7.26.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/slf4j-log4j12/1.7.26/slf4j-log4j12-1.7.26-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-log4j12/1.7.26/slf4j-log4j12-1.7.26-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-simple:1.7.26">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-simple/1.7.26/slf4j-simple-1.7.26.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/slf4j-simple/1.7.26/slf4j-simple-1.7.26-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-simple/1.7.26/slf4j-simple-1.7.26-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot/2.1.7.RELEASE/spring-boot-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot/2.1.7.RELEASE/spring-boot-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot/2.1.7.RELEASE/spring-boot-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-autoconfigure/2.1.7.RELEASE/spring-boot-autoconfigure-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-autoconfigure/2.1.7.RELEASE/spring-boot-autoconfigure-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-autoconfigure/2.1.7.RELEASE/spring-boot-autoconfigure-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-configuration-processor/2.1.7.RELEASE/spring-boot-configuration-processor-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-configuration-processor/2.1.7.RELEASE/spring-boot-configuration-processor-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-configuration-processor/2.1.7.RELEASE/spring-boot-configuration-processor-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter/2.1.7.RELEASE/spring-boot-starter-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter/2.1.7.RELEASE/spring-boot-starter-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter/2.1.7.RELEASE/spring-boot-starter-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-aop/2.1.7.RELEASE/spring-boot-starter-aop-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-aop/2.1.7.RELEASE/spring-boot-starter-aop-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-aop/2.1.7.RELEASE/spring-boot-starter-aop-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-cache/2.1.7.RELEASE/spring-boot-starter-cache-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-cache/2.1.7.RELEASE/spring-boot-starter-cache-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-cache/2.1.7.RELEASE/spring-boot-starter-cache-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-data-redis/2.1.7.RELEASE/spring-boot-starter-data-redis-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-data-redis/2.1.7.RELEASE/spring-boot-starter-data-redis-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-data-redis/2.1.7.RELEASE/spring-boot-starter-data-redis-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-jdbc/2.1.7.RELEASE/spring-boot-starter-jdbc-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-jdbc/2.1.7.RELEASE/spring-boot-starter-jdbc-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-jdbc/2.1.7.RELEASE/spring-boot-starter-jdbc-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-json/2.1.7.RELEASE/spring-boot-starter-json-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-json/2.1.7.RELEASE/spring-boot-starter-json-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-json/2.1.7.RELEASE/spring-boot-starter-json-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-logging/2.1.7.RELEASE/spring-boot-starter-logging-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-logging/2.1.7.RELEASE/spring-boot-starter-logging-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-logging/2.1.7.RELEASE/spring-boot-starter-logging-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-quartz:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-quartz/2.1.7.RELEASE/spring-boot-starter-quartz-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-quartz/2.1.7.RELEASE/spring-boot-starter-quartz-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-quartz/2.1.7.RELEASE/spring-boot-starter-quartz-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-tomcat/2.1.7.RELEASE/spring-boot-starter-tomcat-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-tomcat/2.1.7.RELEASE/spring-boot-starter-tomcat-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-tomcat/2.1.7.RELEASE/spring-boot-starter-tomcat-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-web/2.1.7.RELEASE/spring-boot-starter-web-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-web/2.1.7.RELEASE/spring-boot-starter-web-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-web/2.1.7.RELEASE/spring-boot-starter-web-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-websocket:2.1.7.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-websocket/2.1.7.RELEASE/spring-boot-starter-websocket-2.1.7.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-websocket/2.1.7.RELEASE/spring-boot-starter-websocket-2.1.7.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-websocket/2.1.7.RELEASE/spring-boot-starter-websocket-2.1.7.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.data:spring-data-commons:2.1.10.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-commons/2.1.10.RELEASE/spring-data-commons-2.1.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-commons/2.1.10.RELEASE/spring-data-commons-2.1.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-commons/2.1.10.RELEASE/spring-data-commons-2.1.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.data:spring-data-keyvalue:2.1.10.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-keyvalue/2.1.10.RELEASE/spring-data-keyvalue-2.1.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-keyvalue/2.1.10.RELEASE/spring-data-keyvalue-2.1.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-keyvalue/2.1.10.RELEASE/spring-data-keyvalue-2.1.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.data:spring-data-redis:2.1.10.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-redis/2.1.10.RELEASE/spring-data-redis-2.1.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-redis/2.1.10.RELEASE/spring-data-redis-2.1.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/data/spring-data-redis/2.1.10.RELEASE/spring-data-redis-2.1.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-aop:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-beans:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context-support:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-context-support/5.1.9.RELEASE/spring-context-support-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-context-support/5.1.9.RELEASE/spring-context-support-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-context-support/5.1.9.RELEASE/spring-context-support-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-core:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-expression:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-jcl:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-jdbc:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-jdbc/5.1.9.RELEASE/spring-jdbc-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-jdbc/5.1.9.RELEASE/spring-jdbc-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-jdbc/5.1.9.RELEASE/spring-jdbc-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-messaging:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-messaging/5.1.9.RELEASE/spring-messaging-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-messaging/5.1.9.RELEASE/spring-messaging-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-messaging/5.1.9.RELEASE/spring-messaging-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-oxm:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-oxm/5.1.9.RELEASE/spring-oxm-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-oxm/5.1.9.RELEASE/spring-oxm-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-oxm/5.1.9.RELEASE/spring-oxm-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-tx:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-tx/5.1.9.RELEASE/spring-tx-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-tx/5.1.9.RELEASE/spring-tx-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-tx/5.1.9.RELEASE/spring-tx-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-web:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-webmvc:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-websocket:5.1.9.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-websocket/5.1.9.RELEASE/spring-websocket-5.1.9.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-websocket/5.1.9.RELEASE/spring-websocket-5.1.9.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-websocket/5.1.9.RELEASE/spring-websocket-5.1.9.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.yaml:snakeyaml:1.23">
<CLASSES>
<root url="jar://D:/install/jars/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/yaml/snakeyaml/1.23/snakeyaml-1.23-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/yaml/snakeyaml/1.23/snakeyaml-1.23-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: redis.clients:jedis:3.3.0">
<CLASSES>
<root url="jar://D:/install/jars/redis/clients/jedis/3.3.0/jedis-3.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/redis/clients/jedis/3.3.0/jedis-3.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/redis/clients/jedis/3.3.0/jedis-3.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: stax:stax-api:1.0.1">
<CLASSES>
<root url="jar://D:/install/jars/stax/stax-api/1.0.1/stax-api-1.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/stax/stax-api/1.0.1/stax-api-1.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/stax/stax-api/1.0.1/stax-api-1.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="jre1.8">
<CLASSES>
<root url="file://C:/Program Files/Java/jre1.8.0_202" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/subsidy.iml" filepath="$PROJECT_DIR$/subsidy.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="638a5aae-1fdf-4d8e-b485-bccb20a55a3c" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/logs/springboot-logback/info/2024-05-08-0.log.gz" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/controller/AdministerProjectMappingController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/controller/LaborServiceDictController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/controller/MemberController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/controller/ProjectController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/controller/ProjectMemberMappingController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/dto/administer/VerifyCodeDTO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/dto/labor/AbnormalRecordDTO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/dto/labor/AddProjectDTO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/dto/labor/ProjectManageDTO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/dto/labor/ProjectsDTO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/AdministerProjectMappingMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/LaborServiceDictMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/MemberMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/ProjectMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/ProjectMemberMappingMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/ProjectSalaryHistoryMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/mapper/SmsVerifyCodeMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/AdministerProjectMappingDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/LaborServiceDictDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/MemberDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/ProjectDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/ProjectMemberMappingDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/ProjectSalaryHistoryDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/model/SmsVerifyCodeDO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/AdministerProjectMappingService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/LaborServiceDictService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/MemberService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/ProjectMemberMappingService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/ProjectService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/impl/AdministerProjectMappingServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/impl/LaborServiceDictServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/impl/MemberServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/impl/ProjectMemberMappingServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/service/impl/ProjectServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/vo/administer/UserRoleVO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/vo/labor/AbnormalRecordVO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/vo/labor/LoginVO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/vo/labor/ProjectManageVO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/vo/labor/ProjectsVO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/AdministerProjectMappingMapper.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/LaborServiceDictMapper.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/MemberMapper.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/ProjectMapper.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/ProjectMemberMappingMapper.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/ProjectSalaryHistoryMapper.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/mapper/SmsVerifyCodeMapper.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback-info.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/springboot-logback-info.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/application-dev.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-dev.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/application-prod.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-prod.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/code.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/code.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/application-dev.properties" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/application-dev.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/application-prod.properties" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/application-prod.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/code.properties" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/code.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/subsidy/common/interceptor/AuthenticationInterceptor.class" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageViewManager">
<option name="myElementSize" value="209" />
</component>
<component name="DatabaseView">
<option name="SHOW_INTERMEDIATE" value="true" />
<option name="GROUP_DATA_SOURCES" value="true" />
<option name="GROUP_SCHEMA" value="true" />
<option name="GROUP_CONTENTS" value="false" />
<option name="SORT_POSITIONED" value="false" />
<option name="SHOW_EMPTY_GROUPS" value="false" />
<option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
<option name="HIDDEN_KINDS">
<set />
</option>
<expand />
<select />
</component>
<component name="FavoritesManager">
<favorites_list name="subsidy" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Kotlin File" />
<option value="Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="20221124-直播版本" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
<option name="UPDATE_TYPE" value="REBASE" />
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="localRepository" value="D:\install\jars" />
<option name="mavenHome" value="D:/install/maven" />
<option name="userSettingsFile" value="D:\install\maven\conf\settings.xml" />
</MavenGeneralSettings>
</option>
<option name="importingSettings">
<MavenImportingSettings>
<option name="importAutomatically" value="true" />
<option name="vmOptionsForImporter" value="-Xmx768m" />
</MavenImportingSettings>
</option>
</component>
<component name="ProjectId" id="262qhXzbx7dyAtSeRZpjiOYKgew" />
<component name="ProjectLevelVcsManager">
<OptionsSetting value="false" id="Update" />
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showExcludedFiles" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
<property name="Git.Branch.Popup.ShowAllRemotes" value="true" />
<property name="RequestMappingsPanelOrder0" value="0" />
<property name="RequestMappingsPanelOrder1" value="1" />
<property name="RequestMappingsPanelWidth0" value="75" />
<property name="RequestMappingsPanelWidth1" value="75" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../subsidy-talent" />
<property name="project.structure.last.edited" value="Modules" />
<property name="project.structure.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="restartRequiresConfirmation" value="false" />
<property name="run.code.analysis.last.selected.profile" value="pProject Default" />
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
</component>
<component name="ReactorSettings">
<option name="notificationShown" value="true" />
</component>
<component name="RecentsManager">
<key name="CopyClassDialog.RECENTS_KEY">
<recent name="com.subsidy.vo.labor" />
<recent name="com.subsidy.model" />
<recent name="com.subsidy.mapper" />
<recent name="com.subsidy.vo.administer" />
<recent name="com.subsidy.dto.administer" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\code\subsidy-mate\src\main\resources\mapper" />
<recent name="D:\code\subsidy-mate\src\main\java\com\subsidy\dto\labor" />
<recent name="D:\code\subsidy-mate\src\main\java\com\subsidy\vo\labor" />
<recent name="D:\code\subsidy-app\src\main\java\com\subsidy\vo" />
<recent name="D:\code\subsidy-app\src\main\java\com\subsidy\util" />
</key>
</component>
<component name="RunManager" selected="Spring Boot.MeishuApplication">
<configuration name="AdministerServiceImpl" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.subsidy.service.impl.AdministerServiceImpl" />
<module name="subsidy" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.subsidy.service.impl.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="CodeGenerator" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.subsidy.util.CodeGenerator" />
<module name="subsidy" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.subsidy.util.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="MemberServiceImpl" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.subsidy.service.impl.MemberServiceImpl" />
<module name="subsidy" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.subsidy.service.impl.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="QuartzUtil" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.subsidy.util.QuartzUtil" />
<module name="subsidy" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.subsidy.util.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="VodPlayHistoryServiceImpl" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.subsidy.service.impl.VodPlayHistoryServiceImpl" />
<module name="subsidy" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.subsidy.service.impl.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="MeishuApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<module name="subsidy" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.subsidy.MeishuApplication" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<recent_temporary>
<list>
<item itemvalue="Application.CodeGenerator" />
<item itemvalue="Application.AdministerServiceImpl" />
<item itemvalue="Application.VodPlayHistoryServiceImpl" />
<item itemvalue="Application.QuartzUtil" />
<item itemvalue="Application.MemberServiceImpl" />
</list>
</recent_temporary>
</component>
<component name="SpringBootOptions">
<option name="showAdditionalConfigNotification" value="false" />
</component>
<component name="SshConsoleOptionsProvider">
<option name="myEncoding" value="UTF-8" />
</component>
<component name="StructureViewFactory">
<option name="ACTIVE_ACTIONS" value=",SHOW_PROPERTIES" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="638a5aae-1fdf-4d8e-b485-bccb20a55a3c" name="Default Changelist" comment="" />
<created>1646632149232</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1646632149232</updated>
<workItem from="1646632152122" duration="1025000" />
<workItem from="1646633197439" duration="3657000" />
<workItem from="1646636936743" duration="474000" />
<workItem from="1646637828270" duration="1630000" />
<workItem from="1646645974492" duration="2614000" />
<workItem from="1646701557680" duration="15018000" />
<workItem from="1646788535842" duration="612000" />
<workItem from="1646790338403" duration="8332000" />
<workItem from="1646807467814" duration="6071000" />
<workItem from="1646874993189" duration="1369000" />
<workItem from="1646876814607" duration="6259000" />
<workItem from="1646896922426" duration="3105000" />
<workItem from="1646962183022" duration="1864000" />
<workItem from="1646983601833" duration="2050000" />
<workItem from="1647220611434" duration="641000" />
<workItem from="1647313158208" duration="220000" />
<workItem from="1647331484750" duration="4301000" />
<workItem from="1647827064142" duration="5647000" />
<workItem from="1647910856951" duration="10025000" />
<workItem from="1647997742934" duration="10553000" />
<workItem from="1648086108223" duration="9720000" />
<workItem from="1648171735074" duration="4968000" />
<workItem from="1648425054218" duration="8630000" />
<workItem from="1648516580978" duration="4959000" />
<workItem from="1654484287168" duration="810000" />
<workItem from="1654494063823" duration="745000" />
<workItem from="1654496017707" duration="4626000" />
<workItem from="1654581415187" duration="17000" />
<workItem from="1654583377540" duration="1941000" />
<workItem from="1654651930902" duration="951000" />
<workItem from="1654658089303" duration="8478000" />
<workItem from="1654738182746" duration="595000" />
<workItem from="1654824339715" duration="600000" />
<workItem from="1655204271125" duration="603000" />
<workItem from="1655256353407" duration="1799000" />
<workItem from="1655349047911" duration="4911000" />
<workItem from="1655357826284" duration="5254000" />
<workItem from="1655373806897" duration="1589000" />
<workItem from="1655429665117" duration="363000" />
<workItem from="1655430600785" duration="23480000" />
<workItem from="1655687956608" duration="595000" />
<workItem from="1655695204194" duration="20000" />
<workItem from="1655707164002" duration="1156000" />
<workItem from="1655709280478" duration="2404000" />
<workItem from="1655775673866" duration="37000" />
<workItem from="1655884149438" duration="4721000" />
<workItem from="1655948497086" duration="10339000" />
<workItem from="1656035015006" duration="1071000" />
<workItem from="1656038894105" duration="927000" />
<workItem from="1656053440197" duration="256000" />
<workItem from="1656308567785" duration="9960000" />
<workItem from="1656380054454" duration="599000" />
<workItem from="1656466053694" duration="4065000" />
<workItem from="1656553129663" duration="353000" />
<workItem from="1656640566559" duration="13000" />
<workItem from="1656648599471" duration="3230000" />
<workItem from="1656918294400" duration="439000" />
<workItem from="1656919205451" duration="606000" />
<workItem from="1657090148510" duration="614000" />
<workItem from="1657162900047" duration="795000" />
<workItem from="1657189920514" duration="308000" />
<workItem from="1657243847527" duration="1550000" />
<workItem from="1657503348128" duration="8831000" />
<workItem from="1657590562287" duration="47000" />
<workItem from="1657590620695" duration="51000" />
<workItem from="1657590686532" duration="65000" />
<workItem from="1657590764045" duration="5000" />
<workItem from="1657590778891" duration="144000" />
<workItem from="1657590946746" duration="4600000" />
<workItem from="1657674817113" duration="20502000" />
<workItem from="1657762627046" duration="21056000" />
<workItem from="1657848245679" duration="763000" />
<workItem from="1657849794125" duration="17725000" />
<workItem from="1658106726040" duration="2577000" />
<workItem from="1658138081478" duration="610000" />
<workItem from="1658367860848" duration="114000" />
<workItem from="1658387127185" duration="9274000" />
<workItem from="1658450581803" duration="16260000" />
<workItem from="1658711674658" duration="20830000" />
<workItem from="1658781597093" duration="123000" />
<workItem from="1658886149665" duration="24505000" />
<workItem from="1658969512649" duration="26180000" />
<workItem from="1659054212557" duration="24745000" />
<workItem from="1659313260924" duration="10240000" />
<workItem from="1659401332685" duration="3960000" />
<workItem from="1659485871293" duration="7724000" />
<workItem from="1659509329436" duration="7166000" />
<workItem from="1659573847088" duration="18999000" />
<workItem from="1659664548673" duration="13337000" />
<workItem from="1659693651823" duration="50000" />
<workItem from="1659927971229" duration="1161000" />
<workItem from="1659930148951" duration="2287000" />
<workItem from="1660026041424" duration="21000" />
<workItem from="1660026221808" duration="229000" />
<workItem from="1660036997682" duration="408000" />
<workItem from="1660196791080" duration="2508000" />
<workItem from="1660200159138" duration="230000" />
<workItem from="1660200558906" duration="1266000" />
<workItem from="1660203582091" duration="274000" />
<workItem from="1660208873665" duration="490000" />
<workItem from="1660266426102" duration="594000" />
<workItem from="1660271926667" duration="121000" />
<workItem from="1660294353244" duration="21000" />
<workItem from="1660295444752" duration="637000" />
<workItem from="1660643061144" duration="913000" />
<workItem from="1660872064372" duration="2388000" />
<workItem from="1661242181028" duration="17000" />
<workItem from="1661394989887" duration="706000" />
<workItem from="1661742910272" duration="5841000" />
<workItem from="1661822533147" duration="1707000" />
<workItem from="1661825900258" duration="12814000" />
<workItem from="1661909114290" duration="20219000" />
<workItem from="1661990855986" duration="22344000" />
<workItem from="1662081409341" duration="19727000" />
<workItem from="1662340619110" duration="14541000" />
<workItem from="1662427685227" duration="16097000" />
<workItem from="1662514158005" duration="1164000" />
<workItem from="1662517863552" duration="966000" />
<workItem from="1663119753993" duration="10454000" />
<workItem from="1663204984998" duration="6791000" />
<workItem from="1663312793548" duration="1248000" />
<workItem from="1663326675817" duration="3552000" />
<workItem from="1663550391100" duration="26806000" />
<workItem from="1663635727850" duration="599000" />
<workItem from="1663652265617" duration="206000" />
<workItem from="1663652486661" duration="48000" />
<workItem from="1663652547461" duration="7336000" />
<workItem from="1663728873202" duration="262000" />
<workItem from="1663746158157" duration="17000" />
<workItem from="1663841106527" duration="1375000" />
<workItem from="1663896379852" duration="595000" />
<workItem from="1663921149343" duration="2906000" />
<workItem from="1663926152049" duration="1515000" />
<workItem from="1663927742679" duration="988000" />
<workItem from="1664155751799" duration="20000" />
<workItem from="1664161614464" duration="621000" />
<workItem from="1664262343602" duration="1251000" />
<workItem from="1664333530582" duration="21000" />
<workItem from="1664430399548" duration="650000" />
<workItem from="1664510239030" duration="8415000" />
<workItem from="1664533585217" duration="17000" />
<workItem from="1665196008389" duration="1666000" />
<workItem from="1665213810739" duration="1672000" />
<workItem from="1665280017102" duration="2248000" />
<workItem from="1665301406261" duration="1875000" />
<workItem from="1665364832536" duration="6414000" />
<workItem from="1665456332387" duration="7898000" />
<workItem from="1665540146982" duration="6360000" />
<workItem from="1665561260175" duration="6000" />
<workItem from="1665628825714" duration="12913000" />
<workItem from="1665970499482" duration="9617000" />
<workItem from="1666057237452" duration="655000" />
<workItem from="1666071263981" duration="498000" />
<workItem from="1666080386352" duration="1307000" />
<workItem from="1666248040403" duration="729000" />
<workItem from="1666662727349" duration="4377000" />
<workItem from="1666668354386" duration="545000" />
<workItem from="1666680510828" duration="737000" />
<workItem from="1666687723608" duration="599000" />
<workItem from="1666748541820" duration="672000" />
<workItem from="1666765067948" duration="704000" />
<workItem from="1666770570357" duration="641000" />
<workItem from="1666833835423" duration="682000" />
<workItem from="1666865488547" duration="601000" />
<workItem from="1666870106943" duration="80000" />
<workItem from="1666925287694" duration="2238000" />
<workItem from="1667181032500" duration="3846000" />
<workItem from="1667196056434" duration="112000" />
<workItem from="1667196320760" duration="3648000" />
<workItem from="1667265954944" duration="76000" />
<workItem from="1667446929603" duration="15000" />
<workItem from="1667796292280" duration="662000" />
<workItem from="1667977037714" duration="4207000" />
<workItem from="1668043419760" duration="11759000" />
<workItem from="1668136682795" duration="948000" />
<workItem from="1668147794277" duration="886000" />
<workItem from="1668390136866" duration="1759000" />
<workItem from="1668584538137" duration="924000" />
<workItem from="1668678698852" duration="742000" />
<workItem from="1668734770083" duration="46000" />
<workItem from="1668761683780" duration="854000" />
<workItem from="1668998420465" duration="719000" />
<workItem from="1668999791029" duration="3818000" />
<workItem from="1669096082727" duration="170000" />
<workItem from="1669254786931" duration="17079000" />
<workItem from="1669339973823" duration="14409000" />
<workItem from="1669599364902" duration="9389000" />
<workItem from="1669618467328" duration="10745000" />
<workItem from="1669631528240" duration="138000" />
<workItem from="1669685931476" duration="14390000" />
<workItem from="1669771364291" duration="10000" />
<workItem from="1669858525128" duration="13022000" />
<workItem from="1669943672165" duration="16020000" />
<workItem from="1670201857049" duration="8071000" />
<workItem from="1670216838679" duration="115000" />
<workItem from="1670216965666" duration="2106000" />
<workItem from="1670290316237" duration="19639000" />
<workItem from="1670376872141" duration="12249000" />
<workItem from="1670462790348" duration="5139000" />
<workItem from="1670481456068" duration="16654000" />
<workItem from="1670559406396" duration="3139000" />
<workItem from="1670808710194" duration="1037000" />
<workItem from="1670836051431" duration="7000" />
<workItem from="1670836136602" duration="1254000" />
<workItem from="1670839224381" duration="20000" />
<workItem from="1670839281987" duration="1000" />
<workItem from="1670901412529" duration="551000" />
<workItem from="1670909867910" duration="22000" />
<workItem from="1670913870743" duration="3511000" />
<workItem from="1671430672367" duration="12213000" />
<workItem from="1671500086159" duration="19113000" />
<workItem from="1671586568244" duration="12767000" />
<workItem from="1672018077893" duration="13593000" />
<workItem from="1672040594616" duration="41000" />
<workItem from="1672710200568" duration="20413000" />
<workItem from="1672795791917" duration="741000" />
<workItem from="1672797129239" duration="21319000" />
<workItem from="1672827330416" duration="959000" />
<workItem from="1672882228632" duration="1371000" />
<workItem from="1672884760733" duration="39000" />
<workItem from="1672884822822" duration="23387000" />
<workItem from="1672969478021" duration="819000" />
<workItem from="1672970376599" duration="47000" />
<workItem from="1672970435656" duration="23000" />
<workItem from="1672970710763" duration="49000" />
<workItem from="1672970771245" duration="62000" />
<workItem from="1672970843737" duration="111000" />
<workItem from="1672970965763" duration="16217000" />
<workItem from="1673227279973" duration="13685000" />
<workItem from="1673924664667" duration="28000" />
<workItem from="1675216499811" duration="39346000" />
<workItem from="1675390105919" duration="22311000" />
<workItem from="1675647031045" duration="28000" />
<workItem from="1675647671610" duration="158000" />
<workItem from="1675647843923" duration="9000" />
<workItem from="1675647863652" duration="84000" />
<workItem from="1675647974484" duration="95000" />
<workItem from="1675648082202" duration="104000" />
<workItem from="1675648232255" duration="148000" />
<workItem from="1675648393936" duration="465000" />
<workItem from="1675648875146" duration="268000" />
<workItem from="1675649156638" duration="20578000" />
<workItem from="1675733313251" duration="17818000" />
<workItem from="1675819187410" duration="601000" />
<workItem from="1675820198907" duration="14470000" />
<workItem from="1675905979636" duration="2122000" />
<workItem from="1675910035963" duration="999000" />
<workItem from="1675992618657" duration="7156000" />
<workItem from="1676253705398" duration="12571000" />
<workItem from="1676337692625" duration="15551000" />
<workItem from="1676424101013" duration="3391000" />
<workItem from="1676430004130" duration="8210000" />
<workItem from="1676512412947" duration="6223000" />
<workItem from="1676520067902" duration="1046000" />
<workItem from="1676528711536" duration="445000" />
<workItem from="1676534149991" duration="12000" />
<workItem from="1676542403912" duration="898000" />
<workItem from="1676597242508" duration="2254000" />
<workItem from="1676599884947" duration="13000" />
<workItem from="1676600009936" duration="10000" />
<workItem from="1676604745017" duration="1368000" />
<workItem from="1676619528738" duration="347000" />
<workItem from="1676629155784" duration="1421000" />
<workItem from="1676630983533" duration="203000" />
<workItem from="1676853913764" duration="9701000" />
<workItem from="1676876110188" duration="664000" />
<workItem from="1676880856416" duration="2164000" />
<workItem from="1676942983586" duration="2007000" />
<workItem from="1676970724076" duration="109000" />
<workItem from="1677137865344" duration="673000" />
<workItem from="1677139264913" duration="256000" />
<workItem from="1677217259077" duration="307000" />
<workItem from="1677549090264" duration="14318000" />
<workItem from="1677637415829" duration="1195000" />
<workItem from="1677721331583" duration="11267000" />
<workItem from="1677749404079" duration="3448000" />
<workItem from="1677806977363" duration="5460000" />
<workItem from="1678066971788" duration="6259000" />
<workItem from="1678088011808" duration="477000" />
<workItem from="1678091920190" duration="122000" />
<workItem from="1678154029492" duration="16759000" />
<workItem from="1678245104112" duration="14575000" />
<workItem from="1678324611924" duration="18706000" />
<workItem from="1678410799515" duration="4195000" />
<workItem from="1678670154141" duration="5403000" />
<workItem from="1678757327039" duration="601000" />
<workItem from="1678779748095" duration="2087000" />
<workItem from="1678846013342" duration="2840000" />
<workItem from="1678930159784" duration="1764000" />
<workItem from="1679020731067" duration="5342000" />
<workItem from="1679362128768" duration="764000" />
<workItem from="1679476748132" duration="308000" />
<workItem from="1680068175211" duration="320000" />
<workItem from="1681112991653" duration="6278000" />
<workItem from="1681176794691" duration="5642000" />
<workItem from="1681349384102" duration="1474000" />
<workItem from="1681811806159" duration="218000" />
<workItem from="1682239772119" duration="44000" />
<workItem from="1682302337697" duration="187000" />
<workItem from="1682308837256" duration="7042000" />
<workItem from="1682330308110" duration="1019000" />
<workItem from="1682385711957" duration="2773000" />
<workItem from="1682413714207" duration="1246000" />
<workItem from="1682475778537" duration="1046000" />
<workItem from="1682488080933" duration="1074000" />
<workItem from="1682581639538" duration="1384000" />
<workItem from="1682662800299" duration="2472000" />
<workItem from="1683165548727" duration="3295000" />
<workItem from="1683254973005" duration="316000" />
<workItem from="1683270884057" duration="980000" />
<workItem from="1683336527816" duration="16878000" />
<workItem from="1683422967312" duration="2943000" />
<workItem from="1683509128907" duration="12421000" />
<workItem from="1683597513759" duration="12328000" />
<workItem from="1683685671485" duration="9965000" />
<workItem from="1683769208491" duration="5647000" />
<workItem from="1683801076853" duration="9000" />
<workItem from="1683868865282" duration="3120000" />
<workItem from="1684113950848" duration="9143000" />
<workItem from="1684200569039" duration="14416000" />
<workItem from="1684286809950" duration="16056000" />
<workItem from="1684373500259" duration="5154000" />
<workItem from="1684459759025" duration="12139000" />
<workItem from="1684484058237" duration="98000" />
<workItem from="1684484162773" duration="3206000" />
<workItem from="1684723776087" duration="12392000" />
<workItem from="1684805539007" duration="2468000" />
<workItem from="1684823620835" duration="2017000" />
<workItem from="1684827701455" duration="559000" />
<workItem from="1684895730045" duration="2715000" />
<workItem from="1685436307972" duration="499000" />
<workItem from="1685439859241" duration="899000" />
<workItem from="1685498664758" duration="6900000" />
<workItem from="1685597189989" duration="3208000" />
<workItem from="1685610188656" duration="3808000" />
<workItem from="1685617242837" duration="128000" />
<workItem from="1685668588593" duration="826000" />
<workItem from="1685683617111" duration="11542000" />
<workItem from="1685702563229" duration="51000" />
<workItem from="1685928487992" duration="5740000" />
<workItem from="1685940711331" duration="11505000" />
<workItem from="1686015938045" duration="7043000" />
<workItem from="1686034163132" duration="948000" />
<workItem from="1686035135623" duration="1436000" />
<workItem from="1686039251723" duration="2311000" />
<workItem from="1686056538229" duration="697000" />
<workItem from="1686058883730" duration="748000" />
<workItem from="1686102820334" duration="7448000" />
<workItem from="1686123183395" duration="769000" />
<workItem from="1686141720926" duration="129000" />
<workItem from="1686141940910" duration="106000" />
<workItem from="1686188937602" duration="1270000" />
<workItem from="1686203506474" duration="707000" />
<workItem from="1686216249763" duration="1367000" />
<workItem from="1686274365704" duration="2248000" />
<workItem from="1686294497569" duration="1990000" />
<workItem from="1686306608122" duration="8000" />
<workItem from="1686556867613" duration="1415000" />
<workItem from="1686621825445" duration="36000" />
<workItem from="1686622865931" duration="2624000" />
<workItem from="1686645424536" duration="243000" />
<workItem from="1686708425848" duration="8856000" />
<workItem from="1686733378500" duration="2110000" />
<workItem from="1686792172437" duration="1217000" />
<workItem from="1686817673919" duration="225000" />
<workItem from="1686881124744" duration="436000" />
<workItem from="1687246770226" duration="599000" />
<workItem from="1687314700904" duration="2609000" />
<workItem from="1687333123180" duration="18000" />
<workItem from="1687333566928" duration="79000" />
<workItem from="1687340908265" duration="652000" />
<workItem from="1687849809265" duration="755000" />
<workItem from="1687918201300" duration="1525000" />
<workItem from="1687930632963" duration="4520000" />
<workItem from="1687935201101" duration="278000" />
<workItem from="1688371755532" duration="1767000" />
<workItem from="1688374598761" duration="191000" />
<workItem from="1688375397515" duration="88000" />
<workItem from="1688436319055" duration="6000" />
<workItem from="1688441465923" duration="1117000" />
<workItem from="1688450578816" duration="47000" />
<workItem from="1688451064216" duration="199000" />
<workItem from="1688522658510" duration="94000" />
<workItem from="1688522769212" duration="11771000" />
<workItem from="1688549566214" duration="245000" />
<workItem from="1688550151288" duration="311000" />
<workItem from="1688632633444" duration="32000" />
<workItem from="1688632702136" duration="405000" />
<workItem from="1688967669247" duration="1638000" />
<workItem from="1688969592664" duration="425000" />
<workItem from="1688970094040" duration="158000" />
<workItem from="1688971831632" duration="596000" />
<workItem from="1688975546087" duration="1062000" />
<workItem from="1688976678390" duration="673000" />
<workItem from="1689039659591" duration="596000" />
<workItem from="1689127838838" duration="1079000" />
<workItem from="1689129886266" duration="774000" />
<workItem from="1689151601508" duration="7000" />
<workItem from="1689156257415" duration="215000" />
<workItem from="1689214922246" duration="642000" />
<workItem from="1689241501105" duration="18000" />
<workItem from="1689247240266" duration="1000" />
<workItem from="1689247846258" duration="10000" />
<workItem from="1689299510991" duration="1303000" />
<workItem from="1689313591545" duration="659000" />
<workItem from="1689325423672" duration="9000" />
<workItem from="1689559065174" duration="1369000" />
<workItem from="1689575022595" duration="673000" />
<workItem from="1689733749758" duration="2375000" />
<workItem from="1689761226982" duration="153000" />
<workItem from="1689816541907" duration="1209000" />
<workItem from="1689846646266" duration="1201000" />
<workItem from="1689919862335" duration="3931000" />
<workItem from="1689929509332" duration="3467000" />
<workItem from="1690187453731" duration="110000" />
<workItem from="1690254141070" duration="697000" />
<workItem from="1690256183570" duration="1011000" />
<workItem from="1690276786683" duration="439000" />
<workItem from="1690336765797" duration="112000" />
<workItem from="1690340676572" duration="91000" />
<workItem from="1690356234715" duration="653000" />
<workItem from="1690444312837" duration="7157000" />
<workItem from="1690507763422" duration="5000" />
<workItem from="1690511507809" duration="1627000" />
<workItem from="1690532357310" duration="4676000" />
<workItem from="1690767633561" duration="1203000" />
<workItem from="1690773482933" duration="1198000" />
<workItem from="1690787394972" duration="798000" />
<workItem from="1690796426649" duration="2068000" />
<workItem from="1690855262823" duration="389000" />
<workItem from="1690871710366" duration="898000" />
<workItem from="1691042555867" duration="3125000" />
<workItem from="1691115438130" duration="5653000" />
<workItem from="1691370716985" duration="660000" />
<workItem from="1691457002232" duration="602000" />
<workItem from="1691462018155" duration="9607000" />
<workItem from="1691724757487" duration="462000" />
<workItem from="1691997743351" duration="665000" />
<workItem from="1692262360587" duration="625000" />
<workItem from="1692345198419" duration="2512000" />
<workItem from="1692585382942" duration="3378000" />
<workItem from="1692683754333" duration="515000" />
<workItem from="1692684530541" duration="17000" />
<workItem from="1692691328046" duration="1592000" />
<workItem from="1692697177332" duration="300000" />
<workItem from="1692697541033" duration="783000" />
<workItem from="1692698475481" duration="1306000" />
<workItem from="1692755958639" duration="272000" />
<workItem from="1692756854090" duration="9782000" />
<workItem from="1692839726116" duration="2141000" />
<workItem from="1693205039528" duration="12802000" />
<workItem from="1693271751322" duration="17079000" />
<workItem from="1693304088884" duration="281000" />
<workItem from="1693360301200" duration="4174000" />
<workItem from="1693792990394" duration="358000" />
<workItem from="1693805277824" duration="1835000" />
<workItem from="1693880531823" duration="11077000" />
<workItem from="1693900920607" duration="150000" />
<workItem from="1693988314121" duration="1488000" />
<workItem from="1694051857551" duration="3746000" />
<workItem from="1694138478420" duration="1497000" />
<workItem from="1694159623349" duration="4037000" />
<workItem from="1694395449095" duration="3037000" />
<workItem from="1694400104486" duration="1358000" />
<workItem from="1694483213014" duration="597000" />
<workItem from="1694501331614" duration="6000" />
<workItem from="1694569936059" duration="484000" />
<workItem from="1694572219364" duration="2728000" />
<workItem from="1694656910074" duration="6571000" />
<workItem from="1694742517784" duration="1634000" />
<workItem from="1695001920005" duration="4672000" />
<workItem from="1695102721251" duration="615000" />
<workItem from="1695106540252" duration="1000" />
<workItem from="1695345497580" duration="1585000" />
<workItem from="1695368679326" duration="50000" />
<workItem from="1695607024566" duration="9038000" />
<workItem from="1695693756836" duration="8217000" />
<workItem from="1695778765357" duration="3920000" />
<workItem from="1695864076791" duration="4124000" />
<workItem from="1696643011778" duration="2689000" />
<workItem from="1696731116614" duration="1845000" />
<workItem from="1696833187186" duration="701000" />
<workItem from="1696903210166" duration="19873000" />
<workItem from="1696989622312" duration="12347000" />
<workItem from="1697073958556" duration="8936000" />
<workItem from="1697419585150" duration="5846000" />
<workItem from="1697506642836" duration="1209000" />
<workItem from="1697521360779" duration="5581000" />
<workItem from="1697596311232" duration="26546000" />
<workItem from="1697681252055" duration="1990000" />
<workItem from="1697765781190" duration="22856000" />
<workItem from="1698025587446" duration="2607000" />
<workItem from="1698127328837" duration="34000" />
<workItem from="1698392616648" duration="336000" />
<workItem from="1698630075295" duration="35000" />
<workItem from="1698715459159" duration="5252000" />
<workItem from="1698889054673" duration="16989000" />
<workItem from="1698974661118" duration="354000" />
<workItem from="1698976841657" duration="3505000" />
<workItem from="1698989951960" duration="212000" />
<workItem from="1698990169643" duration="525000" />
<workItem from="1698990721297" duration="6000" />
<workItem from="1698993413934" duration="612000" />
<workItem from="1698995915464" duration="18000" />
<workItem from="1699234543340" duration="810000" />
<workItem from="1699428669632" duration="1200000" />
<workItem from="1699494023657" duration="1455000" />
<workItem from="1699520941228" duration="1596000" />
<workItem from="1699593543511" duration="2361000" />
<workItem from="1699839317567" duration="4547000" />
<workItem from="1699848528657" duration="378000" />
<workItem from="1699848917332" duration="604000" />
<workItem from="1699853488444" duration="5238000" />
<workItem from="1699866102884" duration="1577000" />
<workItem from="1699925245865" duration="16278000" />
<workItem from="1700014176522" duration="4163000" />
<workItem from="1700099764599" duration="6207000" />
<workItem from="1701162504124" duration="771000" />
<workItem from="1701240573619" duration="129000" />
<workItem from="1701309772384" duration="1760000" />
<workItem from="1701324198301" duration="1646000" />
<workItem from="1701393991698" duration="1443000" />
<workItem from="1701413652816" duration="10260000" />
<workItem from="1701652961575" duration="23244000" />
<workItem from="1701739679545" duration="9499000" />
<workItem from="1701825999202" duration="2999000" />
<workItem from="1701913407927" duration="1307000" />
<workItem from="1702001386416" duration="1138000" />
<workItem from="1702013011616" duration="6522000" />
<workItem from="1702260119182" duration="2737000" />
<workItem from="1702273157644" duration="486000" />
<workItem from="1702345127862" duration="3397000" />
<workItem from="1702431095536" duration="10157000" />
<workItem from="1702517204229" duration="3658000" />
<workItem from="1702603857999" duration="1138000" />
<workItem from="1702954471298" duration="942000" />
<workItem from="1702977338976" duration="683000" />
<workItem from="1703038620378" duration="7964000" />
<workItem from="1703121887574" duration="51000" />
<workItem from="1703124832481" duration="20786000" />
<workItem from="1703210718252" duration="20990000" />
<workItem from="1703467766821" duration="7451000" />
<workItem from="1703553763481" duration="3509000" />
<workItem from="1703640007951" duration="1957000" />
<workItem from="1703647066199" duration="495000" />
<workItem from="1703647576359" duration="177000" />
<workItem from="1703647766655" duration="2446000" />
<workItem from="1703727757089" duration="2766000" />
<workItem from="1703812649845" duration="3189000" />
<workItem from="1704158548144" duration="2546000" />
<workItem from="1704246824236" duration="894000" />
<workItem from="1704331462408" duration="6218000" />
<workItem from="1704418054386" duration="18248000" />
<workItem from="1704676935683" duration="19280000" />
<workItem from="1704763337063" duration="11937000" />
<workItem from="1704851502212" duration="2893000" />
<workItem from="1704871401294" duration="6151000" />
<workItem from="1704956141141" duration="8663000" />
<workItem from="1704969152301" duration="246000" />
<workItem from="1705025962149" duration="598000" />
<workItem from="1705281777300" duration="2261000" />
<workItem from="1705369865307" duration="626000" />
<workItem from="1705454791358" duration="2780000" />
<workItem from="1705478361981" duration="1831000" />
<workItem from="1705482523406" duration="1236000" />
<workItem from="1705541866204" duration="8283000" />
<workItem from="1705627393823" duration="8022000" />
<workItem from="1705887997135" duration="1260000" />
<workItem from="1705890198542" duration="6405000" />
<workItem from="1705973437403" duration="13948000" />
<workItem from="1706061847744" duration="13697000" />
<workItem from="1706150628637" duration="3404000" />
<workItem from="1706162060280" duration="667000" />
<workItem from="1706232413846" duration="2341000" />
<workItem from="1706491490686" duration="596000" />
<workItem from="1706578516269" duration="7270000" />
<workItem from="1706664212053" duration="616000" />
<workItem from="1706667936132" duration="6000" />
<workItem from="1706857996777" duration="88000" />
<workItem from="1708566132826" duration="265000" />
<workItem from="1708566406381" duration="1724000" />
<workItem from="1708583701059" duration="1478000" />
<workItem from="1708677201557" duration="4750000" />
<workItem from="1708912618444" duration="20025000" />
<workItem from="1709004031709" duration="8260000" />
<workItem from="1709084379542" duration="7276000" />
<workItem from="1709171341488" duration="5951000" />
<workItem from="1709256609241" duration="8562000" />
<workItem from="1709515824964" duration="11094000" />
<workItem from="1709602799304" duration="6878000" />
<workItem from="1709688676474" duration="5431000" />
<workItem from="1709775978110" duration="2703000" />
<workItem from="1709861237685" duration="1195000" />
<workItem from="1710126235419" duration="2581000" />
<workItem from="1710730064120" duration="5000" />
<workItem from="1712632672981" duration="1370000" />
<workItem from="1712713589505" duration="14316000" />
<workItem from="1712801898075" duration="16752000" />
<workItem from="1712886000188" duration="5061000" />
<workItem from="1713145173590" duration="1806000" />
<workItem from="1713231055662" duration="2990000" />
<workItem from="1713405863668" duration="1230000" />
<workItem from="1713496004874" duration="876000" />
<workItem from="1713752130944" duration="3613000" />
<workItem from="1713836247062" duration="10967000" />
<workItem from="1713922050731" duration="6983000" />
<workItem from="1714009546369" duration="10636000" />
<workItem from="1714094795213" duration="2459000" />
<workItem from="1714269540885" duration="10511000" />
<workItem from="1714357279388" duration="1254000" />
<workItem from="1714441945930" duration="2407000" />
<workItem from="1714960029772" duration="791000" />
<workItem from="1715048018798" duration="1791000" />
<workItem from="1715217008946" duration="595000" />
<workItem from="1715304443113" duration="20000" />
<workItem from="1721289850983" duration="381000" />
<workItem from="1721290241967" duration="53000" />
<workItem from="1721290427522" duration="2567000" />
<workItem from="1721352902014" duration="595000" />
<workItem from="1721614084630" duration="13172000" />
<workItem from="1721699733693" duration="4543000" />
<workItem from="1721714245834" duration="1247000" />
</task>
<task id="LOCAL-00025" summary="人脸识别上线版本">
<created>1665485232564</created>
<option name="number" value="00025" />
<option name="presentableId" value="LOCAL-00025" />
<option name="project" value="LOCAL" />
<updated>1665485232564</updated>
</task>
<task id="LOCAL-00026" summary="人脸识别上线版本">
<created>1665560782356</created>
<option name="number" value="00026" />
<option name="presentableId" value="LOCAL-00026" />
<option name="project" value="LOCAL" />
<updated>1665560782356</updated>
</task>
<task id="LOCAL-00027" summary="websocket上线了~~~">
<created>1665648136974</created>
<option name="number" value="00027" />
<option name="presentableId" value="LOCAL-00027" />
<option name="project" value="LOCAL" />
<updated>1665648136974</updated>
</task>
<task id="LOCAL-00028" summary="92-online版本">
<created>1665655155929</created>
<option name="number" value="00028" />
<option name="presentableId" value="LOCAL-00028" />
<option name="project" value="LOCAL" />
<updated>1665655155929</updated>
</task>
<task id="LOCAL-00029" summary="插入视频逻辑修改">
<created>1665656532107</created>
<option name="number" value="00029" />
<option name="presentableId" value="LOCAL-00029" />
<option name="project" value="LOCAL" />
<updated>1665656532107</updated>
</task>
<task id="LOCAL-00030" summary="插入视频逻辑修改">
<created>1665988507364</created>
<option name="number" value="00030" />
<option name="presentableId" value="LOCAL-00030" />
<option name="project" value="LOCAL" />
<updated>1665988507364</updated>
</task>
<task id="LOCAL-00031" summary="插入视频逻辑修改">
<created>1665997219782</created>
<option name="number" value="00031" />
<option name="presentableId" value="LOCAL-00031" />
<option name="project" value="LOCAL" />
<updated>1665997219782</updated>
</task>
<task id="LOCAL-00032" summary="插入视频逻辑修改">
<created>1666248088701</created>
<option name="number" value="00032" />
<option name="presentableId" value="LOCAL-00032" />
<option name="project" value="LOCAL" />
<updated>1666248088701</updated>
</task>
<task id="LOCAL-00033" summary="插入视频逻辑修改">
<created>1666248126080</created>
<option name="number" value="00033" />
<option name="presentableId" value="LOCAL-00033" />
<option name="project" value="LOCAL" />
<updated>1666248126080</updated>
</task>
<task id="LOCAL-00034" summary="正式人脸验证账号">
<created>1666870138002</created>
<option name="number" value="00034" />
<option name="presentableId" value="LOCAL-00034" />
<option name="project" value="LOCAL" />
<updated>1666870138002</updated>
</task>
<task id="LOCAL-00035" summary="正式人脸验证账号">
<created>1666934419338</created>
<option name="number" value="00035" />
<option name="presentableId" value="LOCAL-00035" />
<option name="project" value="LOCAL" />
<updated>1666934419338</updated>
</task>
<task id="LOCAL-00036" summary="合并前">
<created>1668390777536</created>
<option name="number" value="00036" />
<option name="presentableId" value="LOCAL-00036" />
<option name="project" value="LOCAL" />
<updated>1668390777536</updated>
</task>
<task id="LOCAL-00037" summary="合并前">
<created>1668678768667</created>
<option name="number" value="00037" />
<option name="presentableId" value="LOCAL-00037" />
<option name="project" value="LOCAL" />
<updated>1668678768667</updated>
</task>
<task id="LOCAL-00038" summary="监管版本/online版本上线了">
<created>1669256042844</created>
<option name="number" value="00038" />
<option name="presentableId" value="LOCAL-00038" />
<option name="project" value="LOCAL" />
<updated>1669256042844</updated>
</task>
<task id="LOCAL-00039" summary="导出bug修复">
<created>1670809143350</created>
<option name="number" value="00039" />
<option name="presentableId" value="LOCAL-00039" />
<option name="project" value="LOCAL" />
<updated>1670809143350</updated>
</task>
<task id="LOCAL-00040" summary="人社局跑数据准备中">
<created>1671609365707</created>
<option name="number" value="00040" />
<option name="presentableId" value="LOCAL-00040" />
<option name="project" value="LOCAL" />
<updated>1671609365707</updated>
</task>
<task id="LOCAL-00041" summary="人社局跑数据准备中&#10;新加了个有效时长">
<created>1672040625074</created>
<option name="number" value="00041" />
<option name="presentableId" value="LOCAL-00041" />
<option name="project" value="LOCAL" />
<updated>1672040625074</updated>
</task>
<task id="LOCAL-00042" summary="人脸识别订单号改为用uuid生成">
<created>1672741869899</created>
<option name="number" value="00042" />
<option name="presentableId" value="LOCAL-00042" />
<option name="project" value="LOCAL" />
<updated>1672741869899</updated>
</task>
<task id="LOCAL-00043" summary="登录登出数据匹配">
<created>1672998718021</created>
<option name="number" value="00043" />
<option name="presentableId" value="LOCAL-00043" />
<option name="project" value="LOCAL" />
<updated>1672998718022</updated>
</task>
<task id="LOCAL-00044" summary="2023年前备份">
<created>1673924683528</created>
<option name="number" value="00044" />
<option name="presentableId" value="LOCAL-00044" />
<option name="project" value="LOCAL" />
<updated>1673924683528</updated>
</task>
<task id="LOCAL-00045" summary="人社局测试">
<created>1676599503859</created>
<option name="number" value="00045" />
<option name="presentableId" value="LOCAL-00045" />
<option name="project" value="LOCAL" />
<updated>1676599503859</updated>
</task>
<task id="LOCAL-00046" summary="人社局测试">
<created>1676630885141</created>
<option name="number" value="00046" />
<option name="presentableId" value="LOCAL-00046" />
<option name="project" value="LOCAL" />
<updated>1676630885141</updated>
</task>
<task id="LOCAL-00047" summary="人社局测试">
<created>1677813658586</created>
<option name="number" value="00047" />
<option name="presentableId" value="LOCAL-00047" />
<option name="project" value="LOCAL" />
<updated>1677813658586</updated>
</task>
<task id="LOCAL-00048" summary="15天数据全部推送备份">
<created>1678268781973</created>
<option name="number" value="00048" />
<option name="presentableId" value="LOCAL-00048" />
<option name="project" value="LOCAL" />
<updated>1678268781973</updated>
</task>
<task id="LOCAL-00049" summary="社会化学徒制数据推送">
<created>1678440311246</created>
<option name="number" value="00049" />
<option name="presentableId" value="LOCAL-00049" />
<option name="project" value="LOCAL" />
<updated>1678440311246</updated>
</task>
<task id="LOCAL-00050" summary="oss">
<created>1681811865530</created>
<option name="number" value="00050" />
<option name="presentableId" value="LOCAL-00050" />
<option name="project" value="LOCAL" />
<updated>1681811865531</updated>
</task>
<task id="LOCAL-00051" summary="补贴培训第一次上课">
<created>1685610240658</created>
<option name="number" value="00051" />
<option name="presentableId" value="LOCAL-00051" />
<option name="project" value="LOCAL" />
<updated>1685610240659</updated>
</task>
<task id="LOCAL-00052" summary="补贴培训第一次上课">
<created>1685617073724</created>
<option name="number" value="00052" />
<option name="presentableId" value="LOCAL-00052" />
<option name="project" value="LOCAL" />
<updated>1685617073724</updated>
</task>
<task id="LOCAL-00053" summary="补贴培训第一次上课">
<created>1685617111184</created>
<option name="number" value="00053" />
<option name="presentableId" value="LOCAL-00053" />
<option name="project" value="LOCAL" />
<updated>1685617111184</updated>
</task>
<task id="LOCAL-00054" summary="补贴培训第一次上课熬夜改数据">
<created>1685702418893</created>
<option name="number" value="00054" />
<option name="presentableId" value="LOCAL-00054" />
<option name="project" value="LOCAL" />
<updated>1685702418894</updated>
</task>
<task id="LOCAL-00055" summary="补贴培训第2次上课熬夜改数据">
<created>1685964954658</created>
<option name="number" value="00055" />
<option name="presentableId" value="LOCAL-00055" />
<option name="project" value="LOCAL" />
<updated>1685964954659</updated>
</task>
<task id="LOCAL-00056" summary="补贴培训第3次上课熬夜改数据">
<created>1686047458512</created>
<option name="number" value="00056" />
<option name="presentableId" value="LOCAL-00056" />
<option name="project" value="LOCAL" />
<updated>1686047458512</updated>
</task>
<task id="LOCAL-00057" summary="补贴培训第3次上课熬夜改数据">
<created>1686059006960</created>
<option name="number" value="00057" />
<option name="presentableId" value="LOCAL-00057" />
<option name="project" value="LOCAL" />
<updated>1686059006960</updated>
</task>
<task id="LOCAL-00058" summary="补贴培训第4次上课熬夜改数据">
<created>1686141789350</created>
<option name="number" value="00058" />
<option name="presentableId" value="LOCAL-00058" />
<option name="project" value="LOCAL" />
<updated>1686141789350</updated>
</task>
<task id="LOCAL-00059" summary="没有看视频的人也要写登录登出数据">
<created>1686637669585</created>
<option name="number" value="00059" />
<option name="presentableId" value="LOCAL-00059" />
<option name="project" value="LOCAL" />
<updated>1686637669586</updated>
</task>
<task id="LOCAL-00060" summary="定时任务:删除上线做了人脸识别但是没有看视频或者考试的人,这些人的人脸识别记录">
<created>1686731058514</created>
<option name="number" value="00060" />
<option name="presentableId" value="LOCAL-00060" />
<option name="project" value="LOCAL" />
<updated>1686731058515</updated>
</task>
<task id="LOCAL-00061" summary="exportExerciseTest导出新增考试时长字段">
<created>1688969304658</created>
<option name="number" value="00061" />
<option name="presentableId" value="LOCAL-00061" />
<option name="project" value="LOCAL" />
<updated>1688969304658</updated>
</task>
<task id="LOCAL-00062" summary="保证活跃度检测时间和人脸识别的时间保持一致">
<created>1689934824726</created>
<option name="number" value="00062" />
<option name="presentableId" value="LOCAL-00062" />
<option name="project" value="LOCAL" />
<updated>1689934824726</updated>
</task>
<task id="LOCAL-00063" summary="班级绑定推送修改">
<created>1692348844087</created>
<option name="number" value="00063" />
<option name="presentableId" value="LOCAL-00063" />
<option name="project" value="LOCAL" />
<updated>1692348844088</updated>
</task>
<task id="LOCAL-00064" summary="contentVod别名">
<created>1692692579824</created>
<option name="number" value="00064" />
<option name="presentableId" value="LOCAL-00064" />
<option name="project" value="LOCAL" />
<updated>1692692579824</updated>
</task>
<task id="LOCAL-00065" summary="中秋代码备份">
<created>1695889257696</created>
<option name="number" value="00065" />
<option name="presentableId" value="LOCAL-00065" />
<option name="project" value="LOCAL" />
<updated>1695889257697</updated>
</task>
<task id="LOCAL-00066" summary="解决时间交叉,活跃度检测的问题">
<created>1697102917240</created>
<option name="number" value="00066" />
<option name="presentableId" value="LOCAL-00066" />
<option name="project" value="LOCAL" />
<updated>1697102917240</updated>
</task>
<task id="LOCAL-00067" summary="解决时间交叉,活跃度检测的问题&#10;重新开始推送数据">
<created>1697797096361</created>
<option name="number" value="00067" />
<option name="presentableId" value="LOCAL-00067" />
<option name="project" value="LOCAL" />
<updated>1697797096361</updated>
</task>
<task id="LOCAL-00068" summary="旧版本推数据备份-1106">
<created>1699594869947</created>
<option name="number" value="00068" />
<option name="presentableId" value="LOCAL-00068" />
<option name="project" value="LOCAL" />
<updated>1699594869947</updated>
</task>
<task id="LOCAL-00069" summary="旧版本推数据备份-1106">
<created>1699840005276</created>
<option name="number" value="00069" />
<option name="presentableId" value="LOCAL-00069" />
<option name="project" value="LOCAL" />
<updated>1699840005277</updated>
</task>
<task id="LOCAL-00070" summary="1106版本上线">
<created>1702013416885</created>
<option name="number" value="00070" />
<option name="presentableId" value="LOCAL-00070" />
<option name="project" value="LOCAL" />
<updated>1702013416886</updated>
</task>
<task id="LOCAL-00071" summary="30秒以内的视频数据不插入">
<created>1703058134855</created>
<option name="number" value="00071" />
<option name="presentableId" value="LOCAL-00071" />
<option name="project" value="LOCAL" />
<updated>1703058134856</updated>
</task>
<task id="LOCAL-00072" summary="2024.1 企业服务中心 开发前备份">
<created>1704424059718</created>
<option name="number" value="00072" />
<option name="presentableId" value="LOCAL-00072" />
<option name="project" value="LOCAL" />
<updated>1704424059718</updated>
</task>
<task id="LOCAL-00073" summary="2024.1 多客户端上线,过年备份">
<created>1706858021762</created>
<option name="number" value="00073" />
<option name="presentableId" value="LOCAL-00073" />
<option name="project" value="LOCAL" />
<updated>1706858021762</updated>
</task>
<option name="localTasksCounter" value="74" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="Vcs.Log.History.Properties">
<option name="COLUMN_ORDER">
<list>
<option value="0" />
<option value="2" />
<option value="3" />
<option value="1" />
</list>
</option>
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="COLUMN_ORDER" />
</State>
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="2023年前备份" />
<MESSAGE value="人社局测试" />
<MESSAGE value="15天数据全部推送备份" />
<MESSAGE value="社会化学徒制数据推送" />
<MESSAGE value="oss" />
<MESSAGE value="补贴培训第一次上课" />
<MESSAGE value="补贴培训第一次上课熬夜改数据" />
<MESSAGE value="补贴培训第2次上课熬夜改数据" />
<MESSAGE value="补贴培训第3次上课熬夜改数据" />
<MESSAGE value="补贴培训第4次上课熬夜改数据" />
<MESSAGE value="没有看视频的人也要写登录登出数据" />
<MESSAGE value="定时任务:删除上线做了人脸识别但是没有看视频或者考试的人,这些人的人脸识别记录" />
<MESSAGE value="exportExerciseTest导出新增考试时长字段" />
<MESSAGE value="保证活跃度检测时间和人脸识别的时间保持一致" />
<MESSAGE value="自动优化数据版本" />
<MESSAGE value="班级绑定推送修改" />
<MESSAGE value="contentVod别名" />
<MESSAGE value="中秋代码备份" />
<MESSAGE value="解决时间交叉,活跃度检测的问题" />
<MESSAGE value="解决时间交叉,活跃度检测的问题&#10;重新开始推送数据" />
<MESSAGE value="旧版本推数据备份-1106" />
<MESSAGE value="1106版本上线" />
<MESSAGE value="30秒以内的视频数据不插入" />
<MESSAGE value="2024.1 企业服务中心 开发前备份" />
<MESSAGE value="2024.1 多客户端上线,过年备份" />
<option name="LAST_COMMIT_MESSAGE" value="2024.1 多客户端上线,过年备份" />
</component>
<component name="WindowStateProjectService">
<state x="690" y="266" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1721713723899">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="690" y="266" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1721713723899" />
<state width="1676" height="759" key="DebuggerActiveHint" timestamp="1714288908114">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1676" height="759" key="DebuggerActiveHint/0.0.1920.1040@0.0.1920.1040" timestamp="1714288908114" />
<state x="740" y="278" key="FileChooserDialogImpl" timestamp="1721713499644">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="740" y="278" key="FileChooserDialogImpl/0.0.1920.1040@0.0.1920.1040" timestamp="1721713499644" />
<state width="1358" height="271" key="GridCell.Tab.0.bottom" timestamp="1721714265090">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1358" height="271" key="GridCell.Tab.0.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1721714265090" />
<state width="1358" height="271" key="GridCell.Tab.0.center" timestamp="1721714265090">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1358" height="271" key="GridCell.Tab.0.center/0.0.1920.1040@0.0.1920.1040" timestamp="1721714265090" />
<state width="1358" height="271" key="GridCell.Tab.0.left" timestamp="1721714265090">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1358" height="271" key="GridCell.Tab.0.left/0.0.1920.1040@0.0.1920.1040" timestamp="1721714265090" />
<state width="1358" height="271" key="GridCell.Tab.0.right" timestamp="1721714265090">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1358" height="271" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1721714265090" />
<state width="1481" height="220" key="GridCell.Tab.1.bottom" timestamp="1721292252993">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1481" height="220" key="GridCell.Tab.1.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1721292252993" />
<state width="1481" height="220" key="GridCell.Tab.1.center" timestamp="1721292252993">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1481" height="220" key="GridCell.Tab.1.center/0.0.1920.1040@0.0.1920.1040" timestamp="1721292252993" />
<state width="1481" height="220" key="GridCell.Tab.1.left" timestamp="1721292252993">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1481" height="220" key="GridCell.Tab.1.left/0.0.1920.1040@0.0.1920.1040" timestamp="1721292252993" />
<state width="1481" height="220" key="GridCell.Tab.1.right" timestamp="1721292252993">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state width="1481" height="220" key="GridCell.Tab.1.right/0.0.1920.1040@0.0.1920.1040" timestamp="1721292252993" />
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.bottom" timestamp="1715131691314">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1715131691314" />
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.center" timestamp="1715131691314">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.center/0.0.1920.1040@0.0.1920.1040" timestamp="1715131691314" />
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.left" timestamp="1715131691314">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.left/0.0.1920.1040@0.0.1920.1040" timestamp="1715131691314" />
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.right" timestamp="1715131691314">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="0" y="678" width="1877" height="374" key="GridCell.Tab.2.right/0.0.1920.1040@0.0.1920.1040" timestamp="1715131691314" />
<state x="849" y="230" key="RollbackChangesDialog" timestamp="1721704438030">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="849" y="230" key="RollbackChangesDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1721704438030" />
<state x="396" y="75" width="1413" height="918" key="find.popup" timestamp="1721713602627">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="396" y="75" width="1413" height="918" key="find.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1721713602627" />
<state x="334" y="43" key="new project wizard" timestamp="1721289749033">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="334" y="43" key="new project wizard/0.0.1920.1040@0.0.1920.1040" timestamp="1721289749033" />
<state x="616" y="240" key="run.anything.popup" timestamp="1713949637344">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="616" y="240" key="run.anything.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1713949637344" />
<state x="962" y="230" width="672" height="678" key="search.everywhere.popup" timestamp="1721632960605">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="962" y="230" width="672" height="678" key="search.everywhere.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1721632960605" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/subsidy/util/DateFormatUtil.java</url>
<line>52</line>
<option name="timeStamp" value="148" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/subsidy/util/DateFormatUtil.java</url>
<line>54</line>
<option name="timeStamp" value="149" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/subsidy/util/DateFormatUtil.java</url>
<line>103</line>
<option name="timeStamp" value="150" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
<watches-manager>
<configuration name="SpringBootApplicationConfigurationType">
<watch expression="taskMap" />
<watch expression="service" />
<watch expression="session.isOpen()" />
<watch expression="session" />
<watch expression="!session.isOpen()" />
<watch expression="!taskMap.get(token).isCancelled()" />
<watch expression="null==activityList.getAccess()" />
<watch expression="0==activityList.getAccess()" />
<watch expression="response.body().string()" />
<watch expression="String.valueOf(classId)" />
<watch expression="getSecretVO" />
<watch expression=" getSecret()" />
<watch expression="multipartFile" />
</configuration>
</watches-manager>
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/subsidy_app$MeishuApplication.ic" NAME="MeishuApplication Coverage Results" MODIFIED="1704969314365" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
<SUITE FILE_PATH="coverage/subsidy$MeishuApplication.ic" NAME="MeishuApplication Coverage Results" MODIFIED="1695608404401" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
<SUITE FILE_PATH="coverage/subsidy_intership$MeishuApplication.ic" NAME="MeishuApplication Coverage Results" MODIFIED="1709017591561" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
</component>
</project>
\ No newline at end of file
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
<?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 https://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.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.subsidy</groupId>
<artifactId>subsidy</artifactId>
<version>0.0.1</version>
<name>subsidy</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
<mybatis-plus.version>3.3.0</mybatis-plus.version>
<generator.version>3.3.2</generator.version>
<swagger2.version>2.9.2</swagger2.version>
<fastjson.version>1.2.58</fastjson.version>
<jhash.version>2.0.0</jhash.version>
<poi-ooxml.version>3.13</poi-ooxml.version>
<dysmsapi.version>1.1.0</dysmsapi.version>
<sdk-core.version>4.4.6</sdk-core.version>
<lang3.version>3.9</lang3.version>
<druid.version>1.1.22</druid.version>
<itext-asian.version>5.2.0</itext-asian.version>
<itextpdf.version>5.4.1</itextpdf.version>
<java-jwt.version>3.10.3</java-jwt.version>
<jedis.version>3.3.0</jedis.version>
<collections.version>3.2.2</collections.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.322</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>vod_api</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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!-- <optional>true</optional>-->
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${generator.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.amdelamar</groupId>-->
<!-- <artifactId>jhash</artifactId>-->
<!-- <version>${jhash.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi-ooxml.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>${dysmsapi.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${sdk-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${lang3.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>${itext-asian.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>${java-jwt.version}</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.scilab.forge</groupId>
<artifactId>jlatexmath</artifactId>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${collections.version}</version>
</dependency>
<!--webSocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>net.polyv</groupId>
<artifactId>polyv-java-live-sdk</artifactId>
<version>2.0.4</version>
</dependency>
<!-- 阿里云 对象存储oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>1.13.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<build>
<finalName>subsidy-interShip</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.6.RELEASE</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.subsidy;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@MapperScan(basePackages = {"com.subsidy.mapper"})
@EnableScheduling
//@EnableCaching
@EnableAsync
@EnableTransactionManagement
public class MeishuApplication {
public static void main(String[] args) {
SpringApplication.run(MeishuApplication.class, args);
}
//@Bean
//public ServletRegistrationBean druidStatViewServlet() {
// //先配置管理后台的servLet,访问的入口为/druid/
// ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
// new StatViewServlet(), "/druid/*");
// // IP白名单 (没有配置或者为空,则允许所有访问)
// servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// // IP黑名单 (存在共同时,deny优先于allow)
// servletRegistrationBean.addInitParameter("deny", "");
// servletRegistrationBean.addInitParameter("loginUsername", "admin");
// servletRegistrationBean.addInitParameter("loginPassword", "yhkl1234");
// servletRegistrationBean.addInitParameter("resetEnable", "false");
// return servletRegistrationBean;
//}
}
package com.subsidy.common;
public class RedisPrefixConstant {
/**
* subsidyAdminister_accountName:AdministerDO 老师账号密码
*/
public static final String SUBSIDY_ADMINISTER_PREFIX = "subsidyAdminister:";
/**
* subsidyMember_companyId_accountName:MemberDO 学员账号密码
*/
public static final String SUBSIDY_COMPANY_MEMBER_PREFIX = "subsidyMember:";
///**
// *subsidy_memberLogin_memberId_userName_companyName_now : 学员端审计记录
// */
//public static final String SUBSIDY_MEMBER_LOGIN_PREFIX = "subsidy:memberLogin:";
/**
* subsidySmsCode_telephone:code 手机验证码
*/
public static final String SUBSIDY_TELEPHONE_PREFIX = "subsidySmsCode:";
/**
* subsidySettings:companyId:ClassHourDictDO 公司操作设置
*/
public static final String SUBSIDY_SETTINGS_PREFIX = "subsidySettings:";
/**
* subsidySignInfo:memberId:1:classId:12:20211223:long,do 学生签到数据
*/
public static final String SUBSIDY_SIGN_INFO_PREFIX = "subsidySignInfo:memberId:";
}
package com.subsidy.common;
import com.subsidy.common.configure.RemoteProperties;
import lombok.Data;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* 返回数据
*
* @author DengMin
* @date 2019/08/27 13:57
**/
@Data
@EnableConfigurationProperties(RemoteProperties.class)
public class ResponseData {
public static <T> ResponseVO<T> generateCreatedResponse(int code) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(RemoteProperties.getMessage(code))
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, String message) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(message)
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, T data) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(RemoteProperties.getMessage(code))
.data(data)
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, String message, T data) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(message)
.data(data)
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, String message, String path) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(message)
.path(path)
.build();
}
}
\ No newline at end of file
package com.subsidy.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResponseVO<T> {
private Integer code;
private String message;
private T data;
private String path;
}
\ No newline at end of file
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "sms")
public class AliyunSmsProperties {
private String product;
private String domain;
private String accessKeyId;
private String accessKeySecret;
}
package com.subsidy.common.configure;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
/**
* <p>
* JobFactory实例
* </p>
*
* @author DengMin
* @since 2020/12/9
*/
@Component
public class JobFactory extends AdaptableJobFactory {
private AutowireCapableBeanFactory factory;
public JobFactory(AutowireCapableBeanFactory factory) {
this.factory = factory;
}
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object job = super.createJobInstance(bundle);
factory.autowireBean(job);
return job;
}
}
package com.subsidy.common.configure;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.MultipartConfigElement;
@Configuration
public class MyTomcat {
@Value("${spring.server.port}")
private String port;
@Value("${spring.server.acceptorThreadCount}")
private String acceptorThreadCount;
@Value("${spring.server.minSpareThreads}")
private String minSpareThreads;
@Value("${spring.server.maxSpareThreads}")
private String maxSpareThreads;
@Value("${spring.server.maxThreads}")
private String maxThreads;
@Value("${spring.server.maxConnections}")
private String maxConnections;
@Value("${spring.server.protocol}")
private String protocol;
@Value("${spring.server.redirectPort}")
private String redirectPort;
@Value("${spring.server.compression}")
private String compression;
@Value("${spring.server.connectionTimeout}")
private String connectionTimeout;
@Value("${spring.server.MaxFileSize}")
private String MaxFileSize;
@Value("${spring.server.MaxRequestSize}")
private String MaxRequestSize;
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addConnectorCustomizers(new GwsTomcatConnectionCustomizer());
return tomcat;
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
factory.setMaxFileSize(MaxFileSize); // KB,MB
/// 总上传数据大小
factory.setMaxRequestSize(MaxRequestSize);
return factory.createMultipartConfig();
}
/**
*
* 默认http连接
*
* @version
* @author liuyi 2016年7月20日 下午7:59:41
*
*/
public class GwsTomcatConnectionCustomizer implements TomcatConnectorCustomizer {
public GwsTomcatConnectionCustomizer() {
}
@Override
public void customize(Connector connector) {
connector.setPort(Integer.valueOf(port));
connector.setAttribute("connectionTimeout", connectionTimeout);
connector.setAttribute("acceptorThreadCount", acceptorThreadCount);
connector.setAttribute("minSpareThreads", minSpareThreads);
connector.setAttribute("maxSpareThreads", maxSpareThreads);
connector.setAttribute("maxThreads", maxThreads);
connector.setAttribute("maxConnections", maxConnections);
connector.setAttribute("protocol", protocol);
connector.setAttribute("redirectPort", "redirectPort");
connector.setAttribute("compression", "compression");
}
}
}
package com.subsidy.common.configure;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.subsidy.common.handler.MetaHandler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author: tuyp
* @create: 2020-08-12 12:01
*/
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {
/**
* 分页
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType(DbType.MYSQL.getDb());
return paginationInterceptor;
}
//
// /**
// * 打印 sql
// */
// @Bean
// public PerformanceInterceptor performanceInterceptor() {
// PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// //格式化sql语句
// Properties properties = new Properties();
// properties.setProperty("format", "false");
// performanceInterceptor.setProperties(properties);
// return performanceInterceptor;
// }
/**
* 自动填充功能
* @return
*/
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "polyv")
public class PolyvConfig {
private String userId;
private String appId;
private String appSecret;
private String secretKey;
}
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "qxueyou")
public class QXueYouConfig {
private String appId;
private String securityKey;
private String url;
}
package com.subsidy.common.configure;
import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import javax.sql.DataSource;
/**
* <p>
* Quartz配置
* </p>
*
* @author DengMin
* @since 2020/12/8
*/
@Configuration
public class QuartzConfig {
@Autowired
private JobFactory jobFactory;
@Autowired
private DataSource dataSource;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setOverwriteExistingJobs(true);
schedulerFactoryBean.setStartupDelay(60);
schedulerFactoryBean.setJobFactory(jobFactory);
schedulerFactoryBean.setOverwriteExistingJobs(true);
schedulerFactoryBean.setStartupDelay(1);
schedulerFactoryBean.setDataSource(dataSource);
schedulerFactoryBean.setConfigLocation(new ClassPathResource("/application-quartz.properties"));
return schedulerFactoryBean;
}
@Bean
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
package com.subsidy.common.configure;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@EnableCaching
/**
* <p>
* Redis
* </p>
*
* @author DengMin
* @since 2020/12/14
*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
/**
* retemplate相关配置
* @param factory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 配置连接工厂
template.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
// 值采用json序列化
template.setValueSerializer(jacksonSeial);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
// 设置hash key 和value序列化模式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jacksonSeial);
template.afterPropertiesSet();
return template;
}
/**
* 对hash类型的数据操作
*
* @param redisTemplate
* @return
*/
@Bean
public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForHash();
}
/**
* 对redis字符串类型数据操作
*
* @param redisTemplate
* @return
*/
@Bean
public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForValue();
}
/**
* 对链表类型的数据操作
*
* @param redisTemplate
* @return
*/
@Bean
public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForList();
}
/**
* 对无序集合类型的数据操作
*
* @param redisTemplate
* @return
*/
@Bean
public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForSet();
}
/**
* 对有序集合类型的数据操作
*
* @param redisTemplate
* @return
*/
@Bean
public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForZSet();
}
}
\ No newline at end of file
package com.subsidy.common.configure;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 读取状态码
* </p>
*
* @author DengMin
* @date Created in 2020/08/24
*/
@Component
@ConfigurationProperties(prefix = "meishu")
@PropertySource(value = "classpath:code.properties", encoding = "UTF-8")
public class RemoteProperties {
private static Map<Integer, String> codeMessage = new HashMap<>();
public static String getMessage(Integer code) {
return codeMessage.get(code);
}
public Map<Integer, String> getCodeMessage() {
return codeMessage;
}
public void setCodeMessage(Map<Integer, String> codeMessage) {
RemoteProperties.codeMessage = codeMessage;
}
}
\ No newline at end of file
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "renshe")
public class RenSheConfig {
//接口地址
private String url;
//私钥
private String secretKey;
//普陀 正式接口
private String putuo;
}
package com.subsidy.common.configure;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
@Component
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
return restTemplate;
}
public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public WxMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
mediaTypes.add(MediaType.TEXT_HTML);
setSupportedMediaTypes(mediaTypes);
}
}
}
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "subsidy")
public class SubsidyConfig {
private String appId;
private String securityKey;
private String url;
}
package com.subsidy.common.configure;
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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.select()
.apis(RequestHandlerSelectors.basePackage("com.subsidy"))
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()
.title("顶岗实习端")
.description("接口文档规范")
.version("1.0")
// .contact(new Contact("啊啊啊啊","www.youkehulian.com","tcp@meishu.com"))
// .license("The Apache License")
// .licenseUrl("http://www.baidu.com")
.build());
}
}
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author: tuyp
* @create: 2020-06-01 16:46
*/
@Component
@Data
@ConfigurationProperties(prefix = "vod")
public class VODConfig {
private String appId;
private String secretId;
private String secretKey;
private String api;
private String region;
private Integer classId;
}
package com.subsidy.common.configure;
import com.subsidy.common.interceptor.AuthenticationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
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;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author DengMin
* @date 2020/07/06
**/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AuthenticationInterceptor authenticationInterceptor;
/**
* 跨域支持
*
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
// .allowCredentials(true)
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.maxAge(3600);
}
/**
* Swagger
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
* 鉴权
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor)
.excludePathPatterns("/static/*")
.addPathPatterns("/**");
}
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setMaxAge(3600L);
config.addAllowedOrigin("*");
config.addAllowedMethod("*");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
}
\ No newline at end of file
package com.subsidy.common.configure;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Aspect
@Component
@Order(1)
public class WebLogAspect {
private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.subsidy.controller.*.*(..))")//切入点描述 这个是controller包的切入点
public void controllerLog(){}//签名,可以理解成这个切入点的一个名称
@Pointcut("execution(public * com.subsidy.controller.*.*(..))")
public void serviceImplLog(){}
@Before("controllerLog()") //在切入点的方法run之前要干的
public void logBeforeController(JoinPoint joinPoint) {
// RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//这个RequestContextHolder是Springmvc提供来获得请求的东西
// HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
// 记录下请求内容
// logger.info("####requestUrl : " + request.getRequestURL().toString());
// logger.info("####requestParam : " + Arrays.toString(joinPoint.getArgs()));
}
// @Around("serviceImplLog()")
// public Object afterController(ProceedingJoinPoint proceedingJoinPoint) {
//
// Object result = null;
//
// try{
// result = proceedingJoinPoint.proceed();
// logger.info("====reulst"+result);
// }catch (Throwable e){
// MyException myException =(MyException)e;
// throw myException;
// }
// return result;
// }
}
\ No newline at end of file
package com.subsidy.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "wechat")
public class WechatConfig {
private String appId;
private String appSecret;
//private String msgUrl;
//
//private String templateId;
//
//private String agentId;
}
package com.subsidy.common.constant;
public class AttendanceConstant {
/**
* 创建预约api
*/
public static final String CREATE_TOPIC_URL = "https://open.api.roomis.com.cn/api/my/booking/spaces/{spaceId}/events";
/**
* 考勤api
*/
public static final String GET_ATTENDANCE_URL = "https://open.api.roomis.com.cn/api/attendance/{id}";
/**
* 创建人ID
*/
public static Long organizerId = 200000222L;
/**
* 开始时间
*/
public static String startTime = "07:00:00";
/**
* 结束时间
*/
public static String endTime = "21:00:00";
}
package com.subsidy.common.constant;
import lombok.Getter;
@Getter
public enum Code {
USERNAMENOTFOUND(1001, "用户不存在"),
BADCREDENTIALS(1002,"账户或者密码错误"),
ACCOUNTEXPIRED(1003,"账户过期"),
LOCKEDEXCEPTION(1004, "账户已锁定"),
DISABLEDEXCEPTION(1005,"账户已禁用"),
ACCESSDENIED(1006,"无权限访问"),
AUTHENTICATION(1007,"身份验证异常"),
NOHANDLERFOUND(1008,"找不到相应的视图处理器"),
PARAM_INVALID(1009, "参数不合法"),
TOKEN_EXCEPTION(1010, "无效的令牌"),
TOKEN_EXPIRED(1011, "当前账户已在其他设备登录"),
TOKEN_VERIFICATION_FAILED(1013, "令牌验证失败"),
OSS_ERROR(1012, "OSS文件上传异常"),
Network_ERROR(9000, "网络请求失败"),
SERVER_INTERNAL_ERROR(99999, "服务器内部错误"),
;
private Integer code;
private String message;
Code(Integer code, String message) {
this.code = code;
this.message = message;
}
}
package com.subsidy.common.constant;
public class CourseNotification {
public static final String UNSENT = "待发送";
public static final String SENT = "已发送";
}
package com.subsidy.common.constant;
import lombok.Getter;
@Getter
public enum SmsCode {
SIGN_IN("SMS_234409992", "签到通知"),
TEST("SMS_234414789", "测试通知"),
CLASS_START("SMS_228137810", "开课通知"),
ALL("SMS_228137810", "全部成员"),
NOT_SIGNED_IN("SMS_234409992","未签到成员"),
UNFINISHED("SMS_234414789","未完课成员");
private String type;
private String code;
SmsCode(String code, String type) {
this.code = code;
this.type = type;
}
}
package com.subsidy.common.constant;
import lombok.Getter;
@Getter
public class VodConstant {
/* 流量 */
public final static String FLUX = "Flux";
/* 带宽 */
public final static String BANDWIDTH = "Bandwidth";
/* 请求数 */
public final static String REQUESTS = "Requests";
/* 请求命中率 */
public final static String HITRATE = "Hitrate";
/* IP访问次数 */
public final static String IP_VISITS = "Ip_visits";
/* 带宽缓存key */
public final static String BANDWIDTH_CACHE_KEY = "CDNStatBandwidthCache";
/* 流量缓存key */
public final static String FLUX_CACHE_KEY = "CDNStatFluxCache";
/* 自定义缓存名称(ehcache.xml中的自定义规则名称) */
public final static String CDN_STAT_DETAILS_CACHE_NAME = "CDNStatDetails";
}
package com.subsidy.common.constant;
public class WxConstant {
/**
* app id
*/
public static final String APPID = "wx75ec06e9ce50ef73";
/**
* 秘钥
*/
public static final String SECRENT = "c039d32804278503474dfcf7cb3944b9";
/**
* 获取访问用户身份
*/
public static final String GETUSERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}";
/**
* 读取成员
*/
public static final String GET = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}";
/**
* 获取access_token
*/
public static final String GET_SUITE_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
/**
* 扫码登陆回调地址
*/
public static final String QR_REDIRECT_URL = "http://massadmin.youkehulian.com";
}
package com.subsidy.common.exception;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.subsidy.common.ResponseData;
import com.subsidy.common.ResponseVO;
import com.subsidy.common.configure.RemoteProperties;
import com.subsidy.common.constant.Code;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/**
* 异常处理
* @author DengMin
* @date 2020/07/14
**/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 自定义异常
* @param e
* @return
*/
@ExceptionHandler(value = HttpException.class)
public ResponseVO<T> handlerException(HttpServletRequest request, HttpException e) {
String message = RemoteProperties.getMessage(e.getCode());
if(StringUtils.isBlank(message)) {
message = e.getMessage();
}
String url = request.getRequestURI();
return ResponseData.generateCreatedResponse(e.getCode(), message, url);
}
/**
* 404
* @param request
* @return
*/
@ExceptionHandler(value = NoHandlerFoundException.class)
public ResponseVO<T> NoHandlerFoundException(HttpServletRequest request) {
String url = request.getRequestURI();
return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url);
}
/**
* 请求方式错误
* @param request
* @return
*/
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
public ResponseVO<T> HttpRequestMethodNotSupportedException(HttpServletRequest request) {
String url = request.getRequestURI();
return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url);
}
/**
* 参数不合法
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseVO<T> validateException(MethodArgumentNotValidException e){
final List<String> errList = new ArrayList<>();
e.getBindingResult().getAllErrors().stream().forEach(x -> {
errList.add(x.getDefaultMessage());
});
return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString());
}
/**
* JSON 序列化异常
* @param e
* @return
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseVO<T> exceptionHandler(HttpMessageNotReadableException e) {
log.error(e.getMessage());
return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage()+":{"+e.getMessage()+"}");
}
/**
* 校验异常
* @param e
* @return
*/
@ExceptionHandler(BindException.class)
public ResponseVO<T> BindException(BindException e){
final List<String> errList = new ArrayList<>();
e.getBindingResult().getAllErrors().stream().forEach(x -> {
errList.add(x.getDefaultMessage());
});
return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString());
}
/**
* 服务器内部错误
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResponseVO<T> serverInternalError(Exception e, HttpServletRequest request) {
String url = request.getRequestURI();
// log.error("path:"+url);
// log.error("---- error message: ---"+e.toString());
e.printStackTrace();
return ResponseData.generateCreatedResponse(Code.SERVER_INTERNAL_ERROR.getCode(), Code.SERVER_INTERNAL_ERROR.getMessage(), url);
}
}
\ No newline at end of file
package com.subsidy.common.exception;
import com.subsidy.common.configure.RemoteProperties;
/**
* 异常处理
* @author DengMin
* @date 2020/08/12
**/
public class HttpException extends RuntimeException{
private Integer code;
private String message;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public HttpException(Integer code) {
super(RemoteProperties.getMessage(code));
String message = RemoteProperties.getMessage(code);
this.message = message;
this.code = code;
}
public HttpException(Integer code, String message) {
this.message = message;
this.code = code;
}
}
package com.subsidy.common.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 填充配置
* @author DengMin
* @date 2020/07/21
**/
@Component
public class MetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createDate", LocalDateTime.now(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateDate", LocalDateTime.now(), metaObject);
}
}
package com.subsidy.common.interceptor;
import com.auth0.jwt.interfaces.Claim;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.subsidy.common.exception.HttpException;
import com.subsidy.mapper.AdministerMapper;
import com.subsidy.model.AdministerDO;
import com.subsidy.util.ConstantUtils;
import com.subsidy.util.JwtUtil;
import com.subsidy.util.Localstorage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Map;
/**
* <p>
* 鉴权拦截器
* </p>
*
* @author DengMin
* @since 2021/4/14
*/
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
@Autowired
private AdministerMapper administerMapper;
@Override
@CrossOrigin()
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 不需要进行拦截
if (!(handler instanceof HandlerMethod)) {
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
TimeRequired timeRequired = method.getAnnotation(TimeRequired.class);
if (timeRequired != null) {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour < 6 || hour >= 23 ) {
throw new HttpException(17001);
}
}
LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class);
if (methodAnnotation != null) {
String authorization = request.getHeader("Authorization");
if (!StringUtils.isBlank(authorization)) {
String token = authorization;
if (authorization.startsWith("Bearer")) {
token = authorization.replace("Bearer ", "");
}
/*Token不存在*/
if (token == null || !JwtUtil.verifyToken(token)) {
throw new HttpException(1010);
}
Map<String, Claim> claimMap = JwtUtil.getClaims(token);
if (claimMap != null) {
//String[] role = methodAnnotation.value();
String type = claimMap.get("type").asString();
if (ConstantUtils.ADMINISTER_TERMINATE.equals(type)) {
AdministerDO administerDO = administerMapper.selectById(claimMap.get("id").asLong());
if (administerDO != null) {
Localstorage.setUser(administerDO);
return true;
}
} else if (ConstantUtils.MOBILE_TERMINATE.equals(type)) {
/**
* 学生端设置单设备登录
*/
/* String tk = (String) redisUtil.get(ConstantUtils.MOBILE_TERMINATE+"_"+claimMap.get("id").asLong());
if(StringUtils.isNotBlank(tk)) {
if(tk.equals(token)) {
return true;
}
throw new HttpException(1011);
} else {
throw new HttpException(1010);
}*/
} else {
throw new HttpException(1010);
}
}
}
throw new HttpException(1010);
}
return true;
}
}
package com.subsidy.common.interceptor;
import java.lang.annotation.*;
/**
* <p>
* 自定义验证登陆注解
* </p>
*
* @author DengMin
* @since 2020/12/18
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LoginRequired {
//String[] value();
}
\ No newline at end of file
package com.subsidy.common.interceptor;
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface TimeRequired {
}
package com.subsidy.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 管理平台用户 前端控制器
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@RestController
@Api(tags = "管理平台用户")
@RequestMapping("/administer-do")
public class AdministerController {
}
package com.subsidy.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 管理员-项目映射表 前端控制器
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@RestController
@Api(tags = "管理员-项目映射表")
@RequestMapping("/administer-project-mapping-do")
public class AdministerProjectMappingController {
}
package com.subsidy.controller;
import com.subsidy.common.ResponseData;
import com.subsidy.common.ResponseVO;
import com.subsidy.dto.labor.AbnormalRecordDTO;
import com.subsidy.dto.labor.AddProjectDTO;
import com.subsidy.dto.labor.ProjectManageDTO;
import com.subsidy.dto.labor.ProjectsDTO;
import com.subsidy.model.AdministerDO;
import com.subsidy.model.ProjectDO;
import com.subsidy.model.ProjectMemberMappingDO;
import com.subsidy.service.LaborServiceDictService;
import com.subsidy.vo.labor.ProjectManageVO;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
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 io.swagger.annotations.Api;
/**
* <p>
* 劳务公司字典表 前端控制器
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@RestController
@Api(tags = "劳务公司字典表")
@RequestMapping("/laborServiceDict")
public class LaborServiceDictController {
@Autowired
private LaborServiceDictService laborServiceDictService;
@PostMapping("login")
@ApiOperation("登录 accountName password ")
public ResponseVO login(@RequestBody AdministerDO administerDO){
return ResponseData.generateCreatedResponse(0,laborServiceDictService.login(administerDO));
}
@PostMapping("projects")
@ApiOperation("项目列表 userId 当前用户id projectName pageSize pageNum")
public ResponseVO projects(@RequestBody ProjectsDTO projectsDTO){
return ResponseData.generateCreatedResponse(0,laborServiceDictService.projects(projectsDTO));
}
@PostMapping("addProject")
@ApiOperation("添加项目 userId projectName companyId laborServiceId salaryDate startDate endDate")
public ResponseVO addProject(@RequestBody AddProjectDTO addProjectDTO){
laborServiceDictService.addProject(addProjectDTO);
return ResponseData.generateCreatedResponse(0);
}
@PostMapping("updateProject")
@ApiOperation("修改项目 id userId projectName companyId laborServiceId salaryDate startDate endDate")
public ResponseVO updateProject(@RequestBody AddProjectDTO addProjectDTO){
laborServiceDictService.updateProject(addProjectDTO);
return ResponseData.generateCreatedResponse(0);
}
@PostMapping("deleteProject")
@ApiOperation("删除项目 id userId")
public ResponseVO deleteProject(@RequestBody AddProjectDTO addProjectDTO){
laborServiceDictService.deleteProject(addProjectDTO);
return ResponseData.generateCreatedResponse(0);
}
@PostMapping("projectManage")
@ApiOperation("详情--项目管理 projectId 项目id userInfo 姓名或手机号")
public ResponseVO projectManage(@RequestBody ProjectManageDTO projectManageDTO){
return ResponseData.generateCreatedResponse(0,laborServiceDictService.projectManage(projectManageDTO));
}
@PostMapping("updateJobName")
@ApiOperation("id : projectManage接口返回的mappingId jobName 修改职位")
public ResponseVO updateJobName(@RequestBody ProjectMemberMappingDO projectMemberMappingDO){
laborServiceDictService.updateJobName(projectMemberMappingDO);
return ResponseData.generateCreatedResponse(0);
}
@PostMapping("fireMember")
@ApiOperation("操作离职 id : projectManage接口返回的mappingId ")
public ResponseVO fireMember(@RequestBody ProjectMemberMappingDO projectMemberMappingDO){
laborServiceDictService.fireMember(projectMemberMappingDO);
return ResponseData.generateCreatedResponse(0);
}
@PostMapping("abnormalRecord")
@ApiOperation("异动记录 projectId 项目id pageSize pageNum userInfo 姓名或者手机号")
public ResponseVO abnormalRecord(@RequestBody AbnormalRecordDTO abnormalRecordDTO ){
return ResponseData.generateCreatedResponse(0,laborServiceDictService.abnormalRecord(abnormalRecordDTO));
}
}
package com.subsidy.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 前端控制器
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@RestController
@Api(tags = "")
@RequestMapping("/member-do")
public class MemberController {
}
package com.subsidy.controller;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.subsidy.common.ResponseData;
import com.subsidy.common.ResponseVO;
import com.subsidy.vo.oss.GetSecretVO;
import com.subsidy.vo.oss.UploadFileVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "oss")
@RestController
@RequestMapping("/oss")
public class OssController {
public static final String keyId = "LTAI5tPAH7P7WQVeowo517BE";
public static final String secret = "0ueqhIfdAZyw5lWlBVSLpAxTtx37RY";
@Value("${spring.profiles.active}")
private String env;
@PostMapping("getSecret")
@ApiOperation("oss秘钥")
public ResponseVO getSecret() {
GetSecretVO getSecretVO = new GetSecretVO();
getSecretVO.setKey(keyId);
getSecretVO.setSecret(secret);
return ResponseData.generateCreatedResponse(0, getSecretVO);
}
@PostMapping("uploadFile")
@ApiOperation("分片上传")
public ResponseVO fenpian(@RequestParam("file") MultipartFile file) {
UploadFileVO uploadFileVO = new UploadFileVO();
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = keyId;
String accessKeySecret = secret;
// 填写Bucket名称,例如examplebucket。
// String bucketName = "zhongzhi-cms";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String objectName = System.currentTimeMillis() + "_" + file.getOriginalFilename();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
if (env.equals("dev")) {
env = "ykhl-bigger-test";
}
if (env.equals("prod")) {
env = "ykhl-bigger";
}
try {
// 创建InitiateMultipartUploadRequest对象。
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(env, objectName);
// 如果需要在初始化分片时设置请求头,请参考以下示例代码。
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(file.getContentType());
metadata.setContentDisposition("inline");
// 如果需要在初始化分片时设置请求头,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// 指定该Object的网页缓存行为。
// metadata.setCacheControl("no-cache");
// 指定该Object被下载时的名称。
// metadata.setContentDisposition("attachment;filename=oss_MultipartUpload.txt");
// 指定该Object的内容编码格式。
// metadata.setContentEncoding(OSSConstants.DEFAULT_CHARSET_NAME);
// 指定初始化分片上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// 指定上传该Object的每个part时使用的服务器端加密方式。
// metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// 指定Object的加密算法。如果未指定此选项,表明Object使用AES256加密算法。
// metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_DATA_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// 指定KMS托管的用户主密钥。
// metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID, "9468da86-3509-4f8d-a61e-6eab1eac****");
// 指定Object的存储类型。
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);
// 指定Object的对象标签,可同时设置多个标签。
// metadata.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
// request.setObjectMetadata(metadata);
metadata.setHeader("x-oss-force-download", false);
request.setObjectMetadata(metadata);
// 初始化分片。
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
// 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
String uploadId = upresult.getUploadId();
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
List<PartETag> partETags = new ArrayList<PartETag>();
// 每个分片的大小,用于计算文件有多少个分片。单位为字节。
final long partSize = 1 * 1024 * 1024L; //1 MB。
// 根据上传的数据大小计算分片数。以本地文件为例,说明如何通过File.length()获取上传数据的大小。
// final File sampleFile = new File("D:\\localpath\\examplefile.txt");
// long fileLength = sampleFile.length();
// int partCount = (int) (fileLength / partSize);
// if (fileLength % partSize != 0) {
// partCount++;
// }
long fileLength = file.getSize();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
}
// 遍历分片上传。
for (int i = 0; i < partCount; i++) {
long startPos = i * partSize;
long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(env);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(uploadId);
// 设置上传的分片流。
// 以本地文件为例说明如何创建FIleInputstream,并通过InputStream.skip()方法跳过指定数据。
InputStream instream = file.getInputStream();
instream.skip(startPos);
uploadPartRequest.setInputStream(instream);
// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
uploadPartRequest.setPartSize(curPartSize);
// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
uploadPartRequest.setPartNumber(i + 1);
// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
// 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
partETags.add(uploadPartResult.getPartETag());
}
// 创建CompleteMultipartUploadRequest对象。
// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
CompleteMultipartUploadRequest completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(env, objectName, uploadId, partETags);
// 如果需要在完成分片上传的同时设置文件访问权限,请参考以下示例代码。
// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.Private);
// 指定是否列举当前UploadId已上传的所有Part。仅在Java SDK为3.14.0及以上版本时,支持通过服务端List分片数据来合并完整文件时,将CompleteMultipartUploadRequest中的partETags设置为null。
// Map<String, String> headers = new HashMap<String, String>();
// 如果指定了x-oss-complete-all:yes,则OSS会列举当前UploadId已上传的所有Part,然后按照PartNumber的序号排序并执行CompleteMultipartUpload操作。
// 如果指定了x-oss-complete-all:yes,则不允许继续指定body,否则报错。
// headers.put("x-oss-complete-all","yes");
// completeMultipartUploadRequest.setHeaders(headers);
// 完成分片上传。
CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
uploadFileVO.setUrl(completeMultipartUploadResult.getLocation());
System.out.println(completeMultipartUploadResult.getLocation());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return ResponseData.generateCreatedResponse(0, uploadFileVO);
}
}
package com.subsidy.controller;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 项目表 前端控制器
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@RestController
@Api(tags = "项目表")
@RequestMapping("/project")
public class ProjectController {
}
package com.subsidy.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 项目人员映射表 前端控制器
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@RestController
@Api(tags = "项目人员映射表")
@RequestMapping("/project-member-mapping-do")
public class ProjectMemberMappingController {
}
package com.subsidy.dto.administer;
import lombok.Data;
@Data
public class VerifyCodeDTO {
private String telephone;
private String verifyCode;
}
package com.subsidy.dto.labor;
import lombok.Data;
@Data
public class AbnormalRecordDTO {
private Long projectId;
private String userInfo;
private Integer pageSize;
private Integer pageNum;
}
package com.subsidy.dto.labor;
import com.subsidy.model.ProjectDO;
import lombok.Data;
@Data
public class AddProjectDTO extends ProjectDO {
private Long userId;
}
package com.subsidy.dto.labor;
import lombok.Data;
@Data
public class ProjectManageDTO {
private Long projectId;
private String userInfo;
private Integer pageSize;
private Integer pageNum;
}
package com.subsidy.dto.labor;
import lombok.Data;
@Data
public class ProjectsDTO {
private Long userId;
private Integer pageSize;
private Integer pageNum;
private String projectName;
}
package com.subsidy.mapper;
import com.subsidy.model.AdministerDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* 管理平台用户 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Repository
public interface AdministerMapper extends BaseMapper<AdministerDO> {
}
package com.subsidy.mapper;
import com.subsidy.model.AdministerProjectMappingDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* 管理员-项目映射表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Repository
public interface AdministerProjectMappingMapper extends BaseMapper<AdministerProjectMappingDO> {
}
package com.subsidy.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.subsidy.model.LaborServiceDictDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.subsidy.vo.labor.AbnormalRecordVO;
import com.subsidy.vo.labor.ProjectManageVO;
import com.subsidy.vo.labor.ProjectsVO;
import org.springframework.stereotype.Repository;
/**
* <p>
* 劳务公司字典表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Repository
public interface LaborServiceDictMapper extends BaseMapper<LaborServiceDictDO> {
IPage<ProjectsVO> projects(IPage iPage,String projectName, Long administerId);
IPage<ProjectManageVO> projectManage(IPage iPage, Long projectId, String userInfo);
IPage<AbnormalRecordVO> abnormalRecord(IPage page, Long projectId, String userInfo);
}
package com.subsidy.mapper;
import com.subsidy.model.MemberDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Repository
public interface MemberMapper extends BaseMapper<MemberDO> {
}
package com.subsidy.mapper;
import com.subsidy.model.ProjectDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* 项目表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Repository
public interface ProjectMapper extends BaseMapper<ProjectDO> {
}
package com.subsidy.mapper;
import com.subsidy.model.ProjectMemberMappingDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 项目人员映射表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Repository
public interface ProjectMemberMappingMapper extends BaseMapper<ProjectMemberMappingDO> {
}
package com.subsidy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.subsidy.model.ProjectSalaryHistoryDO;
import org.springframework.stereotype.Repository;
/**
* <p>
* 工资单历史表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2024-07-11
*/
@Repository
public interface ProjectSalaryHistoryMapper extends BaseMapper<ProjectSalaryHistoryDO> {
}
package com.subsidy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.subsidy.model.SmsVerifyCodeDO;
import org.springframework.stereotype.Repository;
/**
* <p>
* 短信验证码记录表 Mapper 接口
* </p>
*
* @author DengMin
* @since 2021-10-14
*/
@Repository
public interface SmsVerifyCodeMapper extends BaseMapper<SmsVerifyCodeDO> {
}
package com.subsidy.model;
import com.subsidy.util.BaseModel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 管理平台用户
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("administer")
public class AdministerDO extends BaseModel {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 手机号
*/
private String telephone;
/**
* 账号
*/
private String accountName;
/**
* 密码
*/
private String password;
/**
* 公司id
*/
private Long companyId;
/**
* 成员名称
*/
private String userName;
/**
* 头像
*/
private String img;
/**
* 1:启用 0:禁用
*/
private String status;
/**
* 角色 0:应用 1:企业关联客户 2:中心 3:企业唯一账号,4:院校唯一账号 5:院校关联账号 6:伙伴唯一账号 7:伙伴关联账号
*/
private Integer role;
/**
* 备注
*/
private String remark;
}
package com.subsidy.model;
import com.subsidy.util.BaseModel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 管理员-项目映射表
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("administer_project_mapping")
public class AdministerProjectMappingDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long administerId;
private Long projectId;
}
package com.subsidy.model;
import com.subsidy.util.BaseModel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 劳务公司字典表
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("labor_service_dict")
public class LaborServiceDictDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String laborServiceName;
}
package com.subsidy.model;
import com.subsidy.util.BaseModel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("member")
public class MemberDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 院校id
*/
private Long academyId;
/**
* 公司名 弃用
*/
private Long companyId;
/**
* 姓名
*/
private String userName;
/**
* 账号
*/
private String accountName;
/**
* 英文名
*/
private String accountNameEn;
/**
* 邮箱
*/
private String email;
/**
* 工号
*/
private String workNo;
/**
* 入职时间
*/
private String inductionDate;
/**
* 手机号
*/
private String telephone;
/**
* 密码
*/
private String password;
/**
* 性别
*/
private String gender;
/**
* 头像
*/
private String image;
/**
* 人脸核验--照片
*/
private String checkImage;
/**
* 采集时间
*/
private LocalDateTime checkTime;
/**
* 身份证号
*/
private String idCard;
/**
* 身份证照片
*/
private String idCardPhoto;
/**
* 启用/冻结
*/
private String status;
/**
* 是否登陆过 1 是 0 不是
*/
private Integer firstLogin;
/**
* QQ号
*/
private String qqNo;
/**
* 微信账号
*/
private String wechat;
/**
* 实习状态
*/
private String practiceStatus;
/**
* 学院id
*/
private Long collegeId;
/**
* 专业id
*/
private String major;
/**
* 入学年份
*/
private String enrollmentYear;
/**
* 工资账户
*/
private String payrollAccount;
/**
* 开户行
*/
private String bank;
/**
* 0:学生 2:职工 3:人才
*/
private Integer memberType;
/**
* 微信的openId
*/
private String openId;
}
package com.subsidy.model;
import com.subsidy.util.BaseModel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 项目表
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("project")
public class ProjectDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 项目名称
*/
private String projectName;
/**
* 关联企业
*/
private Long companyId;
/**
* 伙伴id
*/
private Long laborServiceId;
/**
* 薪资发放日
*/
private String salaryDate;
/**
* 开始时间
*/
private String startDate;
/**
* 结束时间
*/
private String endDate;
}
package com.subsidy.model;
import com.subsidy.util.BaseModel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 项目人员映射表
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("project_member_mapping")
public class ProjectMemberMappingDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 人员id
*/
private Long memberId;
/**
* 项目id
*/
private Long projectId;
/**
* 职位名称
*/
private String jobName;
/**
* 排序
*/
private Integer orderNo;
/**
* 1:在职 0 已离职
*/
private Integer status;
}
package com.subsidy.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.subsidy.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 工资单历史表
* </p>
*
* @author Tuyp
* @since 2024-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("project_salary_history")
public class ProjectSalaryHistoryDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 人员id
*/
private Long memberId;
/**
* 项目id
*/
private Long projectId;
/**
* 工资
*/
private String salary;
/**
* 备注
*/
private String salaryMark;
/**
* 开户行
*/
private String bank;
/**
* 账户
*/
private String payrollAccount;
}
package com.subsidy.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.subsidy.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 短信验证码记录表
* </p>
*
* @author DengMin
* @since 2021-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sms_verify_code")
public class SmsVerifyCodeDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 手机号
*/
private String telephone;
/**
* 验证码
*/
private String verifyCode;
}
package com.subsidy.service;
import com.subsidy.model.AdministerProjectMappingDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 管理员-项目映射表 服务类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
public interface AdministerProjectMappingService extends IService<AdministerProjectMappingDO> {
}
package com.subsidy.service;
import com.subsidy.model.AdministerDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 管理平台用户 服务类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
public interface AdministerService extends IService<AdministerDO> {
}
package com.subsidy.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.subsidy.common.configure.VODConfig;
import com.subsidy.dto.labor.AbnormalRecordDTO;
import com.subsidy.dto.labor.AddProjectDTO;
import com.subsidy.dto.labor.ProjectManageDTO;
import com.subsidy.dto.labor.ProjectsDTO;
import com.subsidy.model.AdministerDO;
import com.subsidy.model.LaborServiceDictDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.subsidy.model.ProjectDO;
import com.subsidy.model.ProjectMemberMappingDO;
import com.subsidy.vo.labor.AbnormalRecordVO;
import com.subsidy.vo.labor.LoginVO;
import com.subsidy.vo.labor.ProjectManageVO;
import com.subsidy.vo.labor.ProjectsVO;
/**
* <p>
* 劳务公司字典表 服务类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
public interface LaborServiceDictService extends IService<LaborServiceDictDO> {
LoginVO login(AdministerDO administerDO);
IPage<ProjectsVO> projects(ProjectsDTO projectsDTO);
void addProject(AddProjectDTO addProjectDTO);
void updateProject(AddProjectDTO addProjectDTO);
void deleteProject(AddProjectDTO addProjectDTO);
IPage<ProjectManageVO> projectManage(ProjectManageDTO projectManageDTO);
void updateJobName(ProjectMemberMappingDO projectMemberMappingDO);
void fireMember(ProjectMemberMappingDO projectMemberMappingDO);
IPage<AbnormalRecordVO> abnormalRecord(AbnormalRecordDTO abnormalRecordDTO);
}
package com.subsidy.service;
import com.subsidy.model.MemberDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
public interface MemberService extends IService<MemberDO> {
}
package com.subsidy.service;
import com.subsidy.model.ProjectMemberMappingDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 项目人员映射表 服务类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
public interface ProjectMemberMappingService extends IService<ProjectMemberMappingDO> {
}
package com.subsidy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.subsidy.model.ProjectDO;
/**
* <p>
* 项目表 服务类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
public interface ProjectService extends IService<ProjectDO> {
}
package com.subsidy.service.impl;
import com.subsidy.model.AdministerProjectMappingDO;
import com.subsidy.mapper.AdministerProjectMappingMapper;
import com.subsidy.service.AdministerProjectMappingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 管理员-项目映射表 服务实现类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Service
public class AdministerProjectMappingServiceImpl extends ServiceImpl<AdministerProjectMappingMapper, AdministerProjectMappingDO> implements AdministerProjectMappingService {
}
package com.subsidy.service.impl;
import com.subsidy.model.AdministerDO;
import com.subsidy.mapper.AdministerMapper;
import com.subsidy.service.AdministerService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 管理平台用户 服务实现类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Service
public class AdministerServiceImpl extends ServiceImpl<AdministerMapper, AdministerDO> implements AdministerService {
}
package com.subsidy.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.subsidy.common.exception.HttpException;
import com.subsidy.dto.labor.AbnormalRecordDTO;
import com.subsidy.dto.labor.AddProjectDTO;
import com.subsidy.dto.labor.ProjectManageDTO;
import com.subsidy.dto.labor.ProjectsDTO;
import com.subsidy.mapper.*;
import com.subsidy.model.*;
import com.subsidy.service.LaborServiceDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.service.ProjectService;
import com.subsidy.vo.labor.AbnormalRecordVO;
import com.subsidy.vo.labor.LoginVO;
import com.subsidy.vo.labor.ProjectManageVO;
import com.subsidy.vo.labor.ProjectsVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 劳务公司字典表 服务实现类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Service
public class LaborServiceDictServiceImpl extends ServiceImpl<LaborServiceDictMapper, LaborServiceDictDO> implements LaborServiceDictService {
@Autowired
private AdministerMapper administerMapper;
@Autowired
private ProjectMapper projectMapper;
@Autowired
private AdministerProjectMappingMapper administerProjectMappingMapper;
@Autowired
private ProjectMemberMappingMapper projectMemberMappingMapper;
public LoginVO login(AdministerDO administerDO) {
LoginVO loginVO = new LoginVO();
List<Long> longs = new ArrayList<>();
longs.add(6L);
longs.add(7L);
AdministerDO administerDO1 = administerMapper.selectOne(new QueryWrapper<AdministerDO>()
.lambda()
.eq(AdministerDO::getAccountName, administerDO.getAccountName())
.in(AdministerDO::getRole, longs));
BeanUtils.copyProperties(administerDO1, loginVO);
return loginVO;
}
public IPage<ProjectsVO> projects(ProjectsDTO projectsDTO) {
Page page = new Page(projectsDTO.getPageNum(), projectsDTO.getPageSize());
IPage<ProjectsVO> projects = this.baseMapper.projects(page, projectsDTO.getProjectName(), projectsDTO.getUserId());
return projects;
}
public void addProject(AddProjectDTO addProjectDTO) {
int count = projectMapper.selectCount(new QueryWrapper<ProjectDO>()
.lambda()
.eq(ProjectDO::getCompanyId, addProjectDTO.getCompanyId())
.eq(ProjectDO::getLaborServiceId, addProjectDTO.getLaborServiceId())
.eq(ProjectDO::getProjectName, addProjectDTO.getProjectName()));
if (count > 0) {
throw new HttpException(31002);
}
ProjectDO projectDO = new ProjectDO();
BeanUtils.copyProperties(addProjectDTO, projectDO);
projectMapper.insert(projectDO);
//添加管理员账户映射关系
AdministerProjectMappingDO administerProjectMappingDO = new AdministerProjectMappingDO();
administerProjectMappingDO.setProjectId(projectDO.getId());
administerProjectMappingDO.setAdministerId(addProjectDTO.getUserId());
administerProjectMappingMapper.insert(administerProjectMappingDO);
}
public void updateProject(AddProjectDTO addProjectDTO) {
int count = projectMapper.selectCount(new QueryWrapper<ProjectDO>()
.lambda()
.eq(ProjectDO::getCompanyId, addProjectDTO.getCompanyId())
.eq(ProjectDO::getLaborServiceId, addProjectDTO.getLaborServiceId())
.eq(ProjectDO::getProjectName, addProjectDTO.getProjectName())
.ne(ProjectDO::getId, addProjectDTO.getId()));
if (count > 0) {
throw new HttpException(31002);
}
ProjectDO projectDO = new ProjectDO();
BeanUtils.copyProperties(addProjectDTO, projectDO);
projectMapper.updateById(projectDO);
}
public void deleteProject(AddProjectDTO addProjectDTO) {
projectMapper.deleteById(addProjectDTO.getId());
administerProjectMappingMapper.delete(new QueryWrapper<AdministerProjectMappingDO>()
.lambda()
.eq(AdministerProjectMappingDO::getAdministerId, addProjectDTO.getUserId())
.eq(AdministerProjectMappingDO::getProjectId, addProjectDTO.getId()));
}
public IPage<ProjectManageVO> projectManage(ProjectManageDTO projectManageDTO) {
Page page = new Page(projectManageDTO.getPageNum(), projectManageDTO.getPageSize());
return this.baseMapper.projectManage(page, projectManageDTO.getProjectId(), projectManageDTO.getUserInfo());
}
public void updateJobName(ProjectMemberMappingDO projectMemberMappingDO) {
projectMemberMappingMapper.updateById(projectMemberMappingDO);
}
public void fireMember(ProjectMemberMappingDO projectMemberMappingDO) {
projectMemberMappingMapper.deleteById(projectMemberMappingDO.getId());
}
public IPage<AbnormalRecordVO> abnormalRecord(AbnormalRecordDTO abnormalRecordDTO) {
Page page = new Page(abnormalRecordDTO.getPageNum(), abnormalRecordDTO.getPageSize());
return this.baseMapper.abnormalRecord(page,abnormalRecordDTO.getProjectId(),abnormalRecordDTO.getUserInfo());
}
}
package com.subsidy.service.impl;
import com.subsidy.model.MemberDO;
import com.subsidy.mapper.MemberMapper;
import com.subsidy.service.MemberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberDO> implements MemberService {
}
package com.subsidy.service.impl;
import com.subsidy.model.ProjectMemberMappingDO;
import com.subsidy.mapper.ProjectMemberMappingMapper;
import com.subsidy.service.ProjectMemberMappingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 项目人员映射表 服务实现类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Service
public class ProjectMemberMappingServiceImpl extends ServiceImpl<ProjectMemberMappingMapper, ProjectMemberMappingDO> implements ProjectMemberMappingService {
}
package com.subsidy.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.mapper.ProjectMapper;
import com.subsidy.model.ProjectDO;
import com.subsidy.service.ProjectService;
import org.springframework.stereotype.Service;
/**
* <p>
* 项目表 服务实现类
* </p>
*
* @author Tuyp
* @since 2024-07-18
*/
@Service
public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, ProjectDO> implements ProjectService {
}
package com.subsidy.util;
import com.tencentcloudapi.captcha.v20190722.CaptchaClient;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import javax.servlet.http.HttpServletRequest;
public class ActivityDetectionUtils {
/**
* 活跃度检测工具类
*
* @throws Exception
*/
public static DescribeCaptchaResultResponse activityDetection(HttpServletRequest request, String ticket, String randstr) {
try {
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential(ConstantUtils.SECRET_ID, ConstantUtils.SECRET_KEY);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("captcha.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
CaptchaClient client = new CaptchaClient(cred, "", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest();
req.setCaptchaType(9L);
String ip = IpAddressUtil.getIpAddress(request);
req.setUserIp(ip);
req.setRandstr(randstr);
req.setCaptchaAppId(ConstantUtils.CAPTCHAAPP_ID);
req.setAppSecretKey(ConstantUtils.APP_SECRET_KEY);
req.setBusinessId(ConstantUtils.BUSINESS_ID);
req.setTicket(ticket);
// 返回的resp是一个DescribeCaptchaResultResponse的实例,与请求对象对应
return client.DescribeCaptchaResult(req);
} catch (Exception e) {
}
return null;
}
}
package com.subsidy.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.imageio.stream.FileImageInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Base64Util {
/**
* 字符串转图片
* @param base64Str
* @return
*/
public static byte[] decode(String base64Str){
byte[] b = null;
BASE64Decoder decoder = new BASE64Decoder();
try {
b = decoder.decodeBuffer(replaceEnter(base64Str));
} catch (IOException e) {
e.printStackTrace();
}
return b;
}
/**
* 图片转字符串
* @param image
* @return
*/
public static String encode(byte[] image){
BASE64Encoder decoder = new BASE64Encoder();
return replaceEnter(decoder.encode(image));
}
public static void main(String[] args) {
System.out.println(encode("http://ykhl-bigger.oss-cn-beijing.aliyuncs.com/2023-02-1618cb936b-4825-429c-9fdd-dd9d0de97ed7.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"));
}
public static String encode(String uri){
BASE64Encoder encoder = new BASE64Encoder();
return replaceEnter(encoder.encode(uri.getBytes()));
}
/**
*
* @path 图片路径
* @return
*/
public static byte[] imageTobyte(String path){
byte[] data = null;
FileImageInputStream input = null;
try {
input = new FileImageInputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while((numBytesRead = input.read(buf)) != -1){
output.write(buf, 0, numBytesRead);
}
data = output.toByteArray();
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
public static String replaceEnter(String str){
String reg ="[\n-\r]";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
return m.replaceAll("");
}
}
\ No newline at end of file
package com.subsidy.util;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public abstract class BaseModel {
/**
* 创建时间
*/
@JsonIgnore
@TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "create_date", fill = FieldFill.INSERT)
private LocalDateTime createDate;
/**
* 更新时间
*/
@JsonIgnore
@TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "update_date", fill = FieldFill.UPDATE)
private LocalDateTime updateDate;
/**
* 删除时间
*/
@JsonIgnore
@TableLogic
private LocalDateTime deleteDate;
}
package com.subsidy.util;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
* Mybatis-Plus CodeGenerator
*
* @author DengMin
* @date 2020/07/02
**/
public class CodeGenerator {
public static String scanner(String tip) {
StringBuilder help = new StringBuilder();
help.append("1.生成全部表 2.输入需要生成表名");
System.out.println(help.toString());
Scanner scanner = new Scanner(System.in);
Integer ipt = Integer.valueOf(scanner.next());
if(ipt == 1) {
return "";
} else if(ipt == 2) {
StringBuilder help1 = new StringBuilder();
help1.append("请输入" + tip + ":");
System.out.println(help1.toString());
Scanner scanner1 = new Scanner(System.in);
if (scanner1.hasNext()) {
String name = scanner1.next();
if (StringUtils.isNotEmpty(name)) {
return name;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
return scanner(tip);
}
public static void main(String[] args) {
final ResourceBundle rb = ResourceBundle.getBundle("mybatis-plus");
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + rb.getString("outputDir"));
gc.setOpen(false);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
gc.setAuthor(rb.getString("author"));
gc.setMapperName("%sMapper");
gc.setEntityName("%sDO");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setUrl(rb.getString("url"));
dsc.setDriverName(rb.getString("driverName"));
dsc.setUsername(rb.getString("userName"));
dsc.setPassword(rb.getString("password"));
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(rb.getString("setParent"));
pc.setController("controller");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setEntity("model");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
return System.getProperty("user.dir")+ rb.getString("mapperPath") + tableInfo.getMapperName() + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperEntityClass(BaseModel.class);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
String [] tables = scanner("表名,多个英文逗号分割").split(",");
if(StringUtils.isNotBlank(tables[0])) {
strategy.setInclude(tables);
}
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
\ No newline at end of file
package com.subsidy.util;
/**
* 枚举类
*/
public class ConstantUtils {
public static final String DELETE_SUCCESS = "删除成功";
public static final String UPLOAD_FAIL = "上传失败";
public static final String ADD_SUCCESS = "新增成功";
public static final String COMMIT_SUCCESS = "提交成功";
public static final String SUCCESS_SEND_OUT = "发送成功";
public static final String FAIL_SEND_OUT = "发送失败";
public static final String SAVE_SUCCESS = "保存成功";
public static final String SHARE_SUCCESS = "共享成功";
public static final String SUBMIT_SUCCESS = "提交成功";
public static final String SUCCESS_UPDATE = "更新成功";
public static final String FAIL_UPDATE = "更新失败";
public static final String SET_SUCCESS = "设置成功";
public static final String SUCCESS_VERIFY = "验证成功";
public static final String FAIL_VERIFY = "验证失败";
public static final String COMPANY_NAME = "TeachAI";
public static final String ALREADY_DONE = "已完成";
public static final String ALREADY_RECOMMEND = "已推荐";
public static final String VERIFY_NAME = "有课互联";
public static final String NOTICE_NAME = "有课进度通知";
public static final String TECH_NAME = "有课互联学习平台";
public static final String PUBLISH_SUCCESS = "发布成功";
public static final String COMPRESS_SUCCESS = "压缩成功";
public static final String CHECK_STATUS = "审核通过";
/**
* 短信模板---验证模板
*/
public static final String TEMPLATE_CODE = "SMS_190945394";
/**
* 短信 地域ID
*/
public static final String REGION_ID = "cn-hangzhou";
/**
* 短信 RAM账号AccessKey ID
*/
public static final String ACCESS_KEY_ID = "LTAI5tPAH7P7WQVeowo517BE";
/**
* 短信 RAM账号AccessKey Secret
*/
public static final String SECRET = "0ueqhIfdAZyw5lWlBVSLpAxTtx37RY";
/**
* 腾讯云点播视频转码模板
*/
public static final Long TEMPLATE_VOD = 100030L;
/**
* 手机端token
*/
public static final String MOBILE_TERMINATE = "mobile";
public static final String ADMINISTER_TERMINATE = "administer";
/**
* API密钥--微信参数
*/
public static final String SECRET_ID = "AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2";
public static final String SECRET_KEY = "vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E";
/**
* 图形验证码
*/
public static final Long CAPTCHAAPP_ID = 2013197365L;
public static final String APP_SECRET_KEY = "04ABoF0ZVuMje8NP84DE5Sg**";
public static final Long BUSINESS_ID = 1L;
public static final String UTF8 = "UTF-8";
/**
* 保利威视
*/
public static final String POLYV_VIEWLOG_2 = "http://api.polyv.net/live/v1/statistics/{channelId}/viewlog";
/**
* 推送人社局图片格式
*/
public static final String IMAGE_FORMAT = "?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg";
}
package com.subsidy.util;
import java.awt.SystemTray;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Date;
/**
* 处理时间工具
*
* @author DengMin
* @date 2019/08/27 13:56
**/
public class DateFormatUtil {
public final static String YEAR = "yyyy";
public final static String FMT_sdf14_L = "yyyy-MM-dd HH:mm:ss";
public final static String FMT_sdf_yMd = "yyyy-MM-dd";
public final static String FMT_sdf_yM = "yyyy-M";
public final static String FMT_sdf_yMM = "yyyy-MM";
public final static String FMT_sdf_Hm = "H:mm";
public final static String FMT_sdf_HHmm = "HH:mm";
public final static String cron = "s m H d M ? yyyy";
/**
* Date转String,自定义格式
* @param date
* @param pattern
* @return
*/
public static String format(Date date, String pattern) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* LocalDateTime转String,自定义格式
* @param localDateTime
* @param pattern
* @return
*/
public static String format(LocalDateTime localDateTime, String pattern) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(localDateTime);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* String转Date,自定义格式
* @param date
* @param pattern
* @return
*/
public static Date parse(String date, String pattern) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(date);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 比较两个时间
* .after 大于
* .before 小于
* @param d1
* @param d2
* @return
*/
public static boolean compare(Date d1, Date d2 ) {
return !d1.after(d2);
}
/**
* Data转Cron
* @param date
* @return
*/
public static String getCron(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("s m H d M ? yyyy");
return sdf.format(date);
}
public static Date localDateTimeToDate(LocalDateTime dateTime) {
if(dateTime == null) {
return null;
}
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = dateTime.atZone(zoneId);
return Date.from(zdt.toInstant());
}
public static LocalDateTime secondToLocalDateTime(Long second) {
if(second != null) {
return LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8));
}
return LocalDateTime.now();
}
public static Long LocalDateTimeToSecond(LocalDateTime localDateTime) {
if(localDateTime != null) {
return localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
}
return System.currentTimeMillis();
}
}
package com.subsidy.util;
public class DudaoConstant {
/**
* POST-1:班级基本信息信息采集接口
*/
public static final String POST_1 = "DUDAO_POST_1_insertClassBasicInformation";
/**
* POST-2:学时信息采集接口
*/
public static final String POST_2 = "DUDAO_POST_2_insertLearnDuration";
/**
* POST-3:考试信息采集接口
*/
public static final String POST_3 = "DUDAO_POST_3_insertExamInformation";
/**
* POST-4:答疑辅导采集接口
*/
public static final String POST_4 = "DUDAO_POST_4_insertAnswerTutor";
/**
* POST-5 上下游班级数据绑定接口
*/
public static final String POST_5 = "DUDAO_POST_5_insertBindClass";
/**
* 调取失败
*/
public static final String API_ERROR = "调取失败";
/**
* 当天没数据
*/
public static final String NO_DATA = "NO_DATA";
/**
* 推送失败
*/
public static final String PUSH_FAIL = "推送失败";
/**
* 推送成功
*/
public static final String PUSH_SUCCESS = "推送成功";
}
package com.subsidy.util;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.springframework.util.ClassUtils;
/**
* <p>
* Ehcache
* </p>
*
* @author DengMin
* @since 2022/8/1
*/
public class EhCacheUtil {
static CacheManager cacheManager = CacheManager.newInstance(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"ehcache.xml");
/**
* 添加缓存
* @param cacheName
* @param key
* @param value
*/
public static void putEhCache(String cacheName, String key, Object value) {
Cache cache = cacheManager.getCache(cacheName);
Element element = new Element(key, value);
cache.put(element);
}
/**
* 获取缓存数据
* @param cacheName
* @param key
* @return
*/
public static Object getEhCache(String cacheName, String key) {
Cache cache = cacheManager.getCache(cacheName);
Element element = cache.get(key);
return element == null ? null : element.getObjectValue();
}
/**
* 删除缓存
* @param cacheName
* @param key
*/
public static void deleteEhCache(String cacheName, String key) {
Cache cache = cacheManager.getCache(cacheName);
cache.remove(key);
}
}
//package com.subsidy.util;
//
//import com.amdelamar.jhash.Hash;
//import com.amdelamar.jhash.algorithms.Type;
//import com.amdelamar.jhash.exception.InvalidHashException;
//
//public class EncryptUtil {
//
// /**
// * 设置密文密码
// *
// * @param password 原始密码
// * @return 加密密码
// */
// public static String encrypt(String password) {
// char[] chars = password.toCharArray();
// return Hash.password(chars).algorithm(Type.PBKDF2_SHA256).create();
// }
//
// /**
// * 验证加密密码
// *
// * @param encryptedPassword 密文密码
// * @param plainPassword 明文密码
// * @return 验证是否成功
// */
// public static boolean verify(String encryptedPassword, String plainPassword) {
// char[] chars = plainPassword.toCharArray();
// try {
// return Hash.password(chars).algorithm(Type.PBKDF2_SHA256).verify(encryptedPassword);
// } catch (InvalidHashException e) {
// return false;
// }
// }
//}
package com.subsidy.util;
import java.util.Arrays;
import java.util.List;
public class ExcelFormatUtils {
public static final List<String> memberList = Arrays.asList("序号", "成员名称","身份证号码", "性别", "账号", "联系方式", "签到次数", "课程进度", "学习时长(小时)","学习时长(分钟)","累计有效学习时长", "答疑数", "测试成绩", "总评价");
public static final List<String> signList = Arrays.asList("序号", "成员名称", "身份证号", "联系方式", "签到次数", "签到时间","最近签到ip地址","最近签到设备型号");
public static final List<String> scoreList = Arrays.asList("序号", "成员名称", "身份证号码", "联系方式", "测试成绩", "测试次数","开始时间","结束时间","测评时间", "总评价");
public static final List<String> answersList = Arrays.asList("序号", "提问", "答疑", "提问时间", "提问成员", "答疑时间");
public static final List<String> studyLogList = Arrays.asList("开始时间","结束时间","课程","类型","学习时长","累计有效时长");
}
package com.subsidy.util;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
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.client.methods.HttpUriRequest;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
//import org.apache.http.entity.mime.MultipartEntityBuilder;
//import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.URLEncoder;
import java.util.*;
/**
* @author: sadboy
**/
public class HttpUtil {
private static final Logger log = LoggerFactory.getLogger(HttpUtil.class);
private static final String UTF8 = "UTF-8";
private static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded; charset=UTF-8";
private static final String APPLICATION_JSON = "application/json; charset=UTF-8";
private static final String TEXT_PLAIN = "text/plain; charset=UTF-8";
private static final String TEXT_HTML = "text/html; charset=UTF-8";
private static final String APPLICATION_XML = "application/xml; charset=UTF-8";
private HttpUtil() {
}
/**
* 向url发送get请求,当无参数时,paramMap为NULL
* @param url 请求url
* @param paramMap 需要拼接的参数
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public static String get(String url, Map<String, String> paramMap) throws IOException {
return get(url, paramMap, UTF8);
}
/**
* 向url发送get请求
* @param url 请求url
* @param paramMap 需要拼接的参数
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public static String get(String url, Map<String, String> paramMap, String encoding) throws IOException {
encoding = encoding == null ? UTF8 : encoding;
url = appendUrl(url, paramMap);
return get(url, encoding, new DataParse<String>() {
@Override
public String parseData(HttpEntity httpEntity, String encoding) throws IOException {
return EntityUtils.toString(httpEntity, encoding);
}
});
}
/**
* 向url发送get请求
* @param url 请求url
* @param paramMap 需要拼接的参数
* @param encoding 编码
* @return 请求返回的字节数组,一般用于文件下载
* @throws IOException 读写异常
*/
public static byte[] getBinary(String url, Map<String, String> paramMap, String encoding) throws IOException {
encoding = encoding == null ? UTF8 : encoding;
url = appendUrl(url, paramMap);
return get(url, encoding, new DataParse<byte[]>() {
@Override
public byte[] parseData(HttpEntity httpEntity, String encoding) throws IOException {
return EntityUtils.toByteArray(httpEntity);
}
});
}
/**
* HTTP GET 内部公共请求处理逻辑
* @param url 请求地址
* @param encoding 编码字符集, 默认为 utf-8
* @param dataParse 返回数据反序列化逻辑实现类
* @return HTTP 返回的内容
* @throws IOException 客户端和服务器读写通讯异常
*/
private static <T> T get(String url, String encoding, DataParse<T> dataParse) throws IOException {
log.debug("http 请求 url: {}", url);
T result = null;
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// 创建get方式请求对象
HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("Content-type", APPLICATION_JSON);
// 通过请求对象获取响应对象
CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpGet);
// 获取结果实体
if (null != response) {
result = dataParse.parseData(response.getEntity(), encoding);
if (!(result instanceof byte[])) {
log.debug("http 请求结果: {}", result);
} else {
Header[] headers = response.getHeaders("Content-Type");
for (Header responseHead : headers) {
String headStr = responseHead.getValue();
if (headStr.startsWith("application/json")) {
String json = new String((byte[]) result);
response.close();
throw new RuntimeException(json);
}
}
}
}
try {
if (null != response) {
response.close();
}
} catch (IOException ex) {
log.error(ex.getMessage(), ex);
}
return result;
}
/**
* 向url发送post请求
* @param url 请求url
* @param paramMap 需要拼接的参数
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public static String postFormBody(String url, Map<String, String> paramMap) throws IOException {
return postFormBody(url, paramMap, null);
}
/**
* 向url发送post请求
* @param url 请求url
* @param paramMap 需要拼接的参数
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public static String postFormBody(String url, Map<String, String> paramMap, String encoding) throws IOException {
return post(url, paramMap, encoding);
}
/**
* 向url发送post请求表单提交数据
* @param url 请求url
* @param paramMap 表单数据
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
private static String post(String url, Map<String, String> paramMap, String encoding) throws IOException {
log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", ""));
encoding = encoding == null ? UTF8 : encoding;
// 创建post方式请求对象
HttpPost httpPost = new HttpPost(url);
// 装填参数
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
if (paramMap != null) {
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
String value = entry.getValue();
//去掉如下判断会造成String类型的value为null时
if (value != null) {
nameValuePairs.add(new BasicNameValuePair(entry.getKey(), value));
}
}
}
// 设置参数到请求对象中
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, encoding));
// 设置header信息
// 指定报文头【Content-type】、【User-Agent】
httpPost.setHeader("Content-type", APPLICATION_FORM_URLENCODED);
return post(url, httpPost, encoding, new DataParse<String>() {
@Override
public String parseData(HttpEntity httpEntity, String encoding) throws IOException {
return EntityUtils.toString(httpEntity, encoding);
}
});
}
/**
* 向url发送post请求发送json
* @param url 请求url
* @param json json字符串
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public static String postJsonBody(String url, String json, String encoding) throws IOException {
log.debug("http 请求 url: {} , 请求参数: {}", url, json);
encoding = encoding == null ? UTF8 : encoding;
// 创建post方式请求对象
HttpPost httpPost = new HttpPost(url);
// 设置参数到请求对象中
StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON);
// Constant.UTF8
stringEntity.setContentEncoding(encoding);
httpPost.setEntity(stringEntity);
String result = post(url, httpPost, encoding, new DataParse<String>() {
@Override
public String parseData(HttpEntity httpEntity, String encoding) throws IOException {
return EntityUtils.toString(httpEntity, encoding);
}
});
return result;
}
/**
* 向url发送post请求
* @param url 请求url
* @param httpPost httpClient
* @return 请求返回的数据
* @throws IOException 读写异常
*/
private static <T> T post(String url, HttpPost httpPost, String encoding, DataParse<T> dataParse)
throws IOException {
T result = null;
CloseableHttpResponse response = null;
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// 执行请求操作,并拿到结果(同步阻塞)
response = sendRequestAndGetResult(url, httpClient, httpPost);
// 获取结果实体
// 判断网络连接状态码是否正常(0--200都数正常)
if (null != response) {
result = dataParse.parseData(response.getEntity(), encoding);
log.debug("http 请求结果: {}", result);
}
try {
if (null != response) {
response.close();
}
} catch (IOException ex) {
log.error(ex.getMessage(), ex);
}
return result;
}
/**
* 设置http头,发送http请求,打印请求耗时
* @param url 请求url
* @param httpClient httpClient
* @param httpUriRequest httpUriRequest
* @return 请求返回的数据
* @throws IOException 读写异常
*/
private static CloseableHttpResponse sendRequestAndGetResult(String url, CloseableHttpClient httpClient,
HttpUriRequest httpUriRequest) throws IOException {
long startTime = System.currentTimeMillis();
CloseableHttpResponse response = httpClient.execute(httpUriRequest);
long endTime = System.currentTimeMillis();
collectAPISpendTime(url, startTime, endTime);
return response;
}
/**
* 打印请求信息
* @param url 请求url
* @param startTime 请求开始时间
* @param endTime 请求结束时间
*/
private static void collectAPISpendTime(String url, long startTime, long endTime) {
log.debug("HTTP请求耗时分析,请求URL: {} , 耗时: {} ms", url, endTime - startTime);
}
// /**
// * 向url发送post请求上传单文件
// * @param url 请求url
// * @param paramMap 需要表单提交的参数
// * @param fileMap 需要上传的文件
// * @param encoding 编码
// * @return 请求返回的数据
// * @throws IOException 读写异常
// */
// public static String postFile(String url, Map<String, String> paramMap, Map<String, File> fileMap, String encoding)
// throws IOException {
// if (fileMap != null) {
// Map<String, List<File>> fileListMap = new HashMap<String, List<File>>();
// for (Map.Entry<String, File> entry : fileMap.entrySet()) {
// File file = entry.getValue();
// List<File> fileList = new ArrayList<File>();
// fileList.add(file);
// fileListMap.put(entry.getKey(), fileList);
// }
// return postMultipleFile(url, paramMap, fileListMap, encoding);
// }
// return postMultipleFile(url, paramMap, null, encoding);
// }
// /**
// * 向url发送post请求上传多文件
// * 向url发送post请求上传单文件
// * @param url 请求url
// * @param paramMap 需要表单提交的参数
// * @param fileListMap 需要上传的文件
// * @param encoding 编码
// * @return 请求返回的数据
// * @throws IOException 读写异常
// */
// public static String postMultipleFile(String url, Map<String, String> paramMap, Map<String, List<File>> fileListMap,
// String encoding) throws IOException {
// return postFileBody(url, paramMap, fileListMap, encoding, new DataParse<String>() {
// @Override
// public String parseData(HttpEntity httpEntity, String encoding) throws IOException {
// return EntityUtils.toString(httpEntity, encoding);
// }
// });
// }
// /**
// * 向url发送post请求上传多文件
// * 向url发送post请求上传单文件
// * @param url 请求url
// * @param paramMap 需要表单提交的参数
// * @param fileListMap 需要上传的文件
// * @param encoding 编码
// * @return 请求返回的数据
// * @throws IOException 读写异常
// */
// private static <T> T postFileBody(String url, Map<String, String> paramMap, Map<String, List<File>> fileListMap,
// String encoding, DataParse<T> dataParse) throws IOException {
// log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", ""));
// encoding = encoding == null ? UTF8 : encoding;
// T result = null;
// CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// HttpPost httpPost = new HttpPost(url);
// MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
//
// ContentType contentType = ContentType.create("text/plain", Charset.forName(encoding));
// if (null != paramMap) {
// for (Map.Entry<String, String> entry : paramMap.entrySet()) {
// entityBuilder.addTextBody(entry.getKey(), entry.getValue(), contentType);
// }
// }
//
// if (null != fileListMap) {
// for (Map.Entry<String, List<File>> entry : fileListMap.entrySet()) {
// String key = entry.getKey();
// List<File> fileList = entry.getValue();
// for (File file : fileList) {
// FileBody fileBody = new FileBody(file);
// entityBuilder.addPart(key, fileBody);
// }
// }
// }
//
// HttpEntity entity = entityBuilder.build();
// httpPost.setEntity(entity);
// CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpPost);
// if (null != response) {
// result = dataParse.parseData(response.getEntity(), encoding);
// log.debug("http 请求结果: {}", result);
// }
// try {
// if (null != response) {
// response.close();
// }
// } catch (IOException ex) {
// log.error(ex.getMessage(), ex);
// }
// return result;
// }
/**
* 公共数据解析接口
* @param <T>
*/
private interface DataParse<T> {
/**
* 解析返回数据
* @param httpEntity 返回实体
* @param encoding 编码
* @return 实际解析返回内容
* @throws IOException io异常
*/
T parseData(HttpEntity httpEntity, String encoding) throws IOException;
}
/**
* 将url与map拼接成HTTP查询字符串
* @param url 请求url
* @param paramMap 需要拼装的map
* @return 拼装好的url
*/
public static String appendUrl(String url, Map<String, String> paramMap) throws UnsupportedEncodingException {
if (paramMap == null) {
return url;
}
StringBuffer paramStringBuffer = new StringBuffer();
Iterator<Map.Entry<String, String>> mapIterator = paramMap.entrySet().iterator();
while (mapIterator.hasNext()) {
Map.Entry<String, String> next = mapIterator.next();
paramStringBuffer.append(next.getKey()).append("=").append(URLEncoder.encode(next.getValue(), ConstantUtils.UTF8)).append("&");
}
String paramStr = paramStringBuffer.toString();
// String paramStr = mapJoinNotEncode(paramMap);
if (paramStr != null && !"".equals(paramStr)) {
if (url.indexOf("?") > 0) {
if (url.endsWith("&")) {
url += paramStr.substring(0, paramStr.length() - 1);
} else {
url += "&" + paramStr.substring(0, paramStr.length() - 1);
}
} else {
url += "?" + paramStr.substring(0, paramStr.length() - 1);
}
}
return url;
}
/**
* 把二进制写入文件
* @param bytes
* @param path
* @throws IOException
*/
public static void writeFile(byte[] bytes, String path) throws IOException {
OutputStream os = null;
try {
// 根据绝对路径初始化文件
File localFile = new File(path);
if (!localFile.exists()) {
boolean newFile = localFile.createNewFile();
if (!newFile) {
throw new RuntimeException("创建文件异常,路径:" + path);
}
}
// 输出流
os = new FileOutputStream(localFile);
os.write(bytes);
} finally {
if (os != null) {
os.close();
}
}
}
}
package com.subsidy.util;
import com.google.common.hash.Hashing;
import org.apache.commons.codec.Charsets;
import java.util.Collections;
import java.util.List;
/**
* 人脸识别工具类
*/
public class ImageCheckUtil {
/**
* 签名方法
* @param values
* @param ticket
* @return
*/
public static String sign(List<String> values, String ticket) { //values传ticket外的其他参数
if (values == null) {
throw new NullPointerException("values is null");
}
values.removeAll(Collections.singleton(null));// remove null
values.add(ticket); java.util.Collections.sort(values);
StringBuilder sb = new StringBuilder();
for (String s : values) { sb.append(s);
}
return Hashing.sha1().hashString(sb,
Charsets.UTF_8).toString().toUpperCase();
}
}
package com.subsidy.util;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
public class IpAddressUtil {
/**
* 返回客户端ip
*/
public static String getIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
if (ipAddress != null && ipAddress.length() > 15) {
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}
/**
* @Description:获取客户端外网ip
* @Author:zrt
* @Date:2019/6/13 11:23
**/
public static String getPublicIp() {
try {
String path = "http://subsidy.youkehulian.cn/";// 要获得html页面内容的地址
URL url = new URL(path);// 创建url对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开连接
conn.setRequestProperty("contentType", "GBK"); // 设置url中文参数编码
conn.setConnectTimeout(5 * 1000);// 请求的时间
conn.setRequestMethod("GET");// 请求方式
InputStream inStream = conn.getInputStream();
// readLesoSysXML(inStream);
BufferedReader in = new BufferedReader(new InputStreamReader(
inStream, "GBK"));
StringBuffer buffer = new StringBuffer();
String line = "";
// 读取获取到内容的最后一行,写入
while ((line = in.readLine()) != null) {
buffer.append(line);
}
String str = buffer.toString();
String ipString1 = str.substring(str.indexOf("["));
// 获取你的IP是中间的[182.149.82.50]内容
String ipsString2 = ipString1.substring(ipString1.indexOf("[") + 1,
ipString1.lastIndexOf("]"));
//获取当前IP地址所在地址
/* String ipsString3=ipString1.substring(ipString1.indexOf(": "),ipString1.lastIndexOf("</center>"));
System.err.println(ipsString3);*/
// 返回公网IP值
return ipsString2;
} catch (Exception e) {
System.out.println("获取公网IP连接超时");
return "连接超时";
}
}
}
package com.subsidy.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import java.util.Date;
import java.util.Map;
/**
* <p>
* Token工具
* </p>
*
* @author DengMin
* @since 2021/4/14
*/
public class JwtUtil {
private static Long EXPIRE_TIME = 24 * 60 * 60 * 1000L;
private static String SECRET = "PBKDF2SHA256:64000:18:24:N:GFHZ6Y0PTEUDYCJI3K6SOOXWYEKPOZED:WBWFJMX5DF252E0HR3BF3P/D";
/**
* 生成Token
* @param id
* @return
*/
public static String generateToken(Long id, String type) {
Date expireDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);
return JWT.create()
.withClaim("id", id)
.withClaim("type", type)
.withAudience()
.withExpiresAt(expireDate)
.withIssuedAt(new Date())
.sign(Algorithm.HMAC256(SECRET));
}
/**
* 检验token是否正确
* @param token
* @return
*/
public static boolean verifyToken(String token) {
try {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTVerifier verifier = JWT.require(algorithm).build();
verifier.verify(token);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 获取用户自定义Claim集合
* @param token
* @return
*/
public static Map<String, Claim> getClaims(String token) {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTVerifier verifier = JWT.require(algorithm).build();
Map<String, Claim> claims = verifier.verify(token).getClaims();
return claims;
}
/**
* 获取过期时间
* @param token
* @return
*/
public static Date getExpiresAt(String token) {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
return JWT
.require(algorithm)
.build()
.verify(token)
.getExpiresAt();
}
/**
* 验证token是否失效
* @param token
* @return true: 过期, false: 没过期
*/
public static boolean isExpired(String token) {
try {
final Date expiration = getExpiresAt(token);
return expiration.before(new Date());
} catch (Exception e) {
return true;
}
}
}
package com.subsidy.util;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Localstorage {
private static final ThreadLocal<Object> local = ThreadLocal.withInitial(() -> null);
public static void setUser(Object admin) {
Localstorage.local.set(admin);
}
public static Object getUser() {
return Localstorage.local.get();
}
public static void remove() {
Localstorage.local.remove();
}
}
package com.subsidy.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;
public class MathUtil {
public static String getRandomCode(int randomLength) {
StringBuilder str = new StringBuilder();
Random random = new Random();
for (int i = 0; i < randomLength; i++) {
str.append(random.nextInt(10));
}
return str.toString();
}
public static String getRandomString(int length) {
StringBuilder val = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; ++i) {
String charOrNum = random.nextInt(3) % 3 == 0 ? "num" : "char";
if ("char".equalsIgnoreCase(charOrNum)) {
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val.append((char) (random.nextInt(26) + temp));
} else {
val.append(random.nextInt(10));
}
}
return val.toString();
}
//习题/视频 ==> 秒钟向上取整
public static String ceilSecond(int length) {
return String.valueOf((int) Math.ceil((double) length / 60));
}
//习题/视频 ==> 秒钟向下取整
public static String floorSecond(int length) {
return String.valueOf((int) Math.floor((double) length / 60));
}
//视频秒数处理
public static String vodLength(int i) {
if (i > 60) {
if (i % 60 >= 10) {
return i / 60 + ":" + i % 60;
} else {
return i / 60 + ":0" + i % 60;
}
} else {
if (i % 60 >= 10) {
return "00:" + i;
} else {
return "00:0" + i;
}
}
}
//文件大小处理
public static String fileUnit(int i) {
if (i / 1024 > 1024) {
return String.format("%.2f", (double) i / 1024 / 1024) + "M";
} else {
return String.format("%.2f", (double) i / 1024) + "K";
}
}
//单个题目秒数处理
public static String exerciseLength(int i) {
if (i >= 60 * 60) {
return i / 60 / 60 + "时" + (i - 60 * 60) / 60 + "分" + i % 60 + "秒";
} else if (i >= 60) {
return i / 60 + "分" + i % 60 + "秒";
} else {
return i % 60 + "秒";
}
}
// 除法取整
public static String getAvgIndex(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total)) {
return "0";
} else {
return counts.divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString();
}
}
//百分比 取整 返回字符串
public static String getPercentAvgIndex(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) {
return "0%";
} else {
return counts.multiply(new BigDecimal(100)).divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString() + "%";
}
}
//百分比 不带%输出
public static String getPercentAvgIndexWithPercent(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) {
return "0";
} else {
return counts.multiply(new BigDecimal(100)).divide(total, 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
}
}
//百分比 不带%输出
public static String getPercentAvgIndexCeil(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) {
return "0";
} else {
return counts.multiply(new BigDecimal(100)).divide(total, 2, BigDecimal.ROUND_CEILING).stripTrailingZeros().toPlainString();
}
}
//习题序号生成规则 sid 从数据取出某科目某知识点的最大的序号
public static String getExeCode(String sid) {
Integer integer = Integer.valueOf(sid.substring(9));
return sid.substring(0, 9) + (++integer);
}
// 整型a 整型b a/b 向上取整
public static Integer intDivCeil(long a, int b) {
return (int) Math.ceil((double) a / b);
}
// 整型a 整型b a/b 向下取整
public static Integer intDivFloorPercent(long a, int b) {
return (int) Math.floor((double) a * 100 / b);
}
public static Integer getRandomNum(Integer i) {
Random random = new Random();
return random.nextInt(i);
}
// public static void main(String[] args) {
// for (int i= 1;i<100;i++){
// System.out.println(getRandomNum(2));
// }
// }
public static String secToTime(int time) {
String timeStr ;
int hour;
int minute;
int second;
if (time <= 0) {
return "00:00:00";
} else {
minute = time / 60;
if (minute < 60) {
second = time % 60;
timeStr = "00:"+unitFormat(minute) + ":" + unitFormat(second);
} else {
hour = minute / 60;
minute = minute % 60;
second = time - hour * 3600 - minute * 60;
timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second);
}
}
return timeStr;
}
public static String unitFormat(int i) {
String retStr = null;
if (i >= 0 && i < 10) {
retStr = "0" + i;
} else {
retStr = "" + i;
}
return retStr;
}
}
//package com.subsidy.util;
//
//import lombok.Data;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//import java.util.regex.Pattern;
//
//@Data
//@Component
//public class MongoUtil<T> {
// public Integer pageSize;
// private Integer currentPage;
//
//
// public void start(Integer currentPage, Integer pageSize, Query query) {
// pageSize = pageSize == 0 ? 10 : pageSize;
// query.limit(pageSize);
// query.skip((currentPage - 1) * pageSize);
// this.pageSize = pageSize;
// this.currentPage = currentPage;
// }
//
// public PageHelper pageHelper(long total, List<T> list) {
// return new PageHelper(this.currentPage, total, this.pageSize, list);
// }
//
// public PageHelper pageHelper(List<T> list) {
// return new PageHelper(this.currentPage, this.pageSize, list);
// }
//
// public PageHelper pageHelper(long currentPage, long total, long pageSize, List<T> list) {
// return new PageHelper(currentPage, total, pageSize, list);
// }
//
// public PageHelper pageHelper(long currentPage, long pageSize, List<T> list) {
// return new PageHelper(currentPage, pageSize, list);
// }
//
//
// /**
// * 用于模糊查询忽略大小写
// *
// * @param string
// * @return
// */
// public Pattern getPattern(String string) {
// Pattern pattern = Pattern.compile("^.*" + string + ".*$", Pattern.CASE_INSENSITIVE);
// return pattern;
// }
//
//}
package com.subsidy.util;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import java.beans.PropertyDescriptor;
import java.util.HashSet;
import java.util.Set;
public class MyBeanUtils {
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for(PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
// 此处判断可根据需求修改
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
}
package com.subsidy.util;
import java.util.List;
public class MyStringUtils {
/**
* 把集合改成字符串 去掉逗号
*/
public static String changeListToString(List<String> list) {
StringBuffer buffer = new StringBuffer();
if (list.size() > 0) {
int i= 0 ;
for (String s : list) {
buffer.append(s);
if (i != list.size()-1){
buffer.append(",");
}
}
}
return buffer.toString();
}
}
package com.subsidy.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateTime;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;
public class OSSUtils {
// @Value("${aliyun.oss.accessKeyId}")
private static String accessKeyId = "LTAI5tPAH7P7WQVeowo517BE";
// @Value("${aliyun.oss.accessKeySecret}")
private static String secretAccessKey = "0ueqhIfdAZyw5lWlBVSLpAxTtx37RY";
// @Value("${aliyun.oss.endpoint}")
private static String endPoint = "oss-cn-beijing.aliyuncs.com";
// @Value("${aliyun.oss.bucketName}")
// private static String bucketName = "shixischool";
private static String bucketName = "ykhl-bigger";
public static String uploadOneFile(String file) throws IOException {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
// 设置文件名
String fileName = new DateTime().toString("yyyy-MM-dd")
+ UUID.randomUUID().toString() + ".jpg";
// 获取文件后缀名
// int originalFilenameStartIndex = file.indexOf('/');
// int originalFilenameEndIndex = file.indexOf(';');
// String originalFilename = file.substring(originalFilenameStartIndex+1,originalFilenameEndIndex);
// 获取base64的文件
// file = file.split(",")[1];
byte[] bytesFile = Base64.decode(file);
try {
// 创建PutObject请求。
InputStream inputStream = new ByteArrayInputStream(bytesFile);
ossClient.putObject(bucketName, fileName, inputStream);
String url = "http://" + bucketName + "." + endPoint + "/" + fileName+"?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg";
// System.out.println(url);
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
public static String image2Base64(String imgUrl) {
URL url = null;
InputStream is = null;
ByteArrayOutputStream outStream = null;
HttpURLConnection httpUrl = null;
try {
url = new URL(imgUrl);
httpUrl = (HttpURLConnection) url.openConnection();
httpUrl.connect();
httpUrl.getInputStream();
is = httpUrl.getInputStream();
outStream = new ByteArrayOutputStream();
// 创建一个Buffer字符串
byte[] buffer = new byte[1024];
// 每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
// 使用一个输入流从buffer里把数据读取出来
while ((len = is.read(buffer)) != -1) {
// 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
// 对字节数组Base64编码
return Base64Util.encode(outStream.toByteArray());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outStream != null) {
try {
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (httpUrl != null) {
httpUrl.disconnect();
}
}
return imgUrl;
}
public static void main(String[] args) {
// System.out.println(image2Base64("https://shixischool.oss-cn-beijing.aliyuncs.com/2022-12-219df5b721-99b7-48c4-916e-e474a4eca946.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"));
System.out.println(image2Base64("http://ykhl-bigger.oss-cn-beijing.aliyuncs.com/2023-02-1618cb936b-4825-429c-9fdd-dd9d0de97ed7.jpg?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg"));
}
}
package com.subsidy.util;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;
import java.util.List;
@Data
public class PageHelper<T> {
private long currentPage;
private long total;
private long pageSize;
private List<T> list;
public PageHelper(long pageNum, long total, long pageSize, List<T> list) {
this.currentPage = pageNum;
this.total = total;
this.pageSize = pageSize;
this.list = list;
}
public PageHelper(long pageNum, long pageSize, List<T> list) {
this.currentPage = pageNum;
this.pageSize = pageSize;
this.list = list;
}
}
package com.subsidy.util;
import net.polyv.live.v1.util.LiveSignUtil;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
public class PolyvUtils {
/**
* 学生端--生成保利威视直播观看地址
*/
public static String liveSign(String userId, String channelId){
//根据实际情况设置userid
String ts = String.valueOf(System.currentTimeMillis());
String url = "https://live.polyv.cn/watch/"+channelId;
String signText = "03sqxr97fo"+ userId +"03sqxr97fo"+ts;
try {
String sign = LiveSignUtil.md5Hex(signText);
url += "?userid="+userId+"&ts="+ts+"&sign="+sign;
return url;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}
package com.subsidy.util;
import com.subsidy.common.exception.HttpException;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static org.quartz.DateBuilder.futureDate;
@Component
public class QuartzUtil {
@Autowired
private Scheduler scheduler;
public static void main(String[] args) {
System.out.println(DateFormatUtil.parse("2022-06-28 11:30:47", "yyyy-MM-dd HH:mm:ss").getTime() -System.currentTimeMillis());
}
/**
* 添加定时任务,只执行一次的定时任务
*
* @param cls 执行类
* @param date 时间
* @param params 参数
* @param name 定时器名称
* @param group 定时器组名
*/
public void addSimpleJob(Class cls, Date date, Map<String, Object> params, String name, String group) {
try {
JobKey key = new JobKey(name, group);
List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(key);
if (triggers.size() == 0) {
Long time = (date.getTime() - System.currentTimeMillis()) / 1000;
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("params", params);
JobDetail jobDetail = JobBuilder.newJob(cls)
.withIdentity(name, group)
.usingJobData(jobDataMap)
.build();
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity(name, group)
.startAt(futureDate(Math.toIntExact(time), DateBuilder.IntervalUnit.SECOND))
.build();
scheduler.scheduleJob(jobDetail, trigger);
if (!scheduler.isShutdown()) {
scheduler.start();
}
}
} catch (Exception e) {
e.printStackTrace();
throw new HttpException(70002);
}
}
/**
* 添加定时任务,循环不断执行的定时任务
*
* @param cls 执行类
* @param cron cron 表达式
* @param params 参数
* @param name 定时器名称
* @param group 定时器组名
*/
public void addCronJob(Class cls, String cron, Map<String, Object> params, String name, String group) {
try {
JobKey key = new JobKey(name, group);
List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(key);
if (triggers.size() == 0) {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("params", params);
JobDetail jobDetail = JobBuilder.newJob(cls)
.withIdentity(name, group)
.usingJobData(jobDataMap)
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(name, group)
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.build();
scheduler.scheduleJob(jobDetail, trigger);
if (!scheduler.isShutdown()) {
scheduler.start();
}
}
} catch (Exception e) {
throw new HttpException(70002);
}
}
/**
* 删除定时器
*
* @param name 定时器名称
* @param group 定时器组名
*/
public void deleteJob(String name, String group) {
try {
JobKey key = new JobKey(name, group);
List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(key);
if (triggers.size() > 0) {
TriggerKey triggerKey = TriggerKey.triggerKey(name, group);
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
scheduler.deleteJob(JobKey.jobKey(name, group));
}
} catch (Exception e) {
throw new HttpException(70003);
}
}
}
\ No newline at end of file
package com.subsidy.util;
import cn.hutool.core.lang.UUID;
import java.util.Random;
public class RandomUtil {
public static int getCode() {
return (int)((Math.random() * 9 + 1) * 100000);
}
public static String getRandomCode(int randomLength) {
StringBuilder str = new StringBuilder();
Random random = new Random();
for (int i = 0; i < randomLength; i++) {
str.append(random.nextInt(10));
}
return str.toString();
}
/**
* 随机生成订单号
*/
public static String randomOrderNumber(){
return UUID.fastUUID().toString().replace("-","").substring(0,29);
}
public static void main(String[] args) {
System.out.println(randomOrderNumber());
}
}
package com.subsidy.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundListOperations;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* <p>
* redisTemplate封装
* </p>
*
* @author DengMin
* @since 2020/12/17
*/
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public RedisUtil(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
/**
* 指定缓存失效时间
* @param key 键
* @param time 时间(秒)
* @return
*/
public boolean expire(String key,long time){
try {
if(time>0){
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public long getExpire(String key){
return redisTemplate.getExpire(key,TimeUnit.SECONDS);
}
/**
* 判断key是否存在
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key){
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String ... key){
if(key!=null&&key.length>0){
if(key.length==1){
redisTemplate.delete(key[0]);
}else{
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
/**
* 删除缓存
* @param key 集合数据
*/
public void del(Set<String> key) {
if (key != null && key.size() > 0) {
redisTemplate.delete(key);
}
}
//============================String=============================
/**
* 普通缓存获取
* @param key 键
* @return 值
*/
public Object get(String key){
return key==null?null:redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key,Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
* @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){
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
}else{
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 递增
* @param key 键
* @param delta 要增加几(大于0)
* @return
*/
public long incr(String key, long delta){
if(delta<0){
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.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 redisTemplate.opsForValue().increment(key, -delta);
}
//================================Map=================================
/**
* HashGet
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public Object hget(String key,String item){
return redisTemplate.opsForHash().get(key, item);
}
/**
* 获取hashKey对应的所有键值
* @param key 键
* @return 对应的多个键值
*/
public Map<Object,Object> hmget(String key){
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String,Object> map){
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* HashSet 并设置时间
* @param key 键
* @param map 对应多个键值
* @param time 时间(秒)
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String,Object> map, long time){
try {
redisTemplate.opsForHash().putAll(key, map);
if(time>0){
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
* @param key 键
* @param item 项
* @param value 值
* @return true 成功 false失败
*/
public boolean hset(String key,String item,Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
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 {
redisTemplate.opsForHash().put(key, item, value);
if(time>0){
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除hash表中的值
* @param key 键 不能为null
* @param item 项 可以使多个 不能为null
*/
public void hdel(String key, Object... item){
redisTemplate.opsForHash().delete(key,item);
}
/**
* 判断hash表中是否有该项的值
* @param key 键 不能为null
* @param item 项 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item){
return redisTemplate.opsForHash().hasKey(key, item);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
* @param key 键
* @param item 项
* @param by 要增加几(大于0)
* @return
*/
public double hincr(String key, String item,double by){
return redisTemplate.opsForHash().increment(key, item, by);
}
/**
* hash递减
* @param key 键
* @param item 项
* @param by 要减少记(小于0)
* @return
*/
public double hdecr(String key, String item,double by){
return redisTemplate.opsForHash().increment(key, item,-by);
}
//============================set=============================
/**
* 根据key获取Set中的所有值
* @param key 键
* @return
*/
public Set<Object> sGet(String key){
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据value从一个set中查询,是否存在
* @param key 键
* @param value 值
* @return true 存在 false不存在
*/
public boolean sHasKey(String key,Object value){
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将数据放入set缓存
* @param key 键
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object...values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 将set数据放入缓存
* @param key 键
* @param time 时间(秒)
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSetAndTime(String key,long time,Object...values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if(time>0) {
expire(key, time);
}
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 获取set缓存的长度
* @param key 键
* @return
*/
public long sGetSetSize(String key){
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 移除值为value的
* @param key 键
* @param values 值 可以是多个
* @return 移除的个数
*/
public long setRemove(String key, Object ...values) {
try {
Long count = redisTemplate.opsForSet().remove(key, values);
return count;
} catch (Exception e) {
e.printStackTrace();
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 redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取list缓存的长度
* @param key 键
* @return
*/
public long lGetListSize(String key){
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
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 redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将list放入缓存
* @param key 键
* @param value 值
* @return
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
* @param key 键
* @param value 值
* @return
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据索引修改list中的某条数据
* @param key 键
* @param index 索引
* @param value 值
* @return
*/
public boolean lUpdateIndex(String key, long index,Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 移除N个值为value
* @param key 键
* @param count 移除多少个
* @param value 值
* @return 移除的个数
*/
public long lRemove(String key,long count,Object value) {
try {
Long remove = redisTemplate.opsForList().remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
///**
// * 模糊查询获取key值
// * @param pattern
// * @return
// */
public Set keys(String pattern){
return redisTemplate.keys(pattern);
}
/**
* 模糊查询
* @param pattern
* @return
*/
public Set scan(String pattern) {
return redisTemplate.execute((RedisCallback<Set<String>>) redisConnection -> {
Set keys = new HashSet<>();
Cursor<byte[]> cursor = redisConnection.scan(new ScanOptions.ScanOptionsBuilder().match(pattern).count(Integer.MAX_VALUE).build());
while (cursor.hasNext()) {
keys.add(new String(cursor.next()));
}
return keys;
});
}
/**
* 使用Redis的消息队列
* @param channel
* @param message 消息内容
*/
public void convertAndSend(String channel, Object message){
redisTemplate.convertAndSend(channel,message);
}
//=========BoundListOperations 用法 start============
/**
* 根据起始结束序号遍历Redis中的list
* @param listKey
* @param start 起始序号
* @param end 结束序号
* @return
*/
public List<Object> rangeList(String listKey, long start, long end) {
//绑定操作
BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
//查询数据
return boundValueOperations.range(start, end);
}
/**
* 弹出右边的值 --- 并且移除这个值
* @param listKey
*/
public Object rifhtPop(String listKey){
//绑定操作
BoundListOperations<String, Object> boundValueOperations = redisTemplate.boundListOps(listKey);
return boundValueOperations.rightPop();
}
//=========BoundListOperations 用法 End============
}
\ No newline at end of file
package com.subsidy.util;
public class RenSheJuConstant {
/**
* POST-2:班级基本信息信息采集接口
*/
public static final String POST_3 = "POST3_班级基本信息";
/**
* POST-3:学时信息采集接口
*/
public static final String POST_4 = "POST4_学时信息";
/**
* POST-4:考试信息采集接口
*/
public static final String POST_5 = "POST5_考试信息";
/**
* POST-5:答疑辅导采集接口
*/
public static final String POST_6 = "POST6_答疑辅导";
/**
* POST-6 班级活跃度/实名认证照片信息采集接口
*/
public static final String POST_7 = "POST7_实名认证/活跃度";
/**
* POST-7 获取培训待绑定的(班级编号,项目编号)列表
*/
// public static final String POST_7 = "POST_7_getClassCodeByPrivateKey";
/**
* POST-8 上下游班级数据绑定接口
*/
public static final String POST_8 = "POST8_待绑定的班级";
/**
* POST-9 获取推送失败班级列表
*/
public static final String POST_9 = "POST_9_getErrorClass";
/**
* POST-10 清除推送失败班级缓存
*/
public static final String POST_10 = "POST_10_clear";
/**
* 调取失败
*/
public static final String API_ERROR = "调取失败";
/**
* 当天没数据
*/
public static final String NO_DATA = "NO_DATA";
/**
* 推送失败
*/
public static final String PUSH_FAIL = "推送失败";
/**
* 推送成功
*/
public static final String PUSH_SUCCESS = "推送成功";
}
package com.subsidy.util;
public class ResultMode {
/**
* 成功:true,失败:false
*/
private boolean success;
/**
* 返回编码
*/
private int resultCode;
/**
* 返回消息
*/
private String msg;
/**
* 结果数据
*/
private Object data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public int getResultCode() {
return resultCode;
}
public void setResultCode(int resultCode) {
this.resultCode = resultCode;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
package com.subsidy.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.subsidy.common.configure.AliyunSmsProperties;
import com.subsidy.common.exception.HttpException;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 短信发送工具类
*/
@Component
public class SMSUtils {
@Autowired
private AliyunSmsProperties aliyunSmsProperties;
public SendSmsResponse send(String phone, String code) {
try {
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret());
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain());
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(phone);
//必填:短信签名-可在短信控制台中找到
request.setSignName("有课互联");
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode("SMS_190945394");
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam("{\"code\":\""+ code +"\"}");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
return sendSmsResponse;
}
throw new Exception(sendSmsResponse.getMessage());
} catch (Exception e) {
e.printStackTrace();
throw new HttpException(70011);
}
}
/**
* 发送验证码短信
* @param templateId 短信模板id
* @param telephone 手机号
* @return
*/
public String sendVerifySMS(String templateId,String telephone,String param){
try {
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret());
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain());
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(telephone);
//必填:短信签名-可在短信控制台中找到
request.setSignName("有课互联");
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateId);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam("{\"code\":\""+ param +"\"}");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
return ConstantUtils.SUCCESS_SEND_OUT;
}
throw new Exception(sendSmsResponse.getMessage());
} catch(Exception e) {
e.printStackTrace();
return ConstantUtils.FAIL_SEND_OUT;
}
}
public String sendWarning(String templateId,String telephone,String param){
try {
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunSmsProperties.getAccessKeyId(), aliyunSmsProperties.getAccessKeySecret());
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", aliyunSmsProperties.getProduct(), aliyunSmsProperties.getDomain());
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(telephone);
//必填:短信签名-可在短信控制台中找到
request.setSignName("有课互联科技");
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateId);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam("{\"ids\":\""+ param +"\"}");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
return ConstantUtils.SUCCESS_SEND_OUT;
}
throw new Exception(sendSmsResponse.getMessage());
} catch(Exception e) {
e.printStackTrace();
return ConstantUtils.FAIL_SEND_OUT;
}
}
/**
* 发送通知短信
* @param templateId 短信模板id
* @param telephone 手机号
* @return
*/
public static String sendNoticeSMS(String templateId,String telephone,String param){
DefaultProfile profile = DefaultProfile.getProfile(ConstantUtils.REGION_ID, ConstantUtils.ACCESS_KEY_ID, ConstantUtils.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");
request.putQueryParameter("RegionId",ConstantUtils.REGION_ID);
request.putQueryParameter("PhoneNumbers",telephone);
request.putQueryParameter("SignName",ConstantUtils.TECH_NAME);
request.putQueryParameter("TemplateCode",templateId);
// if (StringUtils.isEmpty(param)){
// request.putQueryParameter("TemplateParam","{ \"code\":\""+verifyCode +"\"}");
// }
request.putQueryParameter("TemplateParam",param);
CommonResponse response = null;
try {
response = client.getCommonResponse(request);
if(response != null) {
JSONObject data = JSON.parseObject(response.getData());
if(data.get("Code").equals("OK")) {
return ConstantUtils.SUCCESS_SEND_OUT;
}
throw new HttpException(1000, data.get("Message").toString());
}
return ConstantUtils.FAIL_SEND_OUT;
} catch(Exception e) {
e.printStackTrace();
return ConstantUtils.FAIL_SEND_OUT;
}
}
//public static void main(String[] args) {
// String param = "{ \"course\":\""+"语文课"+ "\",\"time\":\""+"2020-01-02" +"\",\"address\":\""+"上海市" +"\"}";
// sendNoticeSMS("SMS_215336604","15201936167,18201963812",param);
//}
public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
//拼音小写
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//不带声调
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//format.setVCharType();
//要转换的中文,格式,转换之后的拼音的分隔符,遇到不能转换的是否保留 wo,shi,zhong,guo,ren,,hello
System.out.println(PinyinHelper.toHanYuPinyinString("我是中国人", format, "", false));
}
}
package com.subsidy.util;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Random;
import java.util.UUID;
public class SecretUtils {
/**
* 对用户登录密码进行MD5加密
*
* @param str
* @return
*/
public static String getMD5String(String str) {
try {
// 生成一个MD5加密计算摘要
return DigestUtils.md5Hex(str).toUpperCase();
// MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
// md.update(str.getBytes("utf-8"));
// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)
// byte[] digest = md.digest(str.getBytes("utf-8"));
// return new BigInteger(1, digest).toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 对字符串进行SHA加密
*
* @param
*/
public static String getSHAString(String str) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] byteArray = str.getBytes(StandardCharsets.UTF_8);
byte[] md5Bytes = sha.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
} catch (Exception e) {
return null;
}
}
/**
* Q学友SHA加密
* @param arr
* @return
*/
public static String gen(String... arr) {
if (StringUtils.isAnyEmpty(arr)) {
throw new IllegalArgumentException("非法请求参数,有部分参数为空 : " + Arrays.toString(arr));
} else {
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
String[] var2 = arr;
int var3 = arr.length;
for (int var4 = 0; var4 < var3; ++var4) {
String a = var2[var4];
sb.append(a);
}
return DigestUtils.sha1Hex(sb.toString());
}
}
public static String getNonce(int length) {
String val = "";
Random random = new Random();
//参数length,表示生成几位随机数
for (int i = 0; i < length; i++) {
val += String.valueOf(random.nextInt(10));
}
return val;
}
private static byte[] md5(String s)
{
MessageDigest algorithm;
try
{
algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(s.getBytes(StandardCharsets.UTF_8));
byte[] messageDigest = algorithm.digest();
return messageDigest;
}
catch (Exception e)
{
}
return null;
}
private static final String toHex(byte[] hash)
{
if (hash == null)
{
return null;
}
StringBuffer buf = new StringBuffer(hash.length * 2);
int i;
for (i = 0; i < hash.length; i++)
{
if ((hash[i] & 0xff) < 0x10)
{
buf.append("0");
}
buf.append(Long.toString(hash[i] & 0xff, 16));
}
return buf.toString();
}
public static String hash(String s)
{
try
{
return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
}
catch (Exception e)
{
return s;
}
}
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString();
System.out.println(uuid.replace("-",""));
// System.out.println(hash(uuid+"ixihs"));
// System.out.println(System.currentTimeMillis());
}
}
\ No newline at end of file
package com.subsidy.util;
public class ShehuihuaConstant {
/**
* 获取培训正在进行中的(班级编号,项目编号)列表
*/
public static final String POST_2 = "Shehuihua_2_getClassCodeByPrivateKey";
/**
* POST-3:班级基本信息信息采集接口
*/
public static final String POST_3 = "Shehuihua_3_uploadClass";
/**
* POST-4:学时信息采集接口
*/
public static final String POST_4 = "Shehuihua_4_classHourBehavior";
/**
* POST-5:考试信息采集接口
*/
public static final String POST_5 = "Shehuihua_5_uploadChapterBehavior";
/**
* POST-6:答疑辅导采集接口
*/
public static final String POST_6 = "Shehuihua_6_uploadClassAnswerQuestionBehavior";
/**
* POST-7 班级活跃度/实名认证照片信息采集接口
*/
public static final String POST_7 = "Shehuihua_7_import/downstream/social/uploadImage";
/**
* POST-8 获取推送失败班级列表
*/
public static final String POST_8 = "Shehuihua_8_getErrorClass";
/**
* POST-9 清除推送失败班级缓存
*/
public static final String POST_9 = "Shehuihua_9_clear";
/**
* 调取失败
*/
public static final String API_ERROR = "调取失败";
/**
* 当天没数据
*/
public static final String NO_DATA = "NO_DATA";
/**
* 推送失败
*/
public static final String PUSH_FAIL = "推送失败";
/**
* 推送成功
*/
public static final String PUSH_SUCCESS = "推送成功";
}
package com.subsidy.util;
import sun.misc.BASE64Encoder;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
/**
* @author: tuyp
* @create: 2020-07-29 12:42
*/
public class Signature {
private String secretId;
private String secretKey;
private long currentTime;
private int random;
private int signValidDuration;
private int classId;
private static final String HMAC_ALGORITHM = "HmacSHA1";
private static final String CONTENT_CHARSET = "UTF-8";
public static byte[] byteMerger(byte[] byte1, byte[] byte2) {
byte[] byte3 = new byte[byte1.length + byte2.length];
System.arraycopy(byte1, 0, byte3, 0, byte1.length);
System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length);
return byte3;
}
public String getUploadSignature() throws Exception {
String strSign = "";
String contextStr = "";
long endTime = (currentTime + signValidDuration);
contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8");
contextStr += "&currentTimeStamp=" + currentTime;
contextStr += "&expireTime=" + endTime;
contextStr += "&random=" + random;
contextStr += "&classId=" + classId;
try {
Mac mac = Mac.getInstance(HMAC_ALGORITHM);
SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm());
mac.init(secretKey);
byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET));
byte[] sigBuf = byteMerger(hash, contextStr.getBytes(StandardCharsets.UTF_8));
strSign = base64Encode(sigBuf);
strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", "");
} catch (Exception e) {
throw e;
}
return strSign;
}
private String base64Encode(byte[] buffer) {
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(buffer);
}
public void setSecretId(String secretId) {
this.secretId = secretId;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public void setCurrentTime(long currentTime) {
this.currentTime = currentTime;
}
public void setRandom(int random) {
this.random = random;
}
public void setSignValidDuration(int signValidDuration) {
this.signValidDuration = signValidDuration;
}
public void setClassId(int classId){this.classId = classId;}
}
package com.subsidy.util;
import org.apache.commons.codec.binary.Base64;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.security.MessageDigest;
import java.util.Random;
public class TestMain {
/**
* 对字节数组字符串进行Base64解码并生成图片
* @param imgStr 图片数据
* @param imgFilePath 保存图片全路径地址
* @return
*/
public static boolean generateImage(String imgStr,String imgFilePath){
//
if (imgStr == null) //图像数据为空
{
return false;
}
try
{
//Base64解码
byte[] b = Base64.decodeBase64(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
public static void main(String[] args) throws Exception{
// String password = "123456";
// String saltCode = getRandomCharAndNumr(5);
// String encryptString = encrypt("91ebn" + password);
// System.out.println(encryptString);
// Thread thread1 = new Thread(() -> {
// System.out.println("thread1");
// });
// Thread thread2 = new Thread(() -> {
// System.out.println("thread2");
// });
// Thread thread3 = new Thread(() -> {
// System.out.println("thread3");
// });
// thread1.start();
// thread1.join();
// thread2.start();
// thread2.join();
// thread3.start();
// thread3.join();
}
public static String encrypt(String string) {
String encryptedString = string;
char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
try {
byte[] btInput = string.getBytes();
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.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];
}
encryptedString = new String(str);
return encryptedString;
} catch (Exception e) {
e.printStackTrace();
return encryptedString;
}
}
/**
* 获取随机字母数字组合
*
* @param length
* 字符串长度
* @return
*/
public static String getRandomCharAndNumr(Integer length) {
String str = "";
Random random = new Random();
for (int i = 0; i < length; i++) {
boolean b = random.nextBoolean();
if (b) { // 字符串
// int choice = random.nextBoolean() ? 65 : 97; 取得65大写字母还是97小写字母
str += (char) (97 + random.nextInt(26));// 取得大写字母
} else { // 数字
str += String.valueOf(random.nextInt(10));
}
}
return str;
}
}
package com.subsidy.util;
import com.subsidy.common.configure.VODConfig;
import com.subsidy.common.exception.HttpException;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.vod.v20180717.VodClient;
import com.tencentcloudapi.vod.v20180717.models.DeleteMediaRequest;
import com.tencentcloudapi.vod.v20180717.models.DescribeCDNUsageDataRequest;
import com.tencentcloudapi.vod.v20180717.models.DescribeCDNUsageDataResponse;
import com.tencentcloudapi.vod.v20180717.models.MediaProcessTaskInput;
import com.tencentcloudapi.vod.v20180717.models.ProcessMediaRequest;
import com.tencentcloudapi.vod.v20180717.models.ProcessMediaResponse;
import com.tencentcloudapi.vod.v20180717.models.StatDataItem;
import com.tencentcloudapi.vod.v20180717.models.TranscodeTaskInput;
import org.springframework.stereotype.Component;
/**
* <p>
* 腾讯云 - 云点播API
* </p>
*
* @author DengMin
* @since 2022/8/1
*/
@Component
public class VodUtil {
private static String endpoint = "vod.tencentcloudapi.com";
/**
* 根据视频模版进行转码
* @param vodCode
* @return
*/
public static ProcessMediaResponse processMedia(VODConfig vodConfig, String vodCode) {
try {
//上传后直接转码
Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey());
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint(endpoint);
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
VodClient client = new VodClient(cred, "", clientProfile);
ProcessMediaRequest processMediaRequest = new ProcessMediaRequest();
MediaProcessTaskInput mediaProcessTaskInput1 = new MediaProcessTaskInput();
TranscodeTaskInput[] transcodeTaskInputs1 = new TranscodeTaskInput[1];
TranscodeTaskInput transcodeTaskInput1 = new TranscodeTaskInput();
transcodeTaskInput1.setDefinition(ConstantUtils.TEMPLATE_VOD);
transcodeTaskInputs1[0] = transcodeTaskInput1;
mediaProcessTaskInput1.setTranscodeTaskSet(transcodeTaskInputs1);
processMediaRequest.setMediaProcessTask(mediaProcessTaskInput1);
processMediaRequest.setFileId(vodCode);
return client.ProcessMedia(processMediaRequest);
} catch (Exception ex) {
throw new HttpException(50001);
}
}
/**
* 删除腾讯云上原视频
* @param vodCode
*/
public static void deleteMedia(VODConfig vodConfig, String vodCode) {
try {
//删除原视频
Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey());
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint(endpoint);
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
VodClient client = new VodClient(cred, "", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
DeleteMediaRequest req = new DeleteMediaRequest();
req.setFileId(vodCode);
// 返回的resp是一个DeleteMediaResponse的实例,与请求对象对应
client.DeleteMedia(req);
} catch (TencentCloudSDKException e) {
throw new HttpException(99999, e.getMessage());
}
}
/**
* 云点播域名的CDN统计数据
* @param vodConfig
* @param DataType
* @param startTime
* @param endTime
* @return
*/
public static StatDataItem[] DescribeCDNStatDetails(VODConfig vodConfig, String DataType, String startTime, String endTime) {
try {
Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey());
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint(endpoint);
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
VodClient client = new VodClient(cred, "", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
DescribeCDNUsageDataRequest req = new DescribeCDNUsageDataRequest();
req.setStartTime(startTime);
req.setEndTime(endTime);
req.setDataType(DataType);
// 返回的resp是一个DescribeCDNUsageDataResponse的实例,与请求对象对应
DescribeCDNUsageDataResponse resp = client.DescribeCDNUsageData(req);
// 返回的resp是一个DescribeCDNStatDetailsResponse的实例,与请求对象对应
return resp.getData();
} catch (TencentCloudSDKException e) {
e.printStackTrace();
throw new HttpException(99999, e.getMessage());
}
}
}
package com.subsidy.util.excel;
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelColumn {
String value() default "";
int col() default 1;
}
package com.subsidy.util.excel;
import java.lang.annotation.*;
/**
* <p>
* excel 字段
* </p>
*
* @author DengMin
* @date Created in 2020/08/28
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelColumnUtil {
String value() default "";
int col() default 0;
}
package com.subsidy.util.excel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Excel工具
*
* @author DengMin
* @date 2019/08/27 13:57
**/
@Slf4j
public class ExcelUtil {
private final static String EXCEL2003 = "xls";
private final static String EXCEL2007 = "xlsx";
/**
* 导入excel文件
*
* @param path
* @param cls
* @param file
* @param <T>
* @return
*/
public static <T> List<T> readExcel(String path, Class<T> cls, MultipartFile file) {
String fileName = file.getOriginalFilename();
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
log.info("上传文件格式不正确");
// throw new HTTPException(10022);
}
List<T> dataList = new ArrayList<>();
Workbook workbook = null;
try {
InputStream is = file.getInputStream();
if (fileName.endsWith(EXCEL2007)) {
// FileInputStream is = new FileInputStream(new File(path));
workbook = new XSSFWorkbook(is);
}
if (fileName.endsWith(EXCEL2003)) {
// FileInputStream is = new FileInputStream(new File(path));
workbook = new HSSFWorkbook(is);
}
if (workbook != null) {
Map<String, List<Field>> classMap = new HashMap<>();
List<Field> fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList());
fields.forEach(field -> {
ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class);
if (annotation != null) {
String value = annotation.value();
if (StringUtils.isBlank(value)) {
return;
}
if (!classMap.containsKey(value)) {
classMap.put(value, new ArrayList<>());
}
field.setAccessible(true);
classMap.get(value).add(field);
}
});
//索引-->columns
Map<Integer, List<Field>> reflectionMap = new HashMap<>();
//默认读取第一个sheet
Sheet sheet = workbook.getSheetAt(0);
boolean firstRow = true;
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
//提取标题
if (firstRow) {
for (int j = 0; j <= row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
String cellValue = getCellValue(cell);
if (classMap.containsKey(cellValue)) {
reflectionMap.put(j, classMap.get(cellValue));
}
}
firstRow = false;
} else {
//忽略空白行
if (row == null) {
continue;
}
try {
T t = cls.newInstance();
//判断是否为空白行
boolean allBlank = true;
for (int j = 0; j <= row.getLastCellNum(); j++) {
if (reflectionMap.containsKey(j)) {
Cell cell = row.getCell(j);
String cellValue = getCellValue(cell);
if (StringUtils.isNotBlank(cellValue)) {
allBlank = false;
}
List<Field> fieldList = reflectionMap.get(j);
fieldList.forEach(x -> {
try {
handleField(t, cellValue, x);
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e);
}
});
}
}
if (!allBlank) {
dataList.add(t);
}
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse row:%s exception!", i), e);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse excel exception!"), e);
} finally {
if (workbook != null) {
try {
workbook.close();
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse excel exception!"), e);
}
}
}
return dataList;
}
/**
* 导入excel文件
*
* @param path
* @param cls
* @param file
* @param <T>
* @return
*/
public static <T> List<T> readExcelWithoutTitle(String path, Class<T> cls, MultipartFile file) {
String fileName = file.getOriginalFilename();
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
log.info("上传文件格式不正确");
// throw new HTTPException(10022);
}
List<T> dataList = new ArrayList<>();
Workbook workbook = null;
try {
InputStream is = file.getInputStream();
if (fileName.endsWith(EXCEL2007)) {
// FileInputStream is = new FileInputStream(new File(path));
workbook = new XSSFWorkbook(is);
}
if (fileName.endsWith(EXCEL2003)) {
// FileInputStream is = new FileInputStream(new File(path));
workbook = new HSSFWorkbook(is);
}
if (workbook != null) {
Map<String, List<Field>> classMap = new HashMap<>();
List<Field> fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList());
fields.forEach(field -> {
ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class);
if (annotation != null) {
String value = annotation.value();
if (StringUtils.isBlank(value)) {
return;
}
if (!classMap.containsKey(value)) {
classMap.put(value, new ArrayList<>());
}
field.setAccessible(true);
classMap.get(value).add(field);
}
});
//索引-->columns
Map<Integer, List<Field>> reflectionMap = new HashMap<>();
//默认读取第一个sheet
Sheet sheet = workbook.getSheetAt(0);
boolean firstRow = true;
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
//提取标题
if (firstRow) {
for (int j = 0; j <= row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
String cellValue = getCellValue(cell);
if (classMap.containsKey(cellValue)) {
reflectionMap.put(j, classMap.get(cellValue));
}
}
firstRow = false;
} else {
//忽略空白行
if (row == null) {
continue;
}
try {
T t = cls.newInstance();
//判断是否为空白行
boolean allBlank = true;
for (int j = 0; j <= row.getLastCellNum(); j++) {
if (reflectionMap.containsKey(j)) {
Cell cell = row.getCell(j);
String cellValue = getCellValue(cell);
if (StringUtils.isNotBlank(cellValue)) {
allBlank = false;
}
List<Field> fieldList = reflectionMap.get(j);
fieldList.forEach(x -> {
try {
handleField(t, cellValue, x);
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e);
}
});
}
}
if (!allBlank) {
dataList.add(t);
}
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse row:%s exception!", i), e);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse excel exception!"), e);
} finally {
if (workbook != null) {
try {
workbook.close();
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse excel exception!"), e);
}
}
}
return dataList;
}
/**
* 导出excel文件
*
* @param list
* @param cls
* @param <T>
*/
public static <T> void writeExcel(List<T> list, Class cls) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletRequestAttributes.getResponse();
Field[] fields = cls.getDeclaredFields();
List<Field> fieldList = Arrays.stream(fields).filter(field -> {
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
if (annotation != null) {
field.setAccessible(true);
return true;
}
return false;
}).sorted(Comparator.comparing(field -> {
int col = 0;
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
if (annotation != null) {
col = annotation.col();
}
return col;
})).collect(Collectors.toList());
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
AtomicInteger ai = new AtomicInteger();
{
Row row = sheet.createRow(ai.getAndIncrement());
AtomicInteger at = new AtomicInteger();
fieldList.forEach(field -> {
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
String columnName = "";
if (annotation != null) {
columnName = annotation.value();
}
Cell cell = row.createCell(at.getAndIncrement());
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
cell.setCellValue(columnName);
});
if (list != null) {
list.forEach(data -> {
Row r = sheet.createRow(ai.getAndIncrement());
AtomicInteger a = new AtomicInteger();
fieldList.forEach(field -> {
try {
Class<?> type = field.getType();
Object value = field.get(data);
Cell cell = r.createCell(a.getAndIncrement());
if (value != null) {
cell.setCellValue(value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
});
for (int i = 0; i < list.size(); i++) {
sheet.autoSizeColumn(i);
}
}
String fileName = String.valueOf(new Date().getTime());
buildExcelDocument(fileName + "." + EXCEL2007, wb, response);
}
}
private static void setStyle(CellStyle cellStyle) {
// 水平居中
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
// 垂直居中
cellStyle.setVerticalAlignment(CellStyle.ALIGN_CENTER);
// 边框
cellStyle.setBorderTop(CellStyle.BORDER_THIN);
// 边框
cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
// 边框
cellStyle.setBorderRight(CellStyle.BORDER_THIN);
// 边框
cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
}
//也可用以下方法
public static void setBorderStyle(int border, CellRangeAddress region, SXSSFSheet sheet, SXSSFWorkbook wb) {
CellStyle cs = wb.createCellStyle(); // 样式对象
cs.setBorderBottom((short) border);
cs.setBorderTop((short) border);
cs.setBorderLeft((short) border);
cs.setBorderRight((short) border);
setRegionStyle(cs, region, sheet);
}
private static void setRegionStyle(CellStyle cs, CellRangeAddress region, SXSSFSheet sheet) {
for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {
SXSSFRow row = sheet.getRow(i);
if (row == null) {
row = sheet.createRow(i);
}
for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
SXSSFCell cell = row.getCell(j);
if (cell == null) {
cell = row.createCell(j);
cell.setCellValue("");
}
cell.setCellStyle(cs);
}
}
}
private static <T> void handleField(T t, String value, Field field) throws Exception {
Class<?> type = field.getType();
if (type == null || type == void.class || StringUtils.isBlank(value)) {
return;
}
if (type == Object.class) {
field.set(t, value);
//数字类型
} else if (type.getSuperclass() == null || type.getSuperclass() == Number.class) {
if (type == int.class || type == Integer.class) {
field.set(t, NumberUtils.toInt(value));
} else if (type == long.class || type == Long.class) {
field.set(t, NumberUtils.toLong(value));
} else if (type == byte.class || type == Byte.class) {
field.set(t, NumberUtils.toByte(value));
} else if (type == short.class || type == Short.class) {
field.set(t, NumberUtils.toShort(value));
} else if (type == double.class || type == Double.class) {
field.set(t, NumberUtils.toDouble(value));
} else if (type == float.class || type == Float.class) {
field.set(t, NumberUtils.toFloat(value));
} else if (type == char.class || type == Character.class) {
field.set(t, CharUtils.toChar(value));
} else if (type == boolean.class) {
field.set(t, BooleanUtils.toBoolean(value));
} else if (type == BigDecimal.class) {
field.set(t, new BigDecimal(value));
}
} else if (type == Boolean.class) {
field.set(t, BooleanUtils.toBoolean(value));
} else if (type == Date.class) {
//
field.set(t, value);
} else if (type == String.class) {
field.set(t, value);
} else {
Constructor<?> constructor = type.getConstructor(String.class);
field.set(t, constructor.newInstance(value));
}
}
private static String getCellValue(Cell cell) {
if (cell == null) {
return "";
}
if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
if (DateUtil.isCellDateFormatted(cell)) {
return HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else {
return new BigDecimal(cell.getNumericCellValue()).toString();
}
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return StringUtils.trimToEmpty(cell.getStringCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return StringUtils.trimToEmpty(cell.getCellFormula());
} else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
return "";
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {
return "ERROR";
} else {
return cell.toString().trim();
}
}
private static void buildExcelDocument(String fileName, Workbook wb, HttpServletResponse response) {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
response.flushBuffer();
wb.write(response.getOutputStream());
} catch (IOException e) {
log.error(String.format("downLoad excel exception"), e);
}
}
private static void buildExcelFile(String path, Workbook wb) {
File file = new File(path);
if (file.exists()) {
file.delete();
}
try {
wb.write(new FileOutputStream(file));
} catch (Exception e) {
log.error(String.format("downLoad excel exception"), e);
}
}
}
package com.subsidy.util.tree;
import lombok.Data;
@Data
public class Node implements Comparable<Node> {
//主键
private String id;
//同级节点第几个元素
private String number;
//1.1
private String text;
//父节点
private String parentId;
private int level;
public Node(String id, String number, String parentId, int level) {
this.id = id;
this.number = number;
this.parentId = parentId;
this.level = level;
}
@Override
public int compareTo(Node o) {
if (this.level != o.level) {
return o.level - this.level;
} else {
if(this.number==null){
return -1;
}
return this.number.compareTo(o.number);
}
}
}
package com.subsidy.util.tree;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class NumberTree {
private String id;
private List<Node> nodeList;
private String separator;
private int idSeq;
private SerialNumber number;
public NumberTree(String separator, SerialNumber number) {
init();
this.separator = separator;
this.number = number;
}
public void init() {
idSeq = 1;
this.separator = ".";
if (this.nodeList == null) {
nodeList = new ArrayList<Node>();
}
}
/**
* <p>功能描述:根据父节点获取所有子节点。</p>
*/
public List<Node> getChildNodes(Node pNode) {
String pId = pNode.getId();
return getChildNodes(pId);
}
/**
* <p>功能描述:根据父节点获取所有子节点。</p>
*/
public List<Node> getChildNodes(String pId) {
List<Node> childNodes = new ArrayList<Node>();
for (Node n : nodeList) {
if (pId.equals(n.getParentId())) {
childNodes.add(n);
}
}
return childNodes;
}
/**
* <p>功能描述:获取本级值最大的节点。</p>
*/
public Node getMaxNodeForThisLevel(Node pNode) {
List<Node> childList = getChildNodes(pNode);
Node root = getRoot(nodeList);
if (childList.size() <= 0) {
return null;
}
Node maxNode = root;
for (Node node : childList) {
if (maxNode.getNumber().compareTo(node.getNumber()) < 0) {
maxNode = node;
}
}
return maxNode;
}
/**
* <p>功能描述:生成下一个子节点。</p>
*/
public Node generateNextChildNode(Node node) {
Node newNode = null;
Node maxNode = getMaxNodeForThisLevel(node);
String nextNumber = number.firstNumber();
int level = node.getLevel();
if (maxNode != null && !"0".equals(maxNode.getId())) {//本级存在子节点,且非根节点
nextNumber = number.produceNext(maxNode.getNumber());
level = maxNode.getLevel();
}
newNode = new Node(String.valueOf(++idSeq), nextNumber, node.getId(), level);
generateNodeText(newNode, nextNumber);
return newNode;
}
/**
*
* <p>功能描述:获取父节点。</p>
*/
public Node getParentNode(Node node) {
for (Node n : nodeList) {
if (node.getParentId() == n.getId()) {
return n;
}
}
return node;
}
/**
* <p>功能描述:生成节点路径。</p>
*/
public void generateNodeText(Node node, String text) {
if (node == null || "0".equals(node.getId())) {
return;
}
Node pNode = getParentNode(node);
if (!"0".equals(pNode.getId())) {
text = pNode.getText() + separator + text;
}
node.setText(text);
}
/**
* <p>功能描述:遍历所有树节点。</p>
*/
public void traverseNodeList(Node node) {
if(node==null){
node = getRoot(nodeList);
}
List<Node> childNodes = getChildNodes(node);
System.out.println(node.getText());
if (childNodes.size() > 0) {
for (Node n : childNodes) {
traverseNodeList(n);
}
}
}
public static void main(String[] args) {
SerialNumber number = new SerialNumber();
NumberTree treeNode = new NumberTree(".", number);
addSomeNodes(treeNode);
treeNode.traverseNodeList(null);
}
/**
* <p>功能描述:获取根节点。</p>
*/
public Node getRoot(List<Node> nodeList) {
Node root = null;
if (nodeList.size() <= 0 || (root = getNodeById(nodeList, "0")) == null) {
root = createRoot();
nodeList.add(root);
}
return root;
}
private Node getNodeById(List<Node> nodeList, String id) {
Node node = null;
if(id!=null){
for (Node n : nodeList) {
if (id.equals(n.getId())) {
node = n;
break;
}
}
}
return node;
}
private Node createRoot() {
Node root = new Node("0", number.rootNumber(), "-1", 0);
root.setText("0");
return root;
}
/**
* <p>功能描述:测试添加节点。</p>
*/
private static Node addSomeNodes(NumberTree tree) {
Node root = tree.getRoot(tree.nodeList);
Node node1 = getNextNode(tree, root);//1
Node node2 = getNextNode(tree, root);//2
Node node3 = getNextNode(tree, root);//3
Node node11 = getNextNode(tree, node1);//1.1
Node node12 = getNextNode(tree, node1);//1.2
Node node21 = getNextNode(tree, node2);//2.1
Node node211 = getNextNode(tree, node21);//2.1.1
Node node212 = getNextNode(tree, node21);//2.1.2
Node node22 = getNextNode(tree, node2);//2.2
Node node221 = getNextNode(tree, node22);//2.2.1
Node node31 = getNextNode(tree, node3);
Node node32 = getNextNode(tree, node3);
Node node311 = getNextNode(tree, node31);
Node node3111 = getNextNode(tree, node311);
return root;
}
public static Node getNextNode(NumberTree tree, Node pNode) {
Node node = tree.generateNextChildNode(pNode);
if (node != null) {
tree.nodeList.add(node);
}
return node;
}
}
package com.subsidy.util.tree;
public class SerialNumber{
public String produceNext(String crrnt) {
String next = "0";
if (crrnt != null) {
try {
int crrntNum = Integer.parseInt(crrnt);
next = String.valueOf(crrntNum + 1);
} catch (Exception e) {
System.err.println("非数字类型的字符串!");
}
}
return next;
}
public String rootNumber() {
return "0";
}
public String firstNumber() {
return "1";
}
}
package com.subsidy.vo.administer;
import lombok.Data;
@Data
public class UserRoleVO {
private Long id;
private String telephone;
private String userName;
private String accountName;
private String image;
private String status;
private Integer firstLogin;
private String companyName;
private Boolean qxyStatus;
private Long companyId;
private String logo;
// private List<RotationImgDictDO> rotationImgDictDOS;
private String token;
private String superviseName;
}
package com.subsidy.vo.labor;
import lombok.Data;
@Data
public class AbnormalRecordVO {
private Long id;
private String gender;
private String telephone;
private String idCard;
private String payrollAccount;
private String bank;
private String wechatStatus;
private String fireStatus;
private String hireTime;
}
package com.subsidy.vo.labor;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class LoginVO {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 公司名称
*/
private Long companyId;
/**
* 账号
*/
private String accountName;
/**
* 手机号/企业账号
*/
private String telephone;
/**
* 成员名称
*/
private String userName;
/**
* 头像
*/
private String img;
/**
* 1:启用 0:禁用
*/
private String status;
/**
* role 0:平台运营者 1:超级管理员 2:普通成员
*/
private Integer role;
/**
* 备注
*/
private String remark;
}
package com.subsidy.vo.labor;
import lombok.Data;
@Data
public class ProjectManageVO {
private Long id;
private Long mappingId;
private String userName;
private String gender;
private String telephone;
private String idCard;
private String email;
private String payrollAccount;
private String bank;
private String openId;
private String jobName;
}
package com.subsidy.vo.labor;
import lombok.Data;
@Data
public class ProjectsVO {
private Long id;
private String projectName;
private String companyName;
private String salaryDate;
private String startDate;
private String endDate;
private Integer cnt;
}
package com.subsidy.vo.oss;
import lombok.Data;
@Data
public class GetSecretVO {
private String key;
private String secret;
}
package com.subsidy.vo.oss;
import lombok.Data;
@Data
public class UploadFileVO {
private String url;
}
# 本地环境配置
spring.server.port=23497
# 数据源配置
#spring.datasource.url=jdbc:mysql://116.62.57.92:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
##spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
##spring.datasource.username=ykadmin_new
##spring.datasource.password=youkedb608@good
#spring.datasource.username=devloper
#spring.datasource.password=dev@1553$
# 数据源配置
spring.datasource.url=jdbc:mysql://139.224.253.21:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=ykhladmin302
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=200
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#spring.redis.host=r-uf6meywj6ysuehg148pd.redis.rds.aliyuncs.com
#spring.redis.password=r-uf6meywj6ysuehg148:Ykhl@208
#spring.redis.port=6379
#spring.redis.lettuce.pool.max-idle=16
#spring.redis.lettuce.pool.max-active=32
#spring.redis.lettuce.pool.min-idle=8
#spring.application.name=spring-boot-mongodb
## mongodb
##spring.data.mongodb.uri=mongodb://47.97.19.66:27017/subsidy
#spring.data.mongodb.username=root
#spring.data.mongodb.password=123456
##spring.data.mongodb.authentication-database=subsidy
#spring.data.mongodb.database=subsidy
#spring.data.mongodb.host=47.97.19.66
#spring.data.mongodb.port=27017
spring.redis.host=47.97.19.66
spring.redis.password=Ykhl@208
spring.redis.port=6389
spring.redis.lettuce.pool.max-idle=16
spring.redis.lettuce.pool.max-active=32
spring.redis.lettuce.pool.min-idle=8
qxueyou.appId=qxywz5nnWMI77CM3Tx
qxueyou.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq95qxy
qxueyou.url=https://dev.qxueyou.com/auth/user/token
renshe.url = https://test.shzypxy.com
renshe.secretKey = ad927f0b-6a39-43a7-bac7-163baef1fff7
renshe.putuo = http://180.167.195.117:18015/ddproject
# 生产环境配置
spring.server.port=23497
# 数据源配置
spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/subsidy?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=ykadmin_new
spring.datasource.password=youkedb608@good
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
spring.datasource.druid.kill-when-socket-read-timeout=true
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#wechat.appId= wx7785293ff5e31f14
#wechat.appSecret= 25d57cad61fc1b45b3afa46d4c35e8f6
#wechat.msgUrl= https://teachai.youkehulian.com/login
#wechat.templateId= Z1HNPLOrKiHEjfR1KMP-cC-uH3BWqDJIHv365Ev20yQ
#spring.redis.cluster.nodes=47.97.19.66:6377,47.97.19.66:6378,47.97.16.66:6379
#spring.redis.password=Ykhl@208
#spring.redis.lettuce.pool.max-idle=16
#spring.redis.lettuce.pool.max-active=32
#spring.redis.lettuce.pool.min-idle=8
spring.redis.host=sh-crs-hq5xbrsq.sql.tencentcdb.com
spring.redis.password=Ykhl@302
spring.redis.port=20260
spring.redis.lettuce.pool.max-idle=16
spring.redis.lettuce.pool.max-active=32
spring.redis.lettuce.pool.min-idle=8
qxueyou.appId=qxy1a2n6h16012nJ6x
qxueyou.securityKey=44420Tlu-P463-9041-2h1q-29Z59qxy
qxueyou.url=https://www.qxueyou.com/auth/user/token
renshe.url = https://api.shzypxy.com
#renshe.url = http://trial.shzypxy.com/api
renshe.secretKey = ad927f0b-6a39-43a7-bac7-163baef1fff7
renshe.putuo = http://180.167.195.117:18025/ddproject
\ No newline at end of file
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount=15
spring.quartz.properties.org.quartz.threadPool.threadPriority=5
spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
\ No newline at end of file
# 环境配置 顶岗实习
spring.profiles.active=dev
#和CPU数
spring.server.acceptorThreadCount=600
spring.server.minSpareThreads=100
spring.server.maxSpareThreads=500
spring.server.maxThreads=500
spring.server.maxConnections=1000
#10秒超时
spring.server.connectionTimeout=20000
spring.server.protocol=org.apache.coyote.http11.Http11AprProtocol
spring.server.redirectPort=8443
spring.server.compression=on
#文件请求大小
spring.server.MaxFileSize=300MB
spring.server.MaxRequestSize=500MB
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=50MB
# 文件编码 UTF8
spring.mandatory-file-encoding=UTF-8
spring.jackson.time-zone=GMT+8
# 404 交给异常处理器处理
spring.mvc.throw-exception-if-no-handler-found=true
# 关闭静态资源的映射
spring.resources.add-mappings=false
# 关闭banner打印
mybatis-plus.global-config.banner=false
# mybatis-plus相关配置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# 是否开启自动驼峰命名规则映射
mybatis-plus.configuration.map-underscore-to-camel-case=true
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
mybatis-plus.configuration.call-setters-on-nulls=true
# 逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=NOW()
mybatis-plus.global-config.db-config.logic-not-delete-value=NULL
#日志配置
logging.config=classpath:logback-spring.xml
#ehcache缓存配置
spring.cache.type=ehcache
spring.cache.ehcache.config=classpath:ehcache.xml
# 阿里云短信
sms.product=Dysmsapi
sms.domain=dysmsapi.aliyuncs.com
sms.accessKeyId=LTAI5tPAH7P7WQVeowo517BE
sms.accessKeySecret=0ueqhIfdAZyw5lWlBVSLpAxTtx37RY
#wechat.app-id=wx7785293ff5e31f14
#wechat.app-secret=25d57cad61fc1b45b3afa46d4c35e8f6
#wechat.agentId=1000008
vod.appId=1302252447
vod.secretId=AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2
vod.secretKey=vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E
vod.api=vod.tencentcloudapi.com
vod.region=ap-shanghai
vod.classId=848920
# quartz
# 数据持久化方式
spring.quartz.job-store-type=jdbc
# 初始化后是否自动启动计划程序
spring.quartz.auto-startup=true
# 初始化完成后启动计划程序的延迟时间
spring.quartz.startup-delay=10s
# 配置的作业是否应覆盖现有的作业定义
spring.quartz.overwrite-existing-jobs=false
# 自动建表,如果已经存在表请勿使用,会覆盖数据表
#spring.quartz.jdbc.initialize-schema=always
#spring.datasource.initialization-mode=embedded
#spring.redis.host=r-uf6m4cpkjrgpzywjm3pd.redis.rds.aliyuncs.com
#spring.redis.port=6379
#spring.redis.password=r-uf6m4cpkjrgpzywjm3:Ykhl@208
wechat=
#pro
appId=wx5e1ecb9c9bd33451
appSecret=4f5e1abb6fb4f68f5273820b6295ec6b
#保利威视
polyv.userId=b8f2d3bfdc
polyv.appId=g3lrxnzd75
polyv.appSecret=ef9cdcbbb9184b61aca301ba8114d570
polyv.secretKey=03sqxr97fo
subsidy.appId=qxywz5nnWMI7ABCS
subsidy.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq9QUAJ
subsidy.url=http://subsidy.youkehulian.cn/auth/user/token
\ No newline at end of file
meishu.code-message[0]=成功
meishu.code-message[1010]=无效的令牌
meishu.code-message[1011]=当前账户已在其他设备登录
meishu.code-message[1012]=你已掉线,请重新登录
meishu.code-message[10003]=验证码错误
meishu.code-message[10004]=账号或密码错误
meishu.code-message[10010]=学生信息不存在
meishu.code-message[10011]=成员信息不存在
meishu.code-message[10012]=该账号不存在
meishu.code-message[10013]=账户已冻结,请联系账户管理员
meishu.code-message[10014]=该成员已存在,请勿重复添加
meishu.code-message[10015]=首次登录请使用验证码登录
meishu.code-message[10016]=密码输入错误,请稍后再试
meishu.code-message[10017]=该公司不存在该员工
meishu.code-message[10021]=密码输入错误,您还可以输入1次密码
meishu.code-message[10022]=密码输入错误,您还可以输入2次密码
meishu.code-message[10023]=密码输入错误,您还可以输入3次密码
meishu.code-message[10024]=密码输入错误,您还可以输入4次密码
meishu.code-message[10025]=身份证识别错误
meishu.code-message[10026]=姓名或身份证号格式不正确
meishu.code-message[10027]=该手机号已注册
meishu.code-message[10028]=该成员已在其他公司入职
meishu.code-message[10029]=密码输入错误
meishu.code-message[10030]=该账号未被授权
meishu.code-message[20001]=该课程已存在
meishu.code-message[20002]=该成员已存在
meishu.code-message[30001]=该部门已存在
meishu.code-message[40001]=该目录已存在
meishu.code-message[50001]=该试卷已存在
meishu.code-message[60001]=已超过最大测试次数
meishu.code-message[70010]=验证码错误
meishu.code-message[70011]=验证码发送频繁
meishu.code-message[70012]=手机号未注册
meishu.code-message[70013]=您今天已报名了同类型的场次
meishu.code-message[70014]=取消报名失败
meishu.code-message[80001]=uuid已过期
meishu.code-message[80002]=uuid验证失败
meishu.code-message[90001]=该类目已存在
meishu.code-message[10001]=导入失败
meishu.code-message[11001]=该行业已存在
meishu.code-message[70001]=添加通知失败,通知时间不能小于一小时
meishu.code-message[70002]=定时任务创建失败
meishu.code-message[70003]=定时任务删除失败
meishu.code-message[12001]=该职级已存在
meishu.code-message[13001]=已达到当日最大时长
meishu.code-message[14001]=认证失败,签名不通过
meishu.code-message[14002]=认证失败,签名已过期
meishu.code-message[15001]=类型已存在
meishu.code-message[15002]=类型已存在证书,删除失败
meishu.code-message[16001]=该条件已存在
meishu.code-message[17001]=系统不支持23:30:00~06:00:00学习
meishu.code-message[18001]=已超过当日验证次数上线
meishu.code-message[19001]=验证失败
meishu.code-message[20003]=提交时间过短,请稍后尝试
meishu.code-message[30002]=该产品已存在
meishu.code-message[31001]=该类别已存在
meishu.code-message[31002]=该项目已存在
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<defaultCache eternal="false"
maxElementsInMemory="1000"
overflowToDisk="false"
diskPersistent="true"
timeToIdleSeconds="0"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LRU" />
<!--
maxElementsInMemory 缓存最大个数,若放入Cache中的元素超过这个数值,则有以下两种情况
1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中
2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素
eternal 缓存中对象是否永久有效
timeToIdleSeconds 缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除
timeToLiveSeconds 缓存数据的总的存活时间(单位:秒),仅当eternal=false时使用,从创建开始计时,失效结束
overflowToDisk 内存不足时,是否启用磁盘缓存
diskPersistent 是否缓存虚拟机重启期数据
maxBytesLocalHeap 限制堆内存字节大小
-->
<!-- 云点播数据统计缓存 -->
<cache name="CDNStatDetails"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="0"
timeToLiveSeconds="28800"
memoryStoreEvictionPolicy="LRU"/>
<!-- 普通数据缓存 -->
<cache name="ResultData"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="0"
timeToLiveSeconds="7200"
memoryStoreEvictionPolicy="LRU"/>
</ehcache>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_PATH" value="logs/" />
<property name="APP_NAME" value="springboot-logback" />
<contextName>${APP_NAME}</contextName>
<jmxConfigurator />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-info.log</File>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-error.log</File>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>256MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<MaxHistory>180</MaxHistory>
</rollingPolicy>
</appender>
<springProfile name="dev">
<logger name="com.subsidy" level="debug" />
<logger name="com.subsidy" level="error" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<springProfile name="pre">
<logger name="com.subsidy" level="debug" />
<logger name="com.subsidy" level="error" />
<root level="INFO">
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<springProfile name="prod">
<logger name="com.subsidy" level="error" />
<root level="INFO">
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?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="com.subsidy.mapper.AdministerMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.subsidy.model.AdministerDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="telephone" property="telephone" />
<result column="account_name" property="accountName" />
<result column="password" property="password" />
<result column="company_id" property="companyId" />
<result column="user_name" property="userName" />
<result column="img" property="img" />
<result column="status" property="status" />
<result column="role" property="role" />
<result column="remark" property="remark" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, telephone, account_name, password, company_id, user_name, img, status, role, remark
</sql>
</mapper>
<?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="com.subsidy.mapper.AdministerProjectMappingMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.subsidy.model.AdministerProjectMappingDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="administer_id" property="administerId" />
<result column="project_id" property="projectId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, administer_id, project_id
</sql>
</mapper>
<?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="com.subsidy.mapper.LaborServiceDictMapper">
<select id="projects" parameterType="long" resultType="com.subsidy.vo.labor.ProjectsVO">
SELECT
t.id,
t.project_name,
t2.company_name,
t5.labor_service_name,
t.salary_date,
t.start_date,
t.end_date,
count( t3.id ) AS cnt
FROM
project t
LEFT JOIN company_dict t2 ON t.company_id = t2.id
LEFT JOIN project_member_mapping t3 ON t.id = t3.project_id
LEFT JOIN administer_project_mapping t4 ON t.id = t4.project_id
LEFT JOIN labor_service_dict t5 ON t.labor_service_id = t5.id
WHERE
t.delete_date IS NULL
AND t4.administer_id = #{administerId}
<if test="projectName != null and projectName != ''">
and t.project_name like concat('%', #{projectName},'%')
</if>
GROUP BY
t.id,
t.project_name,
t2.company_name,
t5.labor_service_name,
t.start_date,
t.end_date
</select>
<select id="projectManage" resultType="com.subsidy.vo.labor.ProjectManageVO">
SELECT
t2.id,
t.id as mappingId,
t2.user_name,
t2.gender,
t2.telephone,
t2.id_card,
t2.email,
t2.payroll_account,
t2.bank,
t2.open_id,
t.job_name
FROM
project_member_mapping t
LEFT JOIN member t2 ON t.member_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.project_id = #{projectId}
<if test="userInfo != null and userInfo != ''">
and (t2.user_name like concat('%', #{userInfo},'%') or t2.telephone like concat('%', #{userInfo},'%'))
</if>
</select>
<select id="abnormalRecord" resultType="com.subsidy.vo.labor.AbnormalRecordVO">
SELECT
t2.id,
t2.gender,
t2.telephone,
t2.id_card,
t2.payroll_account,
t2.bank,
if(t2.open_id is null,'是','否') as wechatStatus,
IF
( t.delete_date IS NULL, '入职', '离职' ) fireStatus,
IFNULL( t.delete_date, t.create_date ) AS hireTime
FROM
project_member_mapping t
LEFT JOIN member t2 ON t.member_id = t2.id
WHERE
t.project_id = #{projectId}
<if test="userInfo != null and userInfo != ''">
and (t2.user_name like concat('%', #{userInfo},'%') or t2.telephone like concat('%', #{userInfo},'%'))
</if>
ORDER BY
IFNULL( t.delete_date, t.create_date )
</select>
</mapper>
<?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="com.subsidy.mapper.MemberMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.subsidy.model.MemberDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="academy_id" property="academyId" />
<result column="company_id" property="companyId" />
<result column="user_name" property="userName" />
<result column="account_name" property="accountName" />
<result column="account_name_en" property="accountNameEn" />
<result column="email" property="email" />
<result column="work_no" property="workNo" />
<result column="induction_date" property="inductionDate" />
<result column="telephone" property="telephone" />
<result column="password" property="password" />
<result column="gender" property="gender" />
<result column="image" property="image" />
<result column="check_image" property="checkImage" />
<result column="check_time" property="checkTime" />
<result column="id_card" property="idCard" />
<result column="id_card_photo" property="idCardPhoto" />
<result column="status" property="status" />
<result column="first_login" property="firstLogin" />
<result column="qq_no" property="qqNo" />
<result column="wechat" property="wechat" />
<result column="practice_status" property="practiceStatus" />
<result column="college_id" property="collegeId" />
<result column="major" property="major" />
<result column="enrollment_year" property="enrollmentYear" />
<result column="payroll_account" property="payrollAccount" />
<result column="bank" property="bank" />
<result column="member_type" property="memberType" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, academy_id, company_id, user_name, account_name, account_name_en, email, work_no, induction_date, telephone, password, gender, image, check_image, check_time, id_card, id_card_photo, status, first_login, qq_no, wechat, practice_status, college_id, major, enrollment_year, payroll_account, bank, member_type
</sql>
</mapper>
<?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="com.subsidy.mapper.ProjectMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.subsidy.model.ProjectDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="project_name" property="projectName" />
<result column="company_id" property="companyId" />
<result column="labor_service_id" property="laborServiceId" />
<result column="salary_date" property="salaryDate" />
<result column="start_date" property="startDate" />
<result column="end_date" property="endDate" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, project_name, company_id, labor_service_id, salary_date, start_date, end_date
</sql>
</mapper>
<?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="com.subsidy.mapper.ProjectMemberMappingMapper">
</mapper>
<?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="com.subsidy.mapper.ProjectSalaryHistoryMapper">
</mapper>
<?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="com.subsidy.mapper.SmsVerifyCodeMapper">
</mapper>
# 此处为本项目src所在路径(代码生成器输出路径)
outputDir=/src/main/java
author=Tuyp
# 父的包名
setParent=com.subsidy
# mapper.xml文件生成路径
mapperPath=/src/main/resources/mapper/
# 数据库地址
url=jdbc:mysql://139.224.253.21:3306/subsidy?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&useAffectedRows=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
driverName=com.mysql.cj.jdbc.Driver
userName=root
password=ykhladmin302
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="SLF4J"/>
<!-- 开启驼峰命名转换 Table(create_date) -> Entity(createTime) -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
package ${package.Controller};
import org.springframework.web.bind.annotation.RequestMapping;
<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
</#if>
import io.swagger.annotations.Api;
/**
* <p>
* ${table.comment!} 前端控制器
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
@RestController
@Api(tags = "${table.comment!}")
<#else>
@Controller
</#if>
@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if kotlin>
class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
<#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
</#if>
}
</#if>
package ${package.Entity};
<#list table.importPackages as pkg>
import ${pkg};
</#list>
<#if swagger2>
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Data;
import lombok.EqualsAndHashCode;
<#if chainModel>
import lombok.experimental.Accessors;
</#if>
</#if>
/**
* <p>
* ${table.comment!}
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
@Data
<#if superEntityClass??>
@EqualsAndHashCode(callSuper = true)
<#else>
@EqualsAndHashCode(callSuper = false)
</#if>
<#if chainModel>
@Accessors(chain = true)
</#if>
</#if>
<#if table.convert>
@TableName("${table.name}")
</#if>
<#if swagger2>
@ApiModel(value="${entity}对象", description="${table.comment!}")
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#else>
public class ${entity} implements Serializable {
</#if>
<#if entitySerialVersionUID>
private static final long serialVersionUID = 1L;
</#if>
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
<#if field.keyFlag>
<#assign keyPropertyName="${field.propertyName}"/>
</#if>
<#if field.comment!?length gt 0>
<#if swagger2>
@ApiModelProperty(value = "${field.comment}")
<#else>
/**
* ${field.comment}
*/
</#if>
</#if>
<#if field.keyFlag>
<#-- 主键 -->
<#if field.keyIdentityFlag>
@TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
<#elseif idType??>
@TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
<#elseif field.convert>
@TableId("${field.annotationColumnName}")
</#if>
<#-- 普通字段 -->
<#elseif field.fill??>
<#-- ----- 存在字段填充设置 ----->
<#if field.convert>
@TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
<#else>
@TableField(fill = FieldFill.${field.fill})
</#if>
<#elseif field.convert>
@TableField("${field.annotationColumnName}")
</#if>
<#-- 乐观锁注解 -->
<#if (versionFieldName!"") == field.name>
@Version
</#if>
<#-- 逻辑删除注解 -->
<#if (logicDeleteFieldName!"") == field.name>
@TableLogic
</#if>
private ${field.propertyType} ${field.propertyName};
</#list>
<#------------ END 字段循环遍历 ---------->
<#if !entityLombokModel>
<#list table.fields as field>
<#if field.propertyType == "boolean">
<#assign getprefix="is"/>
<#else>
<#assign getprefix="get"/>
</#if>
public ${field.propertyType} ${getprefix}${field.capitalName}() {
return ${field.propertyName};
}
<#if chainModel>
public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
<#else>
public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
</#if>
this.${field.propertyName} = ${field.propertyName};
<#if chainModel>
return this;
</#if>
}
</#list>
</#if>
<#if entityColumnConstant>
<#list table.fields as field>
public static final String ${field.name?upper_case} = "${field.name}";
</#list>
</#if>
<#if activeRecord>
@Override
protected Serializable pkVal() {
<#if keyPropertyName??>
return this.${keyPropertyName};
<#else>
return null;
</#if>
}
</#if>
<#if !entityLombokModel>
@Override
public String toString() {
return "${entity}{" +
<#list table.fields as field>
<#if field_index==0>
"${field.propertyName}=" + ${field.propertyName} +
<#else>
", ${field.propertyName}=" + ${field.propertyName} +
</#if>
</#list>
"}";
}
</#if>
}
package ${package.Mapper};
import ${package.Entity}.${entity};
import ${superMapperClassPackage};
import org.springframework.stereotype.Repository;
/**
* <p>
* ${table.comment!} Mapper 接口
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
@Repository
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
</#if>
<?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="${package.Mapper}.${table.mapperName}">
<#if enableCache>
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
</#if>
<#if baseResultMap>
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
<#list table.fields as field>
<#if field.keyFlag><#--生成主键排在第一位-->
<id column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
<#list table.commonFields as field><#--生成公共字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
</resultMap>
</#if>
<#if baseColumnList>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
<#list table.commonFields as field>
${field.columnName},
</#list>
${table.fieldNames}
</sql>
</#if>
</mapper>
package ${package.Service};
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
/**
* <p>
* ${table.comment!} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
}
</#if>
package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* <p>
* ${table.comment!} 服务实现类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Service
<#if kotlin>
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
}
<#else>
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {
}
</#if>
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
</configuration>
</facet>
</component>
<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="library" name="jre1.8" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.7.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" name="Maven: org.springframework:spring-core:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.9.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.9" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.22" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.22" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.22" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.17.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.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" />
<orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.1" level="project" />
<orderEntry type="library" name="Maven: com.tencentcloudapi:tencentcloud-sdk-java:3.1.322" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp:okhttp:2.7.5" 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: com.squareup.okhttp:logging-interceptor:2.7.5" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: com.qcloud:vod_api:2.1.2" level="project" />
<orderEntry type="library" name="Maven: com.qcloud:cos_api:5.6.8" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.10.3" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.7.26" level="project" />
<orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.1.7.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.17" 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-jdbc:2.1.7.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.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.8" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.3.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.3.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.1" 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.alibaba:fastjson:1.2.58" 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: net.bytebuddy:byte-buddy:1.9.16" 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.google.guava:guava:20.0" 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: org.apache.poi:poi-ooxml:3.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.9" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.9" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itext-asian:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.4.1" level="project" />
<orderEntry type="library" name="Maven: com.auth0:java-jwt:3.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.5" level="project" />
<orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-greek:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-cyrillic:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.38.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.38.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.38.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.38.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.38.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.38.Final" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.11.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-quartz:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.1" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.15" level="project" />
<orderEntry type="library" name="Maven: redis.clients:jedis:3.3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.6.2" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-websocket:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.1.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.java-websocket:Java-WebSocket:1.5.1" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.5.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: net.sf.ehcache:ehcache:2.10.6" level="project" />
<orderEntry type="library" name="Maven: net.polyv:polyv-java-live-sdk:2.0.4" level="project" />
<orderEntry type="library" name="Maven: net.polyv:polyv-java-sdk-common:2.0.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.9" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-simple:1.7.26" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.15.0" level="project" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.10.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.13.0" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
</component>
</module>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!