dongbw преди 8 години
ревизия
dd52ac95e9
променени са 30 файла, в които са добавени 1761 реда и са изтрити 0 реда
  1. 57 0
      .gitignore
  2. 226 0
      donate-console/pom.xml
  3. 20 0
      donate-console/src/main/java/com/uas/console/donate/Application.java
  4. 128 0
      donate-console/src/main/java/com/uas/console/donate/DruidDBConfiguration.java
  5. 75 0
      donate-console/src/main/java/com/uas/console/donate/WebAppConfiguration.java
  6. 8 0
      donate-console/src/main/java/com/uas/console/donate/service/TsetService.java
  7. 44 0
      donate-console/src/main/java/com/uas/console/donate/util/ArrayUtils.java
  8. 19 0
      donate-console/src/main/java/com/uas/console/donate/util/CollectionUtils.java
  9. 73 0
      donate-console/src/main/java/com/uas/console/donate/util/ContextUtils.java
  10. 44 0
      donate-console/src/main/java/com/uas/console/donate/util/ExceptionUtils.java
  11. 36 0
      donate-console/src/main/java/com/uas/console/donate/util/NumberGenerator.java
  12. 47 0
      donate-console/src/main/java/com/uas/console/donate/util/ObjectUtils.java
  13. 29 0
      donate-console/src/main/java/com/uas/console/donate/util/StringUtils.java
  14. 26 0
      donate-console/src/main/resources/config/application-dev.properties
  15. 26 0
      donate-console/src/main/resources/config/application-test.properties
  16. 226 0
      donate-service/pom.xml
  17. 20 0
      donate-service/src/main/java/com/usa/service/donate/Application.java
  18. 128 0
      donate-service/src/main/java/com/usa/service/donate/DruidDBConfiguration.java
  19. 75 0
      donate-service/src/main/java/com/usa/service/donate/WebAppConfiguration.java
  20. 8 0
      donate-service/src/main/java/com/usa/service/donate/service/TestService.java
  21. 44 0
      donate-service/src/main/java/com/usa/service/donate/util/ArrayUtils.java
  22. 19 0
      donate-service/src/main/java/com/usa/service/donate/util/CollectionUtils.java
  23. 73 0
      donate-service/src/main/java/com/usa/service/donate/util/ContextUtils.java
  24. 44 0
      donate-service/src/main/java/com/usa/service/donate/util/ExceptionUtils.java
  25. 36 0
      donate-service/src/main/java/com/usa/service/donate/util/NumberGenerator.java
  26. 47 0
      donate-service/src/main/java/com/usa/service/donate/util/ObjectUtils.java
  27. 29 0
      donate-service/src/main/java/com/usa/service/donate/util/StringUtils.java
  28. 26 0
      donate-service/src/main/resources/config/application-dev.properties
  29. 26 0
      donate-service/src/main/resources/config/application-test.properties
  30. 102 0
      pom.xml

+ 57 - 0
.gitignore

@@ -0,0 +1,57 @@
+# Eclipse
+.metadata/
+.settings/
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+.project
+.classpath
+.loadpath
+
+## External tool builders
+.externalToolBuilders/
+
+## Locally stored "Eclipse launch configurations"
+*.launch
+
+## Java annotation processor (APT)
+.factorypath
+
+## STS (Spring Tool Suite)
+.springBeans
+
+# IntelliJ
+.idea/
+*.iml
+
+## File-based project format
+*.iws
+
+# Java
+## Compiled class file
+*.class
+
+## Log file
+*.log
+*.log.*
+git
+## Package files
+*.jar
+
+## Virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# Maven
+target/
+
+## Maven release plugin
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties

+ 226 - 0
donate-console/pom.xml

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>donate-parent</artifactId>
+        <groupId>com.uas.donate</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>donate-console</artifactId>
+    <packaging>war</packaging>
+
+    <profiles>
+        <profile>
+            <!-- 开发环境 -->
+            <id>dev</id>
+            <properties>
+                <profile>dev</profile>
+                <!-- static plugin -->
+                <static-path>static</static-path>
+            </properties>
+
+        </profile>
+        <profile>
+            <!-- 测试环境 -->
+            <id>test</id>
+            <properties>
+                <profile>test</profile>
+                <!-- static plugin -->
+                <static-path>static</static-path>
+            </properties>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
+        <profile>
+            <!-- 生产环境 -->
+            <id>prod</id>
+            <properties>
+                <profile>prod</profile>
+                <!-- static plugin -->
+                <static-path>http://static.ubtob.com</static-path>
+            </properties>
+            <!-- 默认 -->
+
+        </profile>
+    </profiles>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- spring boot -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</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-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.google.code.maven-svn-revision-number-plugin</groupId>
+                <artifactId>svn-revision-number-maven-plugin</artifactId>
+                <version>1.13</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>revision</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <entries>
+                        <entry>
+                            <prefix>svn</prefix>
+                        </entry>
+                    </entries>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.tmatesoft.svnkit</groupId>
+                        <artifactId>svnkit</artifactId>
+                        <version>1.8.10</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/minify</outputDirectory>
+                            <overwrite>false</overwrite>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/src/main/webapp</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.uas.plugins</groupId>
+                <artifactId>static-maven-plugin</artifactId>
+                <version>0.0.2-SNAPSHOT</version>
+                <!-- 静态资源分离 -->
+                <executions>
+                    <execution>
+                        <id>default-static</id>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <webappDir>${project.build.directory}/minify</webappDir>
+                            <sourceDir>/</sourceDir>
+                            <targetDir>${project.build.directory}/statics</targetDir>
+                            <staticDir>/</staticDir>
+                            <sourceIncludes>
+                                <sourceInclude>resources/js/**/*.js</sourceInclude>
+                                <sourceInclude>resources/css/**/*.css</sourceInclude>
+                                <sourceInclude>WEB-INF/views/**/*.html</sourceInclude>
+                            </sourceIncludes>
+                            <!-- http://static.ubtoc.com/css/index.css?_v=1450321871828 -->
+                            <versionSuffix>
+                                <suffix>?_v=${svn.revision}</suffix>
+                                <exclude>resources/lib/**/*</exclude>
+                            </versionSuffix>
+                        </configuration>
+                        <goals>
+                            <goal>static</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>
+                                            com.google.code.maven-svn-revision-number-plugin
+                                        </groupId>
+                                        <artifactId>
+                                            svn-revision-number-maven-plugin
+                                        </artifactId>
+                                        <versionRange>
+                                            [1.13,)
+                                        </versionRange>
+                                        <goals>
+                                            <goal>
+                                                revision
+                                            </goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore></ignore>
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+
+</project>

