Bläddra i källkod

Merge branch 'master' of http://192.168.1.220:10080/esb/esb

zhenglingfeng 8 år sedan
förälder
incheckning
461c2ce389
46 ändrade filer med 1509 tillägg och 129 borttagningar
  1. 0 4
      hos-arbiter/hos-arbiter.iml
  2. 0 4
      hos-broker/hos-broker.iml
  3. 5 7
      hos-broker/src/main/java/com/yihu/hos/common/scheduler/MonitorScheduler.java
  4. 16 19
      hos-broker/src/main/java/com/yihu/hos/common/util/SigarUtil.java
  5. 65 69
      hos-camel/hos-camel.iml
  6. 1 0
      hos-core/hos-core.iml
  7. 0 4
      hos-rest/hos-rest.iml
  8. 24 0
      hos-saas/.gitignore
  9. BIN
      hos-saas/.mvn/wrapper/maven-wrapper.jar
  10. 1 0
      hos-saas/.mvn/wrapper/maven-wrapper.properties
  11. 233 0
      hos-saas/mvnw
  12. 145 0
      hos-saas/mvnw.cmd
  13. 95 0
      hos-saas/pom.xml
  14. 19 0
      hos-saas/src/main/java/com/yihu/hos/saas/HosSaasApplication.java
  15. 31 0
      hos-saas/src/main/java/com/yihu/hos/saas/configurations/HibernateConfiguration.java
  16. 33 0
      hos-saas/src/main/java/com/yihu/hos/saas/configurations/ServiceConfiguration.java
  17. 27 0
      hos-saas/src/main/java/com/yihu/hos/saas/configurations/WebMvcConfiguration.java
  18. 8 0
      hos-saas/src/main/java/com/yihu/hos/saas/constants/ContextAttributes.java
  19. 32 0
      hos-saas/src/main/java/com/yihu/hos/saas/controllers/AuthenticateController.java
  20. 23 0
      hos-saas/src/main/java/com/yihu/hos/saas/controllers/HelloController.java
  21. 20 0
      hos-saas/src/main/java/com/yihu/hos/saas/daos/TenantDao.java
  22. 10 0
      hos-saas/src/main/java/com/yihu/hos/saas/daos/TestDao.java
  23. 20 0
      hos-saas/src/main/java/com/yihu/hos/saas/daos/UserDao.java
  24. 16 0
      hos-saas/src/main/java/com/yihu/hos/saas/daos/UserTenantDao.java
  25. 23 0
      hos-saas/src/main/java/com/yihu/hos/saas/interceptors/AuthenticateInterceptor.java
  26. 34 0
      hos-saas/src/main/java/com/yihu/hos/saas/interceptors/ChangeSchemaInterceptor.java
  27. 106 0
      hos-saas/src/main/java/com/yihu/hos/saas/models/TenantModel.java
  28. 43 0
      hos-saas/src/main/java/com/yihu/hos/saas/models/TestModel.java
  29. 77 0
      hos-saas/src/main/java/com/yihu/hos/saas/models/UserModel.java
  30. 56 0
      hos-saas/src/main/java/com/yihu/hos/saas/models/UserTenantModel.java
  31. 45 0
      hos-saas/src/main/java/com/yihu/hos/saas/models/bo/UserSession.java
  32. 43 0
      hos-saas/src/main/java/com/yihu/hos/saas/models/common/IdModel.java
  33. 17 0
      hos-saas/src/main/java/com/yihu/hos/saas/services/AuthenticateService.java
  34. 11 0
      hos-saas/src/main/java/com/yihu/hos/saas/services/HelloService.java
  35. 62 0
      hos-saas/src/main/java/com/yihu/hos/saas/services/impl/AuthenticateServiceImpl.java
  36. 13 0
      hos-saas/src/main/java/com/yihu/hos/saas/services/impl/HelloServiceImpl.java
  37. 31 0
      hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/AuthenticateServiceMockImpl.java
  38. 19 0
      hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/HelloServiceMockImpl.java
  39. 60 0
      hos-saas/src/main/java/com/yihu/hos/saas/utils/LocalContext.java
  40. 14 0
      hos-saas/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  41. 9 0
      hos-saas/src/main/resources/application.yml
  42. 16 0
      hos-saas/src/test/java/com/yihu/hos/HosSaasApplicationTests.java
  43. 0 4
      hos-web-framework-dependencies/hos-web-framework-dependencies.iml
  44. 0 4
      hos-web-framework/hos-web-framework.iml
  45. 5 13
      src/main/java/com/yihu/hos/monitor/service/ServerMonitorService.java
  46. 1 1
      src/test/java/com/yihu/hos/services/ServiceFlowEventServiceTest.java