+ 20 - 0
donate-console/src/main/java/com/uas/console/donate/Application.java

@@ -0,0 +1,20 @@
+package com.uas.console.donate;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+@RestController
+public class Application {
+
+    @RequestMapping("/")
+    public String greeting() {
+        return "Index Page Of donate-console!";
+    }
+
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
+}

+ 128 - 0
donate-console/src/main/java/com/uas/console/donate/DruidDBConfiguration.java

@@ -0,0 +1,128 @@
+package com.uas.console.donate;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+@Configuration
+public class DruidDBConfiguration {
+
+	private Logger logger = LoggerFactory.getLogger(DruidDBConfiguration.class);
+
+	@Value("${datasource.url}")
+	private String url;
+
+	@Value("${datasource.username}")
+	private String username;
+
+	@Value("${datasource.password}")
+	private String password;
+
+	@Value("${datasource.driverClassName}")
+	private String driverClassName;
+
+	@Value("${datasource.initialSize}")
+	private int initialSize;
+
+	@Value("${datasource.minIdle}")
+	private int minIdle;
+
+	@Value("${datasource.maxActive}")
+	private int maxActive;
+
+	@Value("${datasource.maxWait}")
+	private int maxWait;
+
+	@Value("${datasource.timeBetweenEvictionRunsMillis}")
+	private int timeBetweenEvictionRunsMillis;
+
+	@Value("${datasource.minEvictableIdleTimeMillis}")
+	private int minEvictableIdleTimeMillis;
+
+	@Value("${datasource.validationQuery}")
+	private String validationQuery;
+
+	@Value("${datasource.testWhileIdle}")
+	private boolean testWhileIdle;
+
+	@Value("${datasource.testOnBorrow}")
+	private boolean testOnBorrow;
+
+	@Value("${datasource.testOnReturn}")
+	private boolean testOnReturn;
+
+	@Value("${datasource.timeBetweenLogStatsMillis}")
+	private int timeBetweenLogStatsMillis;
+
+	@Value("${datasource.poolPreparedStatements}")
+	private boolean poolPreparedStatements;
+
+	@Value("${datasource.maxPoolPreparedStatementPerConnectionSize}")
+	private int maxPoolPreparedStatementPerConnectionSize;
+
+	@Value("${datasource.filters}")
+	private String filters;
+
+	@Value("${datasource.connectionProperties}")
+	private String connectionProperties;
+
+	@Bean
+	@Primary
+	public DataSource dataSource() {
+		DruidDataSource dataSource = new DruidDataSource();
+
+		dataSource.setUrl(url);
+		dataSource.setUsername(username);
+		dataSource.setPassword(password);
+		dataSource.setDriverClassName(driverClassName);
+
+		// configuration
+		dataSource.setInitialSize(initialSize);
+		dataSource.setMinIdle(minIdle);
+		dataSource.setMaxActive(maxActive);
+		dataSource.setMaxWait(maxWait);
+		dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+		dataSource.setValidationQuery(validationQuery);
+		dataSource.setTestWhileIdle(testWhileIdle);
+		dataSource.setTestOnBorrow(testOnBorrow);
+		dataSource.setTestOnReturn(testOnReturn);
+		dataSource.setTimeBetweenLogStatsMillis(timeBetweenLogStatsMillis);
+		dataSource.setPoolPreparedStatements(poolPreparedStatements);
+		dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+		try {
+			dataSource.setFilters(filters);
+		} catch (SQLException e) {
+			logger.error("数据源初始化失败: setFilters", e);
+		}
+		dataSource.setConnectionProperties(connectionProperties);
+		return dataSource;
+	}
+
+	@Bean
+	public ServletRegistrationBean servletRegistrationBean() {
+		return new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
+	}
+
+	@Bean
+	public FilterRegistrationBean filterRegistrationBean() {
+		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
+		filterRegistrationBean.setFilter(new WebStatFilter());
+		filterRegistrationBean.addUrlPatterns("/*");
+		filterRegistrationBean.addInitParameter("exclusions",
+				"*.js,*.gif,*.jpg,*.png,*.bmp,*.css,*.ico,*.html,/druid/*");
+		return filterRegistrationBean;
+	}
+
+}

+ 75 - 0
donate-console/src/main/java/com/uas/console/donate/WebAppConfiguration.java