+ 0 - 4
hos-arbiter/hos-arbiter.iml

@ -66,9 +66,6 @@
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.8.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.11.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty9:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.2.19.v20160908" level="project" />
@ -79,7 +76,6 @@
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-jmx:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.3.8.RELEASE" level="project" />

+ 0 - 4
hos-broker/hos-broker.iml

@ -76,9 +76,6 @@
    <orderEntry type="library" name="Maven: org.springframework:springloaded:1.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:1.3.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.8.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty9:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.2.19.v20160908" level="project" />
@ -89,7 +86,6 @@
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-jmx:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.3.8.RELEASE" level="project" />

+ 5 - 7
hos-broker/src/main/java/com/yihu/hos/common/scheduler/MonitorScheduler.java

@ -21,8 +21,6 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -153,12 +151,12 @@ public class MonitorScheduler {
        if (cursor.size() < 1) {
            try {
                Document result = new Document();
                InetAddress addr = null;
                addr = InetAddress.getLocalHost();
                result.put("name",  addr.getHostName());
                result.put("host",  addr.getHostAddress());
                String host = SigarUtil.getHost();
                String hostName = SigarUtil.getHostName();
                result.put("name",  hostName);
                result.put("host",  host);
                monoEnv.insert(MonitorConstant.HOST, result);
            } catch (UnknownHostException e) {
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

+ 16 - 19
hos-broker/src/main/java/com/yihu/hos/common/util/SigarUtil.java

@ -74,12 +74,23 @@ public class SigarUtil {
     * @throws UnknownHostException
     */
    public static String getHostName(){
        try {
            NetInfo netInfo = sigar.getNetInfo();
            String hostName = netInfo.getHostName();
            return hostName;
        } catch (SigarException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String getHost(){
        try {
            InetAddress addr = InetAddress.getLocalHost();
            String ip = addr.getHostAddress();
            NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(null);
            String ip = netInterfaceConfig.getAddress();
            return ip;
        } catch (UnknownHostException e) {
        } catch (SigarException e) {
            e.printStackTrace();
        }
        return "unknowHost";
@ -304,26 +315,12 @@ public class SigarUtil {
        Map<String, Object> netMap = new HashMap<>();
        NetInterfaceConfig netConfig = null;
        try {
            netConfig = sigar.getNetInterfaceConfig();
            netConfig = sigar.getNetInterfaceConfig(null);
            NetInterfaceStat netIfStat = sigar.getNetInterfaceStat(netConfig.getName());
            // 取到当前机器的IP地址
            String address = null;
            try {
                address = InetAddress.getLocalHost().getHostAddress();
                InetAddress inet = InetAddress.getLocalHost();
                // 没有出现异常而正常当取到的IP时,如果取到的不是网卡循回地址时就返回
                // 否则再通过Sigar工具包中的方法来获取
                if (NetFlags.LOOPBACK_ADDRESS.equals(address)) {
                    address = netConfig.getAddress();
                }
            } catch (UnknownHostException e) {
                address = netConfig.getAddress();
            }
            Map<String, Object> bps = populate(netConfig.getName());//bps
            netMap.put("name", netConfig.getName());
            netMap.put("address", address);
            netMap.put("address", netConfig.getAddress());
            netMap.put("mac", netConfig.getHwaddr());
            netMap.put("type", netConfig.getType());
            netMap.put("broadcast", netConfig.getBroadcast());

+ 65 - 69
hos-camel/hos-camel.iml

@ -1,73 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/../hos-camel-class/target/classes" />
    <output-test url="file://$MODULE_DIR$/../hos-camel-class/target/test-classes" />
    <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" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/../hos-camel-class/target" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.4" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.2.4.Final" level="project" />
    <orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.0.Final" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.1" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.1" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.1" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.9" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-juli:8.5.4" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.0.9.Final" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
    <orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
    <orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
    <orderEntry type="library" name="Maven: org.jboss:jandex:2.0.0.Final" level="project" />
    <orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:2.4" level="project" />
    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.2" level="project" />
    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.5" level="project" />
    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate:hibernate-entitymanager:5.0.9.Final" level="project" />
    <orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.2" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:1.10.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.12.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-orm:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver-core:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:bson:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.9.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-core:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
    <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.2.11" level="project" />
    <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-spring-boot:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-spring:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-http4:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-http-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
@ -75,8 +37,8 @@
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.5" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jms:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-cxf:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-cxf-transport:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-bindings-soap:3.1.5" level="project" />
@ -91,7 +53,7 @@
    <orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-jaxrs:3.1.5" level="project" />
    <orderEntry type="library" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" />
    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-transports-http:3.0.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-transports-http:3.1.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-jaxws:3.1.5" level="project" />
    <orderEntry type="library" name="Maven: xml-resolver:xml-resolver:1.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-bindings-xml:3.1.5" level="project" />
@ -110,15 +72,48 @@
    <orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-xmljson:2.17.1" 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.9.2" level="project" />
    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-stream:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty9:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-io:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-servlet:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-security:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-servlets:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-jmx:9.3.11.v20160721" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: xom:xom:1.2.5" level="project" />
    <orderEntry type="library" name="Maven: xerces:xercesImpl:2.8.0" level="project" />
    <orderEntry type="library" name="Maven: xalan:xalan:2.7.0" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.5" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.2.4.Final" level="project" />
    <orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.0.Final" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.1" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver-core:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:bson:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.9.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.12.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.37" level="project" />
    <orderEntry type="library" name="Maven: com.oracle:ojdbc6:11.2.0.3.0" level="project" />
    <orderEntry type="module" module-name="hos-core" />
@ -128,7 +123,8 @@
    <orderEntry type="library" name="Maven: commons-io:commons-io:2.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
    <orderEntry type="library" name="Maven: commons-net:commons-net:3.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.2" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.4.1" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.9.0" level="project" />
    <orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.6.2" level="project" />
@ -145,10 +141,9 @@
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-all:5.13.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:1.4.1.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.2.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.2.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.1" level="project" />
@ -160,7 +155,8 @@
    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.3.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.json:json:20140107" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:4.3.3.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.2" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.core:ehr-dbhelper:1.1.9" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.core:html2image:0.9" level="project" />
  </component>

+ 1 - 0
hos-core/hos-core.iml

@ -18,6 +18,7 @@
    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.2" level="project" />
    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.4.1" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.9.0" level="project" />
    <orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />

+ 0 - 4
hos-rest/hos-rest.iml

@ -66,9 +66,6 @@
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.8.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.11.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty9:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.2.19.v20160908" level="project" />
@ -79,7 +76,6 @@
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-jmx:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-orm:4.2.8.RELEASE" level="project" />

+ 24 - 0
hos-saas/.gitignore

@ -0,0 +1,24 @@
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/

BIN
hos-saas/.mvn/wrapper/maven-wrapper.jar


+ 1 - 0
hos-saas/.mvn/wrapper/maven-wrapper.properties

@ -0,0 +1 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

+ 233 - 0
hos-saas/mvnw

@ -0,0 +1,233 @@
#!/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
#
#    http://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 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
           #
           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
           # for the new JDKs provided by Oracle.
           #
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
             #
             # Oracle JDKs
             #
             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=`/usr/libexec/java_home`
           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 Migwn, 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)`"
  # TODO classpath?
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
# 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"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  local basedir=$(pwd)
  local wdir=$(pwd)
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=$(cd "$wdir/.."; pwd)
  done
  echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# 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} "$@"

+ 145 - 0
hos-saas/mvnw.cmd

@ -0,0 +1,145 @@
@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    http://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 Maven2 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 key stroke 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 enable echoing my 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
set MAVEN_CMD_LINE_ARGS=%*
@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="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
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%

+ 95 - 0
hos-saas/pom.xml

@ -0,0 +1,95 @@
<?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>
    <groupId>com.yihu.hos</groupId>
    <artifactId>hos-saas</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <name>hos-saas</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <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-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>repo1.maven.org</id>
            <name>Maven Repository Repo1</name>
            <url>http://repo1.maven.org/maven2/</url>
        </repository>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
        <repository>
            <id>org.jboss.repository.releases</id>
            <name>JBoss Maven Release Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

+ 19 - 0
hos-saas/src/main/java/com/yihu/hos/saas/HosSaasApplication.java

@ -0,0 +1,19 @@
package com.yihu.hos.saas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class HosSaasApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(HosSaasApplication.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(HosSaasApplication.class);
    }
}

+ 31 - 0
hos-saas/src/main/java/com/yihu/hos/saas/configurations/HibernateConfiguration.java

@ -0,0 +1,31 @@
package com.yihu.hos.saas.configurations;
import org.hibernate.Interceptor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.jta.JtaTransactionManager;
import javax.sql.DataSource;
import java.util.Map;
/**
 * @created Airhead 2016/11/14.
 */
@Configuration
public class HibernateConfiguration extends HibernateJpaAutoConfiguration {
    @Autowired
    private Interceptor changeSchemaInterceptor;
    public HibernateConfiguration(DataSource dataSource, JpaProperties jpaProperties, ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
        super(dataSource, jpaProperties, jtaTransactionManagerProvider);
    }
    @Override
    protected void customizeVendorProperties(Map<String, Object> vendorProperties) {
        vendorProperties.put("hibernate.ejb.interceptor", changeSchemaInterceptor);
        super.customizeVendorProperties(vendorProperties);
    }
}

+ 33 - 0
hos-saas/src/main/java/com/yihu/hos/saas/configurations/ServiceConfiguration.java

@ -0,0 +1,33 @@
package com.yihu.hos.saas.configurations;
import com.yihu.hos.saas.services.AuthenticateService;
import com.yihu.hos.saas.services.HelloService;
import com.yihu.hos.saas.services.impl.AuthenticateServiceImpl;
import com.yihu.hos.saas.services.impl.HelloServiceImpl;
import com.yihu.hos.saas.services.mockimpl.AuthenticateServiceMockImpl;
import com.yihu.hos.saas.services.mockimpl.HelloServiceMockImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @created Airhead 2016/9/23.
 */
@Configuration
public class ServiceConfiguration {
    @Value("${services.HelloService}")
    private boolean helloService;
    @Value("${services.AuthenticateService}")
    private boolean authenticateService;
    @Bean
    public HelloService helloService() {
        return helloService ? new HelloServiceImpl() : new HelloServiceMockImpl();
    }
    @Bean
    AuthenticateService authenticateService() {
        return authenticateService ? new AuthenticateServiceImpl() : new AuthenticateServiceMockImpl();
    }
}

+ 27 - 0
hos-saas/src/main/java/com/yihu/hos/saas/configurations/WebMvcConfiguration.java

@ -0,0 +1,27 @@
package com.yihu.hos.saas.configurations;
import com.yihu.hos.saas.interceptors.AuthenticateInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * @created Airhead 2016/11/14.
 */
@EnableWebMvc
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authenticateInterceptor())
                .excludePathPatterns("/auth/**");
    }
    @Bean
    AuthenticateInterceptor authenticateInterceptor() {
        return new AuthenticateInterceptor();
    }
}

+ 8 - 0
hos-saas/src/main/java/com/yihu/hos/saas/constants/ContextAttributes.java

@ -0,0 +1,8 @@
package com.yihu.hos.saas.constants;
/**
 * @created Airhead 2016/11/14.
 */
public interface ContextAttributes {
    String SCHEMA = "schema";
}

+ 32 - 0
hos-saas/src/main/java/com/yihu/hos/saas/controllers/AuthenticateController.java

@ -0,0 +1,32 @@
package com.yihu.hos.saas.controllers;
import com.yihu.hos.saas.services.AuthenticateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
@RestController
@RequestMapping(value = "/auth")
public class AuthenticateController {
    @Autowired
    private AuthenticateService authenticateService;
    @RequestMapping(value = "/{tenantName}", method = RequestMethod.POST)
    public String auth(@PathVariable(name = "tenantName") String tenantName,
                       HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        String tenantPassword = request.getParameter("tenantPassword");
        String user = request.getParameter("user");
        String password = request.getParameter("password");
        return authenticateService.auth(session, tenantName, tenantPassword, user, password);
    }
}

+ 23 - 0
hos-saas/src/main/java/com/yihu/hos/saas/controllers/HelloController.java

@ -0,0 +1,23 @@
package com.yihu.hos.saas.controllers;
import com.yihu.hos.saas.services.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * @created Airhead 2016/9/23.
 */
@RestController
@RequestMapping(value = "/hello")
public class HelloController {
    @Autowired
    private HelloService helloService;
    @RequestMapping(method = RequestMethod.GET)
    public String sayHello() {
        return helloService.sayHello();
    }
}

+ 20 - 0
hos-saas/src/main/java/com/yihu/hos/saas/daos/TenantDao.java

@ -0,0 +1,20 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.TenantModel;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
 * @created Airhead 2016/11/16.
 */
@Component
@Transactional
public interface TenantDao extends CrudRepository<TenantModel, Long> {
    @Query("select a from TenantModel a where a.code = ?1 and a.valid=1")
    TenantModel findOneByCode(String code);
    @Query("select a from TenantModel a where a.name = ?1 and a.valid=1")
    TenantModel findOneByName(String name);
}

+ 10 - 0
hos-saas/src/main/java/com/yihu/hos/saas/daos/TestDao.java

@ -0,0 +1,10 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.TestModel;
import org.springframework.data.repository.CrudRepository;
/**
 * @created Airhead 2016/11/16.
 */
public interface TestDao extends CrudRepository<TestModel, Long> {
}

+ 20 - 0
hos-saas/src/main/java/com/yihu/hos/saas/daos/UserDao.java

@ -0,0 +1,20 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.UserModel;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
 * @created Airhead 2016/9/4.
 */
@Transactional
@Component
public interface UserDao extends CrudRepository<UserModel, Long> {
    @Query("select a from UserModel a where a.name = ?1 and a.valid = 1")
    UserModel findOne(String userName);
    @Query("select a from UserModel a where a.code = ?1 and a.valid = 1")
    UserModel findOneByCode(String userCode);
}

+ 16 - 0
hos-saas/src/main/java/com/yihu/hos/saas/daos/UserTenantDao.java

@ -0,0 +1,16 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.UserModel;
import com.yihu.hos.saas.models.UserTenantModel;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
/**
 * @created Airhead 2016/11/16.
 */
@Component
public interface UserTenantDao extends CrudRepository<UserTenantModel, Long> {
    @Query("select a from UserTenantModel a where a.userCode = ?1")
    UserTenantModel findOne(String userCode);
}

+ 23 - 0
hos-saas/src/main/java/com/yihu/hos/saas/interceptors/AuthenticateInterceptor.java

@ -0,0 +1,23 @@
package com.yihu.hos.saas.interceptors;
import com.yihu.hos.saas.services.AuthenticateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AuthenticateInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private AuthenticateService authenticateService;
//    public AuthenticateInterceptor(AuthenticateService authenticateService) {
//        Assert.notNull(authenticateService, "AuthenticateService must be not null");
//        this.authenticateService = authenticateService;
//    }
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return authenticateService.isAuth(request, response);
    }
}

+ 34 - 0
hos-saas/src/main/java/com/yihu/hos/saas/interceptors/ChangeSchemaInterceptor.java

@ -0,0 +1,34 @@
package com.yihu.hos.saas.interceptors;
import com.yihu.hos.saas.constants.ContextAttributes;
import com.yihu.hos.saas.utils.LocalContext;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.EmptyInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
 * @created Airhead 2016/11/14.
 */
@Component
public class ChangeSchemaInterceptor extends EmptyInterceptor {
    private static final long serialVersionUID = 1L;
    private static Logger logger = LoggerFactory.getLogger(ChangeSchemaInterceptor.class);
    @Override
    public String onPrepareStatement(String sql) {
        String schemaName = getSchema();
        String completeSql = sql;
        if (StringUtils.isNotEmpty(schemaName)) {
            String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
            completeSql = myCatAnnotation + sql;
        }
        logger.info("prepare " + completeSql);
        return super.onPrepareStatement(completeSql);
    }
    private String getSchema() {
        return LocalContext.getContext().getAttachment(ContextAttributes.SCHEMA);
    }
}

+ 106 - 0
hos-saas/src/main/java/com/yihu/hos/saas/models/TenantModel.java

@ -0,0 +1,106 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.saas.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @created Airhead 2016/11/16.
 */
@Entity
@Table(name = "tenant")
public class TenantModel extends IdModel {
    private String code;
    private String name;
    private String password;
    private String schema;
    private Date created;
    private Long createdUnix;
    private Date updated;
    private Long updatedUnix;
    private Integer valid;
    @Column(name = "password")
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "schema")
    public String getSchema() {
        return schema;
    }
    public void setSchema(String schema) {
        this.schema = schema;
    }
    @Column(name = "created")
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    @Column(name = "created_unix")
    public Long getCreatedUnix() {
        return createdUnix;
    }
    public void setCreatedUnix(Long createdUnix) {
        this.createdUnix = createdUnix;
    }
    @Column(name = "updated")
    public Date getUpdated() {
        return updated;
    }
    public void setUpdated(Date updated) {
        this.updated = updated;
    }
    @Column(name = "updated_unix")
    public Long getUpdatedUnix() {
        return updatedUnix;
    }
    public void setUpdatedUnix(Long updatedUnix) {
        this.updatedUnix = updatedUnix;
    }
    @Column(name = "valid")
    public Integer getValid() {
        return valid;
    }
    public void setValid(Integer valid) {
        this.valid = valid;
    }
}

+ 43 - 0
hos-saas/src/main/java/com/yihu/hos/saas/models/TestModel.java

@ -0,0 +1,43 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.saas.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * @created Airhead 2016/11/16.
 */
@Entity
@Table(name = "test")
public class TestModel extends IdModel {
    private String name;
    private String memo;
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "memo")
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    @Override
    public String toString() {
        return "TestModel{" +
                "name='" + name + '\'' +
                ", memo='" + memo + '\'' +
                '}';
    }
}

+ 77 - 0
hos-saas/src/main/java/com/yihu/hos/saas/models/UserModel.java

@ -0,0 +1,77 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.saas.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @created Airhead 2016/9/2.
 */
@Entity
@Table(name = "user")
public class UserModel extends IdModel {
    private String code;
    private String name;
    private String password;
    private Date created;
    private Date updated;
    private Integer valid;
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "password")
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Column(name = "created")
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    @Column(name = "updated")
    public Date getUpdated() {
        return updated;
    }
    public void setUpdated(Date updated) {
        this.updated = updated;
    }
    @Column(name = "valid")
    public Integer getValid() {
        return valid;
    }
    public void setValid(Integer valid) {
        this.valid = valid;
    }
}

+ 56 - 0
hos-saas/src/main/java/com/yihu/hos/saas/models/UserTenantModel.java

@ -0,0 +1,56 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.saas.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @created Airhead 2016/11/16.
 */
@Entity
@Table(name = "user_tenant")
public class UserTenantModel extends IdModel {
    private String userCode;
    private String tenantSchema;
    private Date created;
    private Date updated;
    @Column(name = "user_code")
    public String getUserCode() {
        return userCode;
    }
    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }
    @Column(name = "tenant_schema")
    public String getTenantSchema() {
        return tenantSchema;
    }
    public void setTenantSchema(String tenantSchema) {
        this.tenantSchema = tenantSchema;
    }
    @Column(name = "created")
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    @Column(name = "updated")
    public Date getUpdated() {
        return updated;
    }
    public void setUpdated(Date updated) {
        this.updated = updated;
    }
}

+ 45 - 0
hos-saas/src/main/java/com/yihu/hos/saas/models/bo/UserSession.java

@ -0,0 +1,45 @@
package com.yihu.hos.saas.models.bo;
import java.util.UUID;
/**
 * @created Airhead 2016/11/16.
 */
public class UserSession {
    private String userCode;
    private String token;
    private String schema;
    public UserSession() {
    }
    public UserSession(String userCode, String schema) {
        this.userCode = userCode;
        this.schema = schema;
        token = UUID.randomUUID().toString();
    }
    public String getSchema() {
        return schema;
    }
    public void setSchema(String schema) {
        this.schema = schema;
    }
    public String getUserCode() {
        return userCode;
    }
    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
}

+ 43 - 0
hos-saas/src/main/java/com/yihu/hos/saas/models/common/IdModel.java

@ -0,0 +1,43 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.hos.saas.models.common;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
/**
 * 统一定义id的entity基类.
 * 
 * 基类统一定义id的属性名称、数据类型、列名映射及生成策略.
 * Oracle需要每个Entity独立定义id的SEQUCENCE时,不继承于本类而改为实现一个Idable的接口。
 * 
 * @author calvin
 */
// JPA 基类的标识
@MappedSuperclass
public abstract class IdModel implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 3673803562328635206L;
	
	// 非业务主键
	protected Long id;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
}

+ 17 - 0
hos-saas/src/main/java/com/yihu/hos/saas/services/AuthenticateService.java

@ -0,0 +1,17 @@
package com.yihu.hos.saas.services;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
@Service
public interface AuthenticateService {
    boolean isAuth(HttpServletRequest request, HttpServletResponse response) throws Exception;
    String auth(HttpSession httpSession, String tenantName, String tenantPassword, String user, String password);
}

+ 11 - 0
hos-saas/src/main/java/com/yihu/hos/saas/services/HelloService.java

@ -0,0 +1,11 @@
package com.yihu.hos.saas.services;
import org.springframework.stereotype.Service;
/**
 * @created Airhead 2016/9/23.
 */
@Service
public interface HelloService {
    String sayHello();
}

+ 62 - 0
hos-saas/src/main/java/com/yihu/hos/saas/services/impl/AuthenticateServiceImpl.java

@ -0,0 +1,62 @@
package com.yihu.hos.saas.services.impl;
import com.yihu.hos.saas.constants.ContextAttributes;
import com.yihu.hos.saas.daos.TenantDao;
import com.yihu.hos.saas.daos.UserDao;
import com.yihu.hos.saas.models.TenantModel;
import com.yihu.hos.saas.models.UserModel;
import com.yihu.hos.saas.models.bo.UserSession;
import com.yihu.hos.saas.services.AuthenticateService;
import com.yihu.hos.saas.utils.LocalContext;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
public class AuthenticateServiceImpl implements AuthenticateService {
    @Autowired
    private UserDao userDao;
    @Autowired
    private TenantDao tenantDao;
    @Override
    public boolean isAuth(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession session = request.getSession();
        UserSession userSession = (UserSession) session.getAttribute("userSession");
        if (userSession == null) {
            return false;
        }
        LocalContext.getContext().setAttachment(ContextAttributes.SCHEMA, userSession.getSchema());
        return true;
    }
    @Override
    public String auth(HttpSession httpSession, String tenantName, String tenantPassword, String user, String password) {
        TenantModel tenantModel = tenantDao.findOneByName(tenantName);
        //TODO:现在只是简单逻辑,需要修改成安全逻辑
        if (tenantModel == null
//                || !password.equals(tenantModel.getPassword())
                ) {
            return "Tenant Auth Failed";
        }
        //切换Schema
        LocalContext.getContext().setAttachment(ContextAttributes.SCHEMA, tenantModel.getSchema());
        UserModel userModel = userDao.findOne(user);
        //TODO:现在只是简单逻辑,需要修改成安全逻辑
        if (userModel == null || !password.equals(userModel.getPassword())) {
            return "User Auth Failed";
        }
        httpSession.setAttribute("userSession", new UserSession(userModel.getCode(), tenantModel.getSchema()));
        return "Auth Success";
    }
}

+ 13 - 0
hos-saas/src/main/java/com/yihu/hos/saas/services/impl/HelloServiceImpl.java

@ -0,0 +1,13 @@
package com.yihu.hos.saas.services.impl;
import com.yihu.hos.saas.services.HelloService;
/**
 * @created Airhead 2016/9/23.
 */
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello() {
        return "Hello World!";
    }
}

+ 31 - 0
hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/AuthenticateServiceMockImpl.java

@ -0,0 +1,31 @@
package com.yihu.hos.saas.services.mockimpl;
import com.yihu.hos.saas.constants.ContextAttributes;
import com.yihu.hos.saas.models.bo.UserSession;
import com.yihu.hos.saas.services.AuthenticateService;
import com.yihu.hos.saas.utils.LocalContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
public class AuthenticateServiceMockImpl implements AuthenticateService {
    @Override
    public boolean isAuth(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String name = request.getParameter("name");
        LocalContext.getContext().setAttachment(ContextAttributes.SCHEMA, name);
        return true;
    }
    @Override
    public String auth(HttpSession httpSession, String tenantName, String tenantPassword, String user, String password) {
        UserSession userSession = new UserSession();
        userSession.setUserCode("abc");
        userSession.setToken("1234567890");
        return null;
    }
    
}

+ 19 - 0
hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/HelloServiceMockImpl.java

@ -0,0 +1,19 @@
package com.yihu.hos.saas.services.mockimpl;
import com.yihu.hos.saas.daos.TestDao;
import com.yihu.hos.saas.models.TestModel;
import com.yihu.hos.saas.services.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * @created Airhead 2016/9/23.
 */
public class HelloServiceMockImpl implements HelloService {
    @Autowired
    private TestDao testDao;
    public String sayHello() {
        TestModel testModel = testDao.findOne(1L);
        return "Hello," + testModel.toString();
    }
}

+ 60 - 0
hos-saas/src/main/java/com/yihu/hos/saas/utils/LocalContext.java

@ -0,0 +1,60 @@
package com.yihu.hos.saas.utils;
import java.util.HashMap;
import java.util.Map;
/**
 * @created Airhead 2016/11/14.
 */
public class LocalContext {
    private static final ThreadLocal<LocalContext> LOCAL = new ThreadLocal<LocalContext>() {
        protected LocalContext initialValue() {
            return new LocalContext();
        }
    };
    private final Map<String, String> attachments = new HashMap<>();
    public static LocalContext getContext() {
        return LOCAL.get();
    }
    public static void removeContext() {
        LOCAL.remove();
    }
    public String getAttachment(String key) {
        return (String) this.attachments.get(key);
    }
    public LocalContext setAttachment(String key, String value) {
        if (value == null) {
            this.attachments.remove(key);
        } else {
            this.attachments.put(key, value);
        }
        return this;
    }
    public LocalContext removeAttachment(String key) {
        this.attachments.remove(key);
        return this;
    }
    public Map<String, String> getAttachments() {
        return this.attachments;
    }
    public LocalContext setAttachments(Map<String, String> attachment) {
        this.attachments.clear();
        if (attachment != null && attachment.size() > 0) {
            this.attachments.putAll(attachment);
        }
        return this;
    }
    public void clearAttachments() {
        this.attachments.clear();
    }
}

+ 14 - 0
hos-saas/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -0,0 +1,14 @@
{
  "properties": [
    {
      "name": "services.HelloService",
      "type": "java.lang.String",
      "description": "Description for services.HelloService."
    },
    {
      "name": "services.AuthenticateService ",
      "type": "java.lang.String",
      "description": "Description for services.AuthenticateService ."
    }
  ]
}

+ 9 - 0
hos-saas/src/main/resources/application.yml

@ -0,0 +1,9 @@
services:
  HelloService: false
  AuthenticateService : true
spring:
  datasource:
    url: jdbc:mysql://192.168.1.220:8066/global_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
    username: hos
    password: 123456

+ 16 - 0
hos-saas/src/test/java/com/yihu/hos/HosSaasApplicationTests.java

@ -0,0 +1,16 @@
package com.yihu.hos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class HosSaasApplicationTests {
	@Test
	public void contextLoads() {
	}
}

+ 0 - 4
hos-web-framework-dependencies/hos-web-framework-dependencies.iml

@ -63,9 +63,6 @@
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.8.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.11.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty9:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.2.19.v20160908" level="project" />
@ -76,7 +73,6 @@
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-jmx:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.3.8.RELEASE" level="project" />

+ 0 - 4
hos-web-framework/hos-web-framework.iml

@ -75,9 +75,6 @@
    <orderEntry type="library" name="Maven: org.springframework:springloaded:1.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:1.3.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.8.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty9:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.2.19.v20160908" level="project" />
@ -88,7 +85,6 @@
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-jmx:9.2.19.v20160908" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-jetty-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.2.8.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.3.8.RELEASE" level="project" />

+ 5 - 13
src/main/java/com/yihu/hos/monitor/service/ServerMonitorService.java

@ -11,9 +11,10 @@ import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by chenweida on 2016/1/27.
@ -78,16 +79,7 @@ public class ServerMonitorService {
        return actionResult;
    }
    public static String getHost(){
        try {
            InetAddress addr = InetAddress.getLocalHost();
            String ip = addr.getHostAddress();
            return ip;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return "unknowHost";
    }
    public Result getHosts() {
        List<Map<String,Object>> result = new ArrayList<>();

+ 1 - 1
src/test/java/com/yihu/hos/services/ServiceFlowEventServiceTest.java

@ -40,4 +40,4 @@ public class ServiceFlowEventServiceTest {
    public void routeDefineDelete() throws Exception {
        serviceFlowEventService.routeDefineDelete("hosServiceEventService", "services", "HosServiceEventService");
    }
}
}