@@ -0,0 +1,75 @@
+package com.uas.console.donate;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.view.InternalResourceViewResolver;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Web相关配置
+ * 
+ * @author sunyj
+ * @since 2017年2月17日 下午5:45:38
+ */
+@Configuration
+@ComponentScan(basePackages = "com.uas.finance.controller")
+public class WebAppConfiguration extends WebMvcConfigurerAdapter {
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		// Spring boot默认资源路径在src/main/resources下,而非/src/main/webapp
+		// 使用/src/main/webapp下资源均需在此添加
+		registry.addResourceHandler("/static/**").addResourceLocations("/resources/");
+		registry.addResourceHandler("/WEB-INF/**").addResourceLocations("/WEB-INF/");
+		super.addResourceHandlers(registry);
+	}
+
+	@Override
+	public void configureViewResolvers(ViewResolverRegistry registry) {
+		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver("/WEB-INF/views/", ".html");
+		viewResolver.setContentType("text/html;charset=UTF-8");
+		registry.viewResolver(viewResolver);
+		super.configureViewResolvers(registry);
+	}
+
+	@Override
+	public void addViewControllers(ViewControllerRegistry registry) {
+		registry.addViewController("/").setViewName("index");
+		registry.addViewController("/index").setViewName("index");
+		registry.addViewController("/console").setViewName("console");
+		registry.addViewController("/fileUpload").setViewName("fileUpload");
+		registry.addViewController("/login/proxy").setViewName("proxyLogin");
+		registry.addViewController("/logout/proxy").setViewName("proxyLogout");
+		super.addViewControllers(registry);
+	}
+
+	@Override
+	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+		FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
+		fastJsonHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
+		FastJsonConfig fastJsonConfig = new FastJsonConfig();
+		fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
+		fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
+		converters.add(fastJsonHttpMessageConverter);
+
+		StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(
+				Charset.forName("UTF-8"));
+		stringHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));
+		converters.add(stringHttpMessageConverter);
+		super.configureMessageConverters(converters);
+	}
+
+}

+ 8 - 0
donate-console/src/main/java/com/uas/console/donate/service/TsetService.java

@@ -0,0 +1,8 @@
+package com.uas.console.donate.service;
+
+/**
+ * Created by dongbw
+ * 17/09/27 16:25.
+ */
+public class TsetService {
+}

+ 44 - 0
donate-console/src/main/java/com/uas/console/donate/util/ArrayUtils.java

@@ -0,0 +1,44 @@
+package com.uas.console.donate.util;
+
+/**
+ * @author sunyj
+ * @since 2017年4月21日 下午9:01:53
+ */
+public class ArrayUtils {
+
+	public static boolean isEmpty(Object[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(long[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(int[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(short[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(char[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(byte[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(double[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(float[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(boolean[] array) {
+		return array == null || array.length == 0;
+	}
+}

+ 19 - 0
donate-console/src/main/java/com/uas/console/donate/util/CollectionUtils.java

@@ -0,0 +1,19 @@
+package com.uas.console.donate.util;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @author sunyj
+ * @since 2017年4月21日 下午9:43:31
+ */
+public class CollectionUtils {
+
+	public static boolean isEmpty(Collection<?> coll) {
+		return (coll == null || coll.isEmpty());
+	}
+
+	public static boolean isEmpty(Map<?, ?> map) {
+		return (map == null || map.isEmpty());
+	}
+}

+ 73 - 0
donate-console/src/main/java/com/uas/console/donate/util/ContextUtils.java

@@ -0,0 +1,73 @@
+package com.uas.console.donate.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * spring容器上下文对象
+ * 
+ * @author yingp
+ *
+ */
+public class ContextUtils {
+	private static ApplicationContext applicationContext;
+
+	private static Logger logger = LoggerFactory.getLogger(ContextUtils.class);
+
+	public static void setApplicationContext(ApplicationContext applicationContext) {
+		synchronized (ContextUtils.class) {
+			logger.debug("setApplicationContext, notifyAll");
+			ContextUtils.applicationContext = applicationContext;
+			ContextUtils.class.notifyAll();
+		}
+	}
+
+	public static ApplicationContext getApplicationContext() {
+		synchronized (ContextUtils.class) {
+			while (applicationContext == null) {
+				try {
+					logger.debug("getApplicationContext, wait...");
+					ContextUtils.class.wait(60000);
+					if (applicationContext == null) {
+						logger.warn("Have been waiting for ApplicationContext to be set for 1 minute", new Exception());
+					}
+				} catch (InterruptedException ex) {
+					logger.debug("getApplicationContext, wait interrupted");
+				}
+			}
+			return applicationContext;
+		}
+	}
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param name
+	 * @return
+	 */
+	public static Object getBean(String name) {
+		return getApplicationContext().getBean(name);
+	}
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param cls
+	 * @return
+	 */
+	public static <T> T getBean(Class<T> cls) {
+		return getApplicationContext().getBean(cls);
+	}
+
+	/**
+	 * 触发事件
+	 * 
+	 * @param event
+	 */
+	public static void publishEvent(ApplicationEvent event) {
+		getApplicationContext().publishEvent(event);
+	}
+
+}

+ 44 - 0
donate-console/src/main/java/com/uas/console/donate/util/ExceptionUtils.java

@@ -0,0 +1,44 @@
+package com.uas.console.donate.util;
+
+/**
+ * 处理异常的工具类
+ * 
+ * @author sunyj
+ * @since 2017年8月10日 下午3:26:55
+ */
+public class ExceptionUtils {
+
+	/**
+	 * 获取异常及其Cause拼接成的字符串
+	 * 
+	 * @param e
+	 *            异常
+	 * @return 拼接后的结果
+	 */
+	public static String getMessage(Throwable e) {
+		StringBuilder sb = new StringBuilder(e.toString());
+		if (e.getCause() != null) {
+			sb.append("\nCaused by: ").append(getMessage(e.getCause()));
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 获取异常及其Cause的StackTrace拼接成的字符串
+	 * 
+	 * @param e
+	 *            异常
+	 * @return 拼接后的结果
+	 */
+	public static String getDetailedMessage(Throwable e) {
+		StringBuilder sb = new StringBuilder(e.toString());
+		StackTraceElement[] stackTraceElements = e.getStackTrace();
+		for (StackTraceElement stackTraceElement : stackTraceElements) {
+			sb.append("\n\t").append(stackTraceElement.toString());
+		}
+		if (e.getCause() != null) {
+			sb.append("\nCaused by: ").append(getDetailedMessage(e.getCause()));
+		}
+		return sb.toString();
+	}
+}

+ 36 - 0
donate-console/src/main/java/com/uas/console/donate/util/NumberGenerator.java

@@ -0,0 +1,36 @@
+package com.uas.console.donate.util;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 数字生成工具类
+ * 
+ * @author sunyj
+ * @since 2017年8月22日 上午11:34:44
+ */
+public class NumberGenerator {
+
+	/**
+	 * 生成id时的偏移量
+	 */
+	private static int offset = 0;
+
+	/**
+	 * @return 产生唯一的id(一毫秒内不超过100个则不重复)
+	 */
+	public static String generateId() {
+		// 偏移量,不超过100个
+		offset = (offset + 1) % 100;
+		// 当前毫秒数
+		long now = new Date().getTime();
+		// 起始时间 2017-01-01 00:00:00:000
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.set(2017, 0, 1, 0, 0, 0);
+		startCalendar.set(Calendar.MILLISECOND, 0);
+		// 偏移量加16,保证得到的是两位16进制字符
+		String hex = Long.toHexString(now - startCalendar.getTimeInMillis()) + Integer.toHexString(offset + 16);
+		// 最后反转并转为大写
+		return hex.toUpperCase();
+	}
+}

+ 47 - 0
donate-console/src/main/java/com/uas/console/donate/util/ObjectUtils.java

@@ -0,0 +1,47 @@
+package com.uas.console.donate.util;
+
+import java.io.*;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * 对象工具类
+ * 
+ * @author sunyj
+ * @since 2017年9月1日 下午3:54:26
+ */
+public class ObjectUtils {
+
+	/**
+	 * 判断是否为null、空串或者空集合
+	 * 
+	 * @param obj
+	 * @return
+	 */
+	public static boolean isEmpty(Object obj) {
+		return obj == null || (obj instanceof String && StringUtils.isEmpty((String) obj))
+				|| (obj instanceof Collection && CollectionUtils.isEmpty((Collection<?>) obj))
+				|| (obj instanceof Map && CollectionUtils.isEmpty((Map<?, ?>) obj));
+	}
+
+	/**
+	 * 深克隆对象
+	 * 
+	 * @param t
+	 *            要克隆的对象
+	 * @return 克隆得到的对象
+	 * @throws IOException
+	 * @throws ClassNotFoundException
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T extends Serializable> T clone(T t)
+			throws IOException, ClassNotFoundException, NotSerializableException {
+		if (t == null) {
+			return null;
+		}
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		new ObjectOutputStream(out).writeObject(t);
+		ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray()));
+		return (T) in.readObject();
+	}
+}

+ 29 - 0
donate-console/src/main/java/com/uas/console/donate/util/StringUtils.java

@@ -0,0 +1,29 @@
+package com.uas.console.donate.util;
+
+/**
+ * @author sunyj
+ * @since 2017年5月25日 上午11:09:36
+ */
+public class StringUtils {
+
+	public static boolean isEmpty(Object str) {
+		return (str == null || "".equals(str));
+	}
+
+	public static String reverse(String str) {
+		if (isEmpty(str)) {
+			return str;
+		}
+		char[] array = str.toCharArray();
+		int begin = 0;
+		int end = str.length() - 1;
+		while (begin < end) {
+			array[begin] = (char) (array[begin] ^ array[end]);
+			array[end] = (char) (array[begin] ^ array[end]);
+			array[begin] = (char) (array[begin] ^ array[end]);
+			begin++;
+			end--;
+		}
+		return new String(array);
+	}
+}

+ 26 - 0
donate-console/src/main/resources/config/application-dev.properties

@@ -0,0 +1,26 @@
+datasource.url=jdbc:mysql://192.168.253.12:3306/donate?characterEncoding=utf-8
+datasource.username=root
+datasource.password=select111***
+datasource.driverClassName=com.mysql.jdbc.Driver
+datasource.initialSize=3
+datasource.minIdle=1
+datasource.maxActive=20
+datasource.maxWait=60000
+datasource.timeBetweenEvictionRunsMillis=60000
+datasource.minEvictableIdleTimeMillis=300000
+datasource.validationQuery=SELECT 1 FROM DUAL
+datasource.testWhileIdle=true
+datasource.testOnBorrow=true
+datasource.testOnReturn=false
+datasource.poolPreparedStatements=true
+datasource.timeBetweenLogStatsMillis=60000
+datasource.maxPoolPreparedStatementPerConnectionSize=20
+datasource.filters=stat,slf4j
+datasource.connectionProperties=druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000
+
+security.basic.enabled=true
+security.basic.path=/console
+security.user.name=admin
+security.user.password=select111***
+security.user.role=ADMIN
+security.ignored=false

+ 26 - 0
donate-console/src/main/resources/config/application-test.properties

@@ -0,0 +1,26 @@
+datasource.url=jdbc:mysql://192.168.253.12:3306/donate?characterEncoding=utf-8
+datasource.username=root
+datasource.password=select111***
+datasource.driverClassName=com.mysql.jdbc.Driver
+datasource.initialSize=3
+datasource.minIdle=1
+datasource.maxActive=20
+datasource.maxWait=60000
+datasource.timeBetweenEvictionRunsMillis=60000
+datasource.minEvictableIdleTimeMillis=300000
+datasource.validationQuery=SELECT 1 FROM DUAL
+datasource.testWhileIdle=true
+datasource.testOnBorrow=true
+datasource.testOnReturn=false
+datasource.poolPreparedStatements=true
+datasource.timeBetweenLogStatsMillis=60000
+datasource.maxPoolPreparedStatementPerConnectionSize=20
+datasource.filters=stat,slf4j
+datasource.connectionProperties=druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000
+
+security.basic.enabled=true
+security.basic.path=/console
+security.user.name=admin
+security.user.password=select111***
+security.user.role=ADMIN
+security.ignored=false

+ 226 - 0
donate-service/pom.xml

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>donate-parent</artifactId>
+        <groupId>com.uas.donate</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>donate-service</artifactId>
+    <packaging>war</packaging>
+
+    <profiles>
+        <profile>
+            <!-- 开发环境 -->
+            <id>dev</id>
+            <properties>
+                <profile>dev</profile>
+                <!-- static plugin -->
+                <static-path>static</static-path>
+            </properties>
+
+        </profile>
+        <profile>
+            <!-- 测试环境 -->
+            <id>test</id>
+            <properties>
+                <profile>test</profile>
+                <!-- static plugin -->
+                <static-path>static</static-path>
+            </properties>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
+        <profile>
+            <!-- 生产环境 -->
+            <id>prod</id>
+            <properties>
+                <profile>prod</profile>
+                <!-- static plugin -->
+                <static-path>http://static.ubtob.com</static-path>
+            </properties>
+            <!-- 默认 -->
+
+        </profile>
+    </profiles>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- spring boot -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</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-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.google.code.maven-svn-revision-number-plugin</groupId>
+                <artifactId>svn-revision-number-maven-plugin</artifactId>
+                <version>1.13</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>revision</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <entries>
+                        <entry>
+                            <prefix>svn</prefix>
+                        </entry>
+                    </entries>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.tmatesoft.svnkit</groupId>
+                        <artifactId>svnkit</artifactId>
+                        <version>1.8.10</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/minify</outputDirectory>
+                            <overwrite>false</overwrite>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/src/main/webapp</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.uas.plugins</groupId>
+                <artifactId>static-maven-plugin</artifactId>
+                <version>0.0.2-SNAPSHOT</version>
+                <!-- 静态资源分离 -->
+                <executions>
+                    <execution>
+                        <id>default-static</id>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <webappDir>${project.build.directory}/minify</webappDir>
+                            <sourceDir>/</sourceDir>
+                            <targetDir>${project.build.directory}/statics</targetDir>
+                            <staticDir>/</staticDir>
+                            <sourceIncludes>
+                                <sourceInclude>resources/js/**/*.js</sourceInclude>
+                                <sourceInclude>resources/css/**/*.css</sourceInclude>
+                                <sourceInclude>WEB-INF/views/**/*.html</sourceInclude>
+                            </sourceIncludes>
+                            <!-- http://static.ubtoc.com/css/index.css?_v=1450321871828 -->
+                            <versionSuffix>
+                                <suffix>?_v=${svn.revision}</suffix>
+                                <exclude>resources/lib/**/*</exclude>
+                            </versionSuffix>
+                        </configuration>
+                        <goals>
+                            <goal>static</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>
+                                            com.google.code.maven-svn-revision-number-plugin
+                                        </groupId>
+                                        <artifactId>
+                                            svn-revision-number-maven-plugin
+                                        </artifactId>
+                                        <versionRange>
+                                            [1.13,)
+                                        </versionRange>
+                                        <goals>
+                                            <goal>
+                                                revision
+                                            </goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore></ignore>
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+
+</project>

+ 20 - 0
donate-service/src/main/java/com/usa/service/donate/Application.java

@@ -0,0 +1,20 @@
+package com.usa.service.donate;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+@RestController
+public class Application {
+
+    @RequestMapping("/")
+    public String greeting() {
+        return "Index Page Of donate-service!";
+    }
+
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
+}

+ 128 - 0
donate-service/src/main/java/com/usa/service/donate/DruidDBConfiguration.java

@@ -0,0 +1,128 @@
+package com.usa.service.donate;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+@Configuration
+public class DruidDBConfiguration {
+
+	private Logger logger = LoggerFactory.getLogger(DruidDBConfiguration.class);
+
+	@Value("${datasource.url}")
+	private String url;
+
+	@Value("${datasource.username}")
+	private String username;
+
+	@Value("${datasource.password}")
+	private String password;
+
+	@Value("${datasource.driverClassName}")
+	private String driverClassName;
+
+	@Value("${datasource.initialSize}")
+	private int initialSize;
+
+	@Value("${datasource.minIdle}")
+	private int minIdle;
+
+	@Value("${datasource.maxActive}")
+	private int maxActive;
+
+	@Value("${datasource.maxWait}")
+	private int maxWait;
+
+	@Value("${datasource.timeBetweenEvictionRunsMillis}")
+	private int timeBetweenEvictionRunsMillis;
+
+	@Value("${datasource.minEvictableIdleTimeMillis}")
+	private int minEvictableIdleTimeMillis;
+
+	@Value("${datasource.validationQuery}")
+	private String validationQuery;
+
+	@Value("${datasource.testWhileIdle}")
+	private boolean testWhileIdle;
+
+	@Value("${datasource.testOnBorrow}")
+	private boolean testOnBorrow;
+
+	@Value("${datasource.testOnReturn}")
+	private boolean testOnReturn;
+
+	@Value("${datasource.timeBetweenLogStatsMillis}")
+	private int timeBetweenLogStatsMillis;
+
+	@Value("${datasource.poolPreparedStatements}")
+	private boolean poolPreparedStatements;
+
+	@Value("${datasource.maxPoolPreparedStatementPerConnectionSize}")
+	private int maxPoolPreparedStatementPerConnectionSize;
+
+	@Value("${datasource.filters}")
+	private String filters;
+
+	@Value("${datasource.connectionProperties}")
+	private String connectionProperties;
+
+	@Bean
+	@Primary
+	public DataSource dataSource() {
+		DruidDataSource dataSource = new DruidDataSource();
+
+		dataSource.setUrl(url);
+		dataSource.setUsername(username);
+		dataSource.setPassword(password);
+		dataSource.setDriverClassName(driverClassName);
+
+		// configuration
+		dataSource.setInitialSize(initialSize);
+		dataSource.setMinIdle(minIdle);
+		dataSource.setMaxActive(maxActive);
+		dataSource.setMaxWait(maxWait);
+		dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+		dataSource.setValidationQuery(validationQuery);
+		dataSource.setTestWhileIdle(testWhileIdle);
+		dataSource.setTestOnBorrow(testOnBorrow);
+		dataSource.setTestOnReturn(testOnReturn);
+		dataSource.setTimeBetweenLogStatsMillis(timeBetweenLogStatsMillis);
+		dataSource.setPoolPreparedStatements(poolPreparedStatements);
+		dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+		try {
+			dataSource.setFilters(filters);
+		} catch (SQLException e) {
+			logger.error("数据源初始化失败: setFilters", e);
+		}
+		dataSource.setConnectionProperties(connectionProperties);
+		return dataSource;
+	}
+
+	@Bean
+	public ServletRegistrationBean servletRegistrationBean() {
+		return new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
+	}
+
+	@Bean
+	public FilterRegistrationBean filterRegistrationBean() {
+		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
+		filterRegistrationBean.setFilter(new WebStatFilter());
+		filterRegistrationBean.addUrlPatterns("/*");
+		filterRegistrationBean.addInitParameter("exclusions",
+				"*.js,*.gif,*.jpg,*.png,*.bmp,*.css,*.ico,*.html,/druid/*");
+		return filterRegistrationBean;
+	}
+
+}

+ 75 - 0
donate-service/src/main/java/com/usa/service/donate/WebAppConfiguration.java

@@ -0,0 +1,75 @@
+package com.usa.service.donate;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.view.InternalResourceViewResolver;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Web相关配置
+ * 
+ * @author sunyj
+ * @since 2017年2月17日 下午5:45:38
+ */
+@Configuration
+@ComponentScan(basePackages = "com.uas.finance.controller")
+public class WebAppConfiguration extends WebMvcConfigurerAdapter {
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		// Spring boot默认资源路径在src/main/resources下,而非/src/main/webapp
+		// 使用/src/main/webapp下资源均需在此添加
+		registry.addResourceHandler("/static/**").addResourceLocations("/resources/");
+		registry.addResourceHandler("/WEB-INF/**").addResourceLocations("/WEB-INF/");
+		super.addResourceHandlers(registry);
+	}
+
+	@Override
+	public void configureViewResolvers(ViewResolverRegistry registry) {
+		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver("/WEB-INF/views/", ".html");
+		viewResolver.setContentType("text/html;charset=UTF-8");
+		registry.viewResolver(viewResolver);
+		super.configureViewResolvers(registry);
+	}
+
+	@Override
+	public void addViewControllers(ViewControllerRegistry registry) {
+		registry.addViewController("/").setViewName("index");
+		registry.addViewController("/index").setViewName("index");
+		registry.addViewController("/console").setViewName("console");
+		registry.addViewController("/fileUpload").setViewName("fileUpload");
+		registry.addViewController("/login/proxy").setViewName("proxyLogin");
+		registry.addViewController("/logout/proxy").setViewName("proxyLogout");
+		super.addViewControllers(registry);
+	}
+
+	@Override
+	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+		FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
+		fastJsonHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
+		FastJsonConfig fastJsonConfig = new FastJsonConfig();
+		fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
+		fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
+		converters.add(fastJsonHttpMessageConverter);
+
+		StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(
+				Charset.forName("UTF-8"));
+		stringHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));
+		converters.add(stringHttpMessageConverter);
+		super.configureMessageConverters(converters);
+	}
+
+}

+ 8 - 0
donate-service/src/main/java/com/usa/service/donate/service/TestService.java

@@ -0,0 +1,8 @@
+package com.usa.service.donate.service;
+
+/**
+ * Created by dongbw
+ * 17/09/27 16:25.
+ */
+public class TestService {
+}

+ 44 - 0
donate-service/src/main/java/com/usa/service/donate/util/ArrayUtils.java

@@ -0,0 +1,44 @@
+package com.usa.service.donate.util;
+
+/**
+ * @author sunyj
+ * @since 2017年4月21日 下午9:01:53
+ */
+public class ArrayUtils {
+
+	public static boolean isEmpty(Object[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(long[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(int[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(short[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(char[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(byte[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(double[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(float[] array) {
+		return array == null || array.length == 0;
+	}
+
+	public static boolean isEmpty(boolean[] array) {
+		return array == null || array.length == 0;
+	}
+}

+ 19 - 0
donate-service/src/main/java/com/usa/service/donate/util/CollectionUtils.java

@@ -0,0 +1,19 @@
+package com.usa.service.donate.util;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @author sunyj
+ * @since 2017年4月21日 下午9:43:31
+ */
+public class CollectionUtils {
+
+	public static boolean isEmpty(Collection<?> coll) {
+		return (coll == null || coll.isEmpty());
+	}
+
+	public static boolean isEmpty(Map<?, ?> map) {
+		return (map == null || map.isEmpty());
+	}
+}

+ 73 - 0
donate-service/src/main/java/com/usa/service/donate/util/ContextUtils.java

@@ -0,0 +1,73 @@
+package com.usa.service.donate.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * spring容器上下文对象
+ * 
+ * @author yingp
+ *
+ */
+public class ContextUtils {
+	private static ApplicationContext applicationContext;
+
+	private static Logger logger = LoggerFactory.getLogger(ContextUtils.class);
+
+	public static void setApplicationContext(ApplicationContext applicationContext) {
+		synchronized (ContextUtils.class) {
+			logger.debug("setApplicationContext, notifyAll");
+			ContextUtils.applicationContext = applicationContext;
+			ContextUtils.class.notifyAll();
+		}
+	}
+
+	public static ApplicationContext getApplicationContext() {
+		synchronized (ContextUtils.class) {
+			while (applicationContext == null) {
+				try {
+					logger.debug("getApplicationContext, wait...");
+					ContextUtils.class.wait(60000);
+					if (applicationContext == null) {
+						logger.warn("Have been waiting for ApplicationContext to be set for 1 minute", new Exception());
+					}
+				} catch (InterruptedException ex) {
+					logger.debug("getApplicationContext, wait interrupted");
+				}
+			}
+			return applicationContext;
+		}
+	}
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param name
+	 * @return
+	 */
+	public static Object getBean(String name) {
+		return getApplicationContext().getBean(name);
+	}
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param cls
+	 * @return
+	 */
+	public static <T> T getBean(Class<T> cls) {
+		return getApplicationContext().getBean(cls);
+	}
+
+	/**
+	 * 触发事件
+	 * 
+	 * @param event
+	 */
+	public static void publishEvent(ApplicationEvent event) {
+		getApplicationContext().publishEvent(event);
+	}
+
+}

+ 44 - 0
donate-service/src/main/java/com/usa/service/donate/util/ExceptionUtils.java

@@ -0,0 +1,44 @@
+package com.usa.service.donate.util;
+
+/**
+ * 处理异常的工具类
+ * 
+ * @author sunyj
+ * @since 2017年8月10日 下午3:26:55
+ */
+public class ExceptionUtils {
+
+	/**
+	 * 获取异常及其Cause拼接成的字符串
+	 * 
+	 * @param e
+	 *            异常
+	 * @return 拼接后的结果
+	 */
+	public static String getMessage(Throwable e) {
+		StringBuilder sb = new StringBuilder(e.toString());
+		if (e.getCause() != null) {
+			sb.append("\nCaused by: ").append(getMessage(e.getCause()));
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 获取异常及其Cause的StackTrace拼接成的字符串
+	 * 
+	 * @param e
+	 *            异常
+	 * @return 拼接后的结果
+	 */
+	public static String getDetailedMessage(Throwable e) {
+		StringBuilder sb = new StringBuilder(e.toString());
+		StackTraceElement[] stackTraceElements = e.getStackTrace();
+		for (StackTraceElement stackTraceElement : stackTraceElements) {
+			sb.append("\n\t").append(stackTraceElement.toString());
+		}
+		if (e.getCause() != null) {
+			sb.append("\nCaused by: ").append(getDetailedMessage(e.getCause()));
+		}
+		return sb.toString();
+	}
+}

+ 36 - 0
donate-service/src/main/java/com/usa/service/donate/util/NumberGenerator.java

@@ -0,0 +1,36 @@
+package com.usa.service.donate.util;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 数字生成工具类
+ * 
+ * @author sunyj
+ * @since 2017年8月22日 上午11:34:44
+ */
+public class NumberGenerator {
+
+	/**
+	 * 生成id时的偏移量
+	 */
+	private static int offset = 0;
+
+	/**
+	 * @return 产生唯一的id(一毫秒内不超过100个则不重复)
+	 */
+	public static String generateId() {
+		// 偏移量,不超过100个
+		offset = (offset + 1) % 100;
+		// 当前毫秒数
+		long now = new Date().getTime();
+		// 起始时间 2017-01-01 00:00:00:000
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.set(2017, 0, 1, 0, 0, 0);
+		startCalendar.set(Calendar.MILLISECOND, 0);
+		// 偏移量加16,保证得到的是两位16进制字符
+		String hex = Long.toHexString(now - startCalendar.getTimeInMillis()) + Integer.toHexString(offset + 16);
+		// 最后反转并转为大写
+		return hex.toUpperCase();
+	}
+}

+ 47 - 0
donate-service/src/main/java/com/usa/service/donate/util/ObjectUtils.java

@@ -0,0 +1,47 @@
+package com.usa.service.donate.util;
+
+import java.io.*;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * 对象工具类
+ * 
+ * @author sunyj
+ * @since 2017年9月1日 下午3:54:26
+ */
+public class ObjectUtils {
+
+	/**
+	 * 判断是否为null、空串或者空集合
+	 * 
+	 * @param obj
+	 * @return
+	 */
+	public static boolean isEmpty(Object obj) {
+		return obj == null || (obj instanceof String && StringUtils.isEmpty((String) obj))
+				|| (obj instanceof Collection && CollectionUtils.isEmpty((Collection<?>) obj))
+				|| (obj instanceof Map && CollectionUtils.isEmpty((Map<?, ?>) obj));
+	}
+
+	/**
+	 * 深克隆对象
+	 * 
+	 * @param t
+	 *            要克隆的对象
+	 * @return 克隆得到的对象
+	 * @throws IOException
+	 * @throws ClassNotFoundException
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T extends Serializable> T clone(T t)
+			throws IOException, ClassNotFoundException, NotSerializableException {
+		if (t == null) {
+			return null;
+		}
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		new ObjectOutputStream(out).writeObject(t);
+		ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray()));
+		return (T) in.readObject();
+	}
+}

+ 29 - 0
donate-service/src/main/java/com/usa/service/donate/util/StringUtils.java

@@ -0,0 +1,29 @@
+package com.usa.service.donate.util;
+
+/**
+ * @author sunyj
+ * @since 2017年5月25日 上午11:09:36
+ */
+public class StringUtils {
+
+	public static boolean isEmpty(Object str) {
+		return (str == null || "".equals(str));
+	}
+
+	public static String reverse(String str) {
+		if (isEmpty(str)) {
+			return str;
+		}
+		char[] array = str.toCharArray();
+		int begin = 0;
+		int end = str.length() - 1;
+		while (begin < end) {
+			array[begin] = (char) (array[begin] ^ array[end]);
+			array[end] = (char) (array[begin] ^ array[end]);
+			array[begin] = (char) (array[begin] ^ array[end]);
+			begin++;
+			end--;
+		}
+		return new String(array);
+	}
+}

+ 26 - 0
donate-service/src/main/resources/config/application-dev.properties

@@ -0,0 +1,26 @@
+datasource.url=jdbc:mysql://192.168.253.12:3306/donate?characterEncoding=utf-8
+datasource.username=root
+datasource.password=select111***
+datasource.driverClassName=com.mysql.jdbc.Driver
+datasource.initialSize=3
+datasource.minIdle=1
+datasource.maxActive=20
+datasource.maxWait=60000
+datasource.timeBetweenEvictionRunsMillis=60000
+datasource.minEvictableIdleTimeMillis=300000
+datasource.validationQuery=SELECT 1 FROM DUAL
+datasource.testWhileIdle=true
+datasource.testOnBorrow=true
+datasource.testOnReturn=false
+datasource.poolPreparedStatements=true
+datasource.timeBetweenLogStatsMillis=60000
+datasource.maxPoolPreparedStatementPerConnectionSize=20
+datasource.filters=stat,slf4j
+datasource.connectionProperties=druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000
+
+security.basic.enabled=true
+security.basic.path=/console
+security.user.name=admin
+security.user.password=select111***
+security.user.role=ADMIN
+security.ignored=false

+ 26 - 0
donate-service/src/main/resources/config/application-test.properties

@@ -0,0 +1,26 @@
+datasource.url=jdbc:mysql://192.168.253.12:3306/donate?characterEncoding=utf-8
+datasource.username=root
+datasource.password=select111***
+datasource.driverClassName=com.mysql.jdbc.Driver
+datasource.initialSize=3
+datasource.minIdle=1
+datasource.maxActive=20
+datasource.maxWait=60000
+datasource.timeBetweenEvictionRunsMillis=60000
+datasource.minEvictableIdleTimeMillis=300000
+datasource.validationQuery=SELECT 1 FROM DUAL
+datasource.testWhileIdle=true
+datasource.testOnBorrow=true
+datasource.testOnReturn=false
+datasource.poolPreparedStatements=true
+datasource.timeBetweenLogStatsMillis=60000
+datasource.maxPoolPreparedStatementPerConnectionSize=20
+datasource.filters=stat,slf4j
+datasource.connectionProperties=druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000
+
+security.basic.enabled=true
+security.basic.path=/console
+security.user.name=admin
+security.user.password=select111***
+security.user.role=ADMIN
+security.ignored=false

+ 102 - 0
pom.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>1.4.1.RELEASE</version>
+    </parent>
+
+    <groupId>com.uas.donate</groupId>
+    <artifactId>donate-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <description>优软云一元捐</description>
+
+    <modules>
+        <module>donate-service</module>
+        <module>donate-console</module>
+    </modules>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <springframeword.cloud.version>1.2.1.RELEASE</springframeword.cloud.version>
+        <fastjson.version>1.2.15</fastjson.version>
+        <druid.version>1.0.24</druid.version>
+        <mysql.jdbc.version>5.1.41</mysql.jdbc.version>
+        <account.version>0.0.1</account.version>
+        <platform.version>0.0.1-SNAPSHOT</platform.version>
+        <spring.mobile.version>1.1.2.RELEASE</spring.mobile.version>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>mysql</groupId>
+                <artifactId>mysql-connector-java</artifactId>
+                <version>${mysql.jdbc.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>druid</artifactId>
+                <version>${druid.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>fastjson</artifactId>
+                <version>${fastjson.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.uas.account</groupId>
+                <artifactId>account-common</artifactId>
+                <version>${account.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.uas.platform</groupId>
+                <artifactId>platform-core</artifactId>
+                <version>${platform.version}</version>
+            </dependency>
+            <!-- spring mobile -->
+            <dependency>
+                <groupId>org.springframework.mobile</groupId>
+                <artifactId>spring-mobile-device</artifactId>
+                <version>${spring.mobile.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <configuration>
+                        <source>1.7</source>
+                        <target>1.7</target>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+    <distributionManagement>
+        <!-- 发布release仓库 -->
+        <repository>
+            <id>platform-release</id>
+            <name>platform-release</name>
+            <url>http://113.105.74.141:8081/artifactory/libs-release-local</url>
+        </repository>
+        <!-- 发布快照版本 -->
+        <snapshotRepository>
+            <id>platform-snapshots</id>
+            <name>platform-snapshots</name>
+            <url>http://113.105.74.141:8081/artifactory/libs-snapshot-local</url>
+        </snapshotRepository>
+    </distributionManagement>
+
+</project>