소스 검색

init from phab

xielq 4 년 전
부모
커밋
1b257dae9e
36개의 변경된 파일2786개의 추가작업 그리고 0개의 파일을 삭제
  1. 0 0
      README.md
  2. 52 0
      build.gradle
  3. 31 0
      gradle/dependencies-base.gradle
  4. 11 0
      gradle/tasks.gradle
  5. BIN
      gradle/wrapper/gradle-wrapper.jar
  6. 5 0
      gradle/wrapper/gradle-wrapper.properties
  7. 172 0
      gradlew
  8. 84 0
      gradlew.bat
  9. 2 0
      settings.gradle
  10. 6 0
      src/main/docker/Dockerfile
  11. 12 0
      src/main/java/com/uas/cloud/mall/MallInternalmessageServiceApplication.java
  12. 220 0
      src/main/java/com/uas/cloud/mall/api/MessageLogController.java
  13. 72 0
      src/main/java/com/uas/cloud/mall/domain/Enterprise.java
  14. 244 0
      src/main/java/com/uas/cloud/mall/domain/MessageLog.java
  15. 198 0
      src/main/java/com/uas/cloud/mall/domain/MessageText.java
  16. 78 0
      src/main/java/com/uas/cloud/mall/domain/UserBaseInfo.java
  17. 35 0
      src/main/java/com/uas/cloud/mall/domain/UserEnterprise.java
  18. 15 0
      src/main/java/com/uas/cloud/mall/repository/EnterpriseRepository.java
  19. 117 0
      src/main/java/com/uas/cloud/mall/repository/MessageLogRepository.java
  20. 20 0
      src/main/java/com/uas/cloud/mall/repository/MessageTextRepository.java
  21. 19 0
      src/main/java/com/uas/cloud/mall/repository/UserBaseInfoReposity.java
  22. 148 0
      src/main/java/com/uas/cloud/mall/service/MessageLogService.java
  23. 34 0
      src/main/java/com/uas/cloud/mall/service/MessageTextService.java
  24. 651 0
      src/main/java/com/uas/cloud/mall/service/impl/MessageLogServiceImpl.java
  25. 75 0
      src/main/java/com/uas/cloud/mall/service/impl/MessageTextServiceImpl.java
  26. 32 0
      src/main/java/com/uas/cloud/mall/util/IllegalOperatorException.java
  27. 68 0
      src/main/java/com/uas/cloud/mall/util/JacksonUtils.java
  28. 215 0
      src/main/java/com/uas/cloud/mall/util/PageInfo.java
  29. 61 0
      src/main/java/com/uas/cloud/mall/util/PageParams.java
  30. 8 0
      src/main/java/com/uas/cloud/mall/util/Status.java
  31. 8 0
      src/main/java/com/uas/cloud/mall/util/Type.java
  32. 24 0
      src/main/resources/application-dev.yml
  33. 24 0
      src/main/resources/application-prod.yml
  34. 24 0
      src/main/resources/application-test.yml
  35. 5 0
      src/main/resources/application.yml
  36. 16 0
      src/test/java/com/uas/cloud/mall/MallInternalmessageServiceApplicationTests.java

+ 0 - 0
README.md


+ 52 - 0
build.gradle

@@ -0,0 +1,52 @@
+// Gradle build file for Gradle 2.14.1
+// Created by huxz on 2017-3-17 13:38:59
+buildscript {
+	ext {
+		springBootVersion = '1.4.4.RELEASE'
+		// 0.12.0 升级到了 Gradle 3.4,Gradle 2.14.1 只能使用 0.11.0及以下
+		dockerVersion = '0.11.0'
+		dcokerRegistry = "10.10.100.200:5000"
+	}
+	repositories {
+		maven { url "https://plugins.gradle.org/m2/" }
+		maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
+		mavenCentral()
+		jcenter()
+	}
+	dependencies {
+		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
+		classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:${dockerVersion}"
+	}
+}
+
+group 'com.uas.cloud.mall'
+version '0.1.7'
+
+apply plugin: 'java'
+apply plugin: "com.palantir.docker"
+apply plugin: "org.springframework.boot"
+
+apply from: "$rootDir/gradle/tasks.gradle"
+apply from: "$rootDir/gradle/dependencies-base.gradle"
+
+jar {
+	baseName = project.name
+	version =  ''
+}
+
+allprojects {
+	sourceCompatibility = 1.8
+}
+
+dependencies {
+	/*compile('org.springframework.cloud:spring-cloud-starter-config')
+	compile('org.springframework.cloud:spring-cloud-starter-eureka')
+	compile('org.springframework.cloud:spring-cloud-starter-hystrix')
+	compile('org.springframework.cloud:spring-cloud-starter-ribbon')*/
+	compile('org.springframework.boot:spring-boot-starter-data-mongodb')
+	compile("org.springframework.boot:spring-boot-starter-data-jpa")
+	compile("org.springframework.boot:spring-boot-starter-jdbc")
+	compile("mysql:mysql-connector-java:5.1.21")
+	compile("com.alibaba:fastjson:1.2.14")
+	testCompile('org.springframework.boot:spring-boot-starter-test')
+}

+ 31 - 0
gradle/dependencies-base.gradle

@@ -0,0 +1,31 @@
+// Gradle Base Dependencies Configurations
+// Created by huxz on 2017-3-17 14:39:36
+repositories {
+	mavenLocal()
+	maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
+	maven {
+		url 'http://10.10.101.21:8081/artifactory/libs-release'
+	}
+	maven {
+		url 'http://10.10.101.21:8081/artifactory/libs-snapshot'
+	}
+	maven {
+		url 'http://10.10.101.21:8081/artifactory/plugins-snapshot'
+	}
+	mavenCentral()
+}
+
+dependencyManagement {
+	imports {
+		mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Camden.SR5'
+	}
+}
+
+dependencies {
+	compile 'org.springframework.cloud:spring-cloud-starter-config'
+	compile "org.springframework.cloud:spring-cloud-starter-eureka"
+	compile('org.springframework.cloud:spring-cloud-starter-hystrix')
+	compile('org.springframework.cloud:spring-cloud-starter-ribbon')
+
+	testCompile 'org.springframework.boot:spring-boot-starter-test'
+}

+ 11 - 0
gradle/tasks.gradle

@@ -0,0 +1,11 @@
+// Gradle Tasks Configurations
+// Created by huxz on 2017-3-17 14:39:36
+bootRun {
+	addResources = true
+}
+
+docker {
+	name "${dcokerRegistry}/${project.name}:${project.version}"
+	dockerfile "${projectDir}/src/main/docker/Dockerfile"
+	files "${buildDir}/libs/${project.name}.jar"
+}.dependsOn build

BIN
gradle/wrapper/gradle-wrapper.jar


+ 5 - 0
gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip

+ 172 - 0
gradlew

@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+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
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+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
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save ( ) {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"

+ 84 - 0
gradlew.bat

@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 2 - 0
settings.gradle

@@ -0,0 +1,2 @@
+rootProject.name = 'mall-internalmessage-service'
+

+ 6 - 0
src/main/docker/Dockerfile

@@ -0,0 +1,6 @@
+FROM hub.c.163.com/library/java:8-jre-alpine
+VOLUME /tmp
+ADD mall-internalmessage-service.jar app.jar
+RUN sh -c "touch /app.jar"
+ENV JAVA_OPTS=""
+ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=test"]

+ 12 - 0
src/main/java/com/uas/cloud/mall/MallInternalmessageServiceApplication.java

@@ -0,0 +1,12 @@
+package com.uas.cloud.mall;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class MallInternalmessageServiceApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(MallInternalmessageServiceApplication.class, args);
+	}
+}

+ 220 - 0
src/main/java/com/uas/cloud/mall/api/MessageLogController.java

@@ -0,0 +1,220 @@
+package com.uas.cloud.mall.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.cloud.mall.domain.MessageLog;
+import com.uas.cloud.mall.domain.MessageText;
+import com.uas.cloud.mall.service.MessageLogService;
+import com.uas.cloud.mall.service.MessageTextService;
+import com.uas.cloud.mall.util.IllegalOperatorException;
+import com.uas.cloud.mall.util.PageInfo;
+import com.uas.cloud.mall.util.PageParams;
+import com.uas.cloud.mall.util.Type;
+import org.codehaus.jettison.json.JSONException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@RestController
+@RequestMapping(value = "/mall-internalmessage-service/messagelogs")
+public class MessageLogController {
+
+    private final MessageLogService messageLogService;
+
+    private final MessageTextService messageTextService;
+
+    @Autowired
+    public MessageLogController (MessageLogService messageLogService, MessageTextService messageTextService) {
+        this.messageLogService = messageLogService;
+        this.messageTextService = messageTextService;
+    }
+
+    /**
+     * 保存单个消息
+     * @param jsonObject
+     * @return
+     * @throws JSONException
+     */
+    @RequestMapping(method = RequestMethod.POST, produces = "application/json")
+    public MessageLog save(@RequestBody JSONObject jsonObject) throws JSONException {
+        if (StringUtils.isEmpty(jsonObject.getString("type")))
+            throw new IllegalOperatorException("消息类型为空");
+
+        // 发送公有消息
+        if (Type.PUBLIC.name().equals(jsonObject.getString("type"))) {
+            return  messageLogService.savePublic(jsonObject);
+        }
+        // 发送个人消息
+        if (Type.PRIVATE.name().equals(jsonObject.getString("type"))) {
+            return messageLogService.savePrivate(jsonObject);
+        }
+        return null;
+    }
+
+    /**
+     * 保存多人消息
+     * @param jsonObject
+     * @return
+     * @throws JSONException
+     */
+    @RequestMapping(value = "/mutilate", method = RequestMethod.POST, produces = "application/json")
+    public MessageLog saveMutilate(@RequestBody JSONObject jsonObject) throws JSONException {
+        if (StringUtils.isEmpty(jsonObject.getString("type")))
+            throw new IllegalOperatorException("消息类型为空");
+        // 发送个人消息
+        if (Type.PRIVATE.name().equals(jsonObject.getString("type"))) {
+            return messageLogService.savePrivateMutilate(jsonObject);
+        }
+
+        return null;
+    }
+
+    /**
+     * 删除消息(用户)
+     * @param id
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE, produces = "application/json")
+    public MessageLog delete(@PathVariable("id") String id) {
+        return messageLogService.delete(id);
+    }
+
+    /**
+     * 批量删除消息(用户)
+     * @param ids
+     */
+    @RequestMapping(value = "/batch/{ids}", method = RequestMethod.DELETE, produces = "application/json")
+    public List<MessageLog> deleteBatch(@PathVariable("ids") String ids) {
+        return messageLogService.deleteBatch(ids);
+    }
+
+    /**
+     * 阅读消息
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
+    public MessageLog read(@PathVariable("id") String id) {
+        return messageLogService.read(id);
+    }
+
+    /**
+     * 获取消息总数量
+     * @param uu
+     * @return
+     */
+    @RequestMapping(value = "/count", method = RequestMethod.GET, produces = "application/json")
+    public Integer getCountUnReadPersonal(@RequestParam("uu") Long uu, @RequestParam("recEnuu") Long enuu, @RequestParam("recRole") String recRole, @RequestParam("status") String status) {
+        return messageLogService.getCount(uu, enuu, recRole, status);
+    }
+
+    /**
+     * 分页获取消息
+     * @param pageable 分页参数
+     * @param uu 接收人uu
+     * @param enuu 接收企业uu
+     * @param recRole 接收角色
+     * @param timeSorting 时间排序
+     * @param classes 消息分类
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET, produces = "application/json")
+    public Page<MessageLog> getPagesPrivatePersonal(PageParams pageable, @RequestParam("uu") Long uu, @RequestParam("enuu") Long enuu, @RequestParam("recRole") String recRole, @RequestParam(value = "timeSorting", defaultValue = "DESC") String timeSorting, @RequestParam("classes") String classes) {
+        if (pageable.getCount() <= 0) {
+            pageable = new PageParams(10, 1, "", "{\"sendTime\" : \"DESC\"}");
+        }
+        if (StringUtils.hasText(pageable.getSorting())) {
+            try {
+                pageable.setSorting(URLDecoder.decode(pageable.getSorting(), "utf-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        PageInfo pageInfo = new PageInfo(pageable);
+        return messageLogService.getPage(uu, enuu, recRole, timeSorting, classes, pageInfo);
+    }
+
+    /**
+     * 分页获取公告
+     * @param uu
+     * @param status
+     * @return
+     */
+    @RequestMapping(value = "/public", method = RequestMethod.GET, produces = "application/json")
+    public Page<MessageLog> getPagesPublicPersonal(PageParams pageable, @RequestParam("uu") Long uu, @RequestParam("enuu") Long enuu, @RequestParam("recType") String type, @RequestParam("status") String status) {
+        if (pageable.getCount() <= 0) {
+            pageable = new PageParams(5, 1, "", "{\"status\" : \"DESC\"}");
+        }
+        if (StringUtils.hasText(pageable.getSorting())) {
+            try {
+                pageable.setSorting(URLDecoder.decode(pageable.getSorting(), "utf-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        PageInfo pageInfo = new PageInfo(pageable);
+        return messageLogService.getPagePublicPersonal(uu, enuu, type, status, pageInfo);
+    }
+
+    /**
+     * 分页获取私信(管理后台)
+     * @param pageable 分页参数
+     * @param keyword 关键词
+     * @param classes 消息类型
+     * @return
+     */
+    @RequestMapping(value = "/admin", method = RequestMethod.GET, produces = "application/json")
+    public Page<MessageText> getPagesAdmin(@RequestParam("keyword") String keyword, @RequestParam("classes") String classes, @RequestParam("timeSorting") String timeSorting, PageParams pageable) {
+        if (pageable.getCount() <= 0) {
+            pageable = new PageParams(10, 1, "", "");
+        }
+        if (StringUtils.hasText(pageable.getSorting())) {
+            try {
+                pageable.setSorting(URLDecoder.decode(pageable.getSorting(), "utf-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        PageInfo pageInfo = new PageInfo(pageable);
+        return messageLogService.getPagesAdmin(keyword, classes, timeSorting, pageInfo);
+    }
+
+    /**
+     * 通过textid分页获取消息记录
+     * @param textid 消息文本id
+     * @param keyword
+     * @param status
+     * @param pageable
+     * @return
+     */
+    @RequestMapping(value = "/byText", method = RequestMethod.GET, produces = "application/json")
+    public Page<MessageLog> getMessageLogByText(@RequestParam(value = "textid", required = true) String textid, @RequestParam("keyword") String keyword, @RequestParam("status") String status, PageParams pageable) {
+        if (pageable.getCount() <= 0) {
+            pageable = new PageParams(10, 1, "", "");
+        }
+        PageInfo pageInfo = new PageInfo(pageable);
+        return messageLogService.getMessageLogsByText(textid,keyword, status, pageInfo);
+    }
+
+
+    @RequestMapping(value = "/countByText", method = RequestMethod.GET, produces = "application/json")
+    public JSONObject getMessageLogCountByText(@RequestParam(value = "textid", required = true) String textid) {
+        return messageLogService.getMessageLogsCountByText(textid);
+    }
+
+    /**
+     * 发送消息
+     * @param jsonObject
+     * @return
+     */
+    @RequestMapping(value = "/send", method = RequestMethod.POST, produces = "application/json")
+    public MessageLog sendMessage(@RequestBody JSONObject jsonObject) {
+        return messageLogService.sendMessages(jsonObject);
+    }
+}

+ 72 - 0
src/main/java/com/uas/cloud/mall/domain/Enterprise.java

@@ -0,0 +1,72 @@
+/*CopyRright (c)2014: <www.usoftchina.com>
+ */
+package com.uas.cloud.mall.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 企业信息
+ * 
+ * @author yingp
+ */
+@Entity
+@Table(name = "sec$enterprises")
+public class Enterprise implements Serializable {
+
+	/**
+	 * 序列号
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name = "en_uu")
+	private Long uu;
+
+	/**
+	 * 公司名称
+	 */
+	@Column(name = "en_name")
+	private String enName;
+	/**
+	 * 简称
+	 */
+	@Column(name = "en_shortname")
+	private String enShortname;
+
+	public Enterprise() {
+	}
+
+	public Enterprise(Long uu, String enName, String enShortname) {
+		this.uu = uu;
+		this.enName = enName;
+		this.enShortname = enShortname;
+	}
+
+	public Long getUu() {
+		return uu;
+	}
+
+	public void setUu(Long uu) {
+		this.uu = uu;
+	}
+
+	public String getEnName() {
+		return enName;
+	}
+
+	public void setEnName(String enName) {
+		this.enName = enName;
+	}
+
+	public String getEnShortname() {
+		return enShortname;
+	}
+
+	public void setEnShortname(String enShortname) {
+		this.enShortname = enShortname;
+	}
+}

+ 244 - 0
src/main/java/com/uas/cloud/mall/domain/MessageLog.java

@@ -0,0 +1,244 @@
+package com.uas.cloud.mall.domain;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Document(collection = "msg_message_log")
+public class MessageLog {
+
+    @Id
+    private String id;
+
+    /**
+     * 消息内容id
+     */
+    @Field(value = "textid")
+    private String textid;
+
+    /**
+     * 消息内容
+     */
+    private MessageText messageText;
+
+    /**
+     * 接收角色(买家:buyer,卖家:seller)
+     */
+    @Field
+    private String recRole;
+
+    /**
+     * 消息类型(公告:PUBLIC,个人:PRIVATE)
+     */
+    @Field(value = "type")
+    private String type;
+
+    /**
+     * 接收人类型('PERSON,EMPLOYEE,ENTERPRISE')
+     */
+//    private String recType;
+
+    /**
+     * 发送人uu
+     */
+    @Field(value = "senduu")
+    private Long senduu;
+
+    /**
+     * 发送人
+     */
+    private UserBaseInfo sender;
+
+    /**
+     * 发送人企业uu
+     */
+    private Long sendEnuu;
+
+    /**
+     * 发送人企业
+     */
+    private Enterprise sendEnterprise;
+
+    /**
+     * 接收人uu
+     */
+    @Field(value = "recuu")
+    private Long recuu;
+
+    /**
+     * 接收企业uu
+     */
+    private Long recenuu;
+
+    /**
+     * 接收人
+     */
+    private UserBaseInfo receiver;
+
+    /**
+     * 接收企业
+     */
+    private Enterprise recenterprise;
+
+    /**
+     * 消息状态
+     */
+    @Field(value = "status")
+    private String status;
+
+    /**
+     * 是否删除
+     */
+    @Field
+    private Short isDelete;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTextid() {
+        return textid;
+    }
+
+    public void setTextid(String textid) {
+        this.textid = textid;
+    }
+
+    public MessageText getMessageText() {
+        return messageText;
+    }
+
+    public void setMessageText(MessageText messageText) {
+        this.messageText = messageText;
+    }
+
+    public String getRecRole() {
+        return recRole;
+    }
+
+    public void setRecRole(String recRole) {
+        this.recRole = recRole;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Short getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Short isDelete) {
+        this.isDelete = isDelete;
+    }
+    //    public String getRecType() {
+//        return recType;
+//    }
+//
+//    public void setRecType(String recType) {
+//        this.recType = recType;
+//    }
+
+    public Long getSenduu() {
+        return senduu;
+    }
+
+    public void setSenduu(Long senduu) {
+        this.senduu = senduu;
+    }
+
+    public UserBaseInfo getSender() {
+        return sender;
+    }
+
+    public void setSender(UserBaseInfo sender) {
+        this.sender = sender;
+    }
+
+    public Long getSendEnuu() {
+        return sendEnuu;
+    }
+
+    public void setSendEnuu(Long sendEnuu) {
+        this.sendEnuu = sendEnuu;
+    }
+
+    public Enterprise getSendEnterprise() {
+        return sendEnterprise;
+    }
+
+    public void setSendEnterprise(Enterprise sendEnterprise) {
+        this.sendEnterprise = sendEnterprise;
+    }
+
+    public Long getRecuu() {
+        return recuu;
+    }
+
+    public void setRecuu(Long recuu) {
+        this.recuu = recuu;
+    }
+
+    public Long getRecenuu() {
+        return recenuu;
+    }
+
+    public void setRecenuu(Long recenuu) {
+        this.recenuu = recenuu;
+    }
+
+    public UserBaseInfo getReceiver() {
+        return receiver;
+    }
+
+    public void setReceiver(UserBaseInfo receiver) {
+        this.receiver = receiver;
+    }
+
+    public Enterprise getRecenterprise() {
+        return recenterprise;
+    }
+
+    public void setRecenterprise(Enterprise recenterprise) {
+        this.recenterprise = recenterprise;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public MessageLog(){
+
+    };
+
+    public MessageLog(MessageLog messageLog) {
+        this.messageText = messageLog.messageText;
+        this.recRole = messageLog.recRole;
+        this.type = messageLog.type;
+        this.senduu = messageLog.senduu;
+        this.sender = messageLog.sender;
+        this.sendEnuu = messageLog.sendEnuu;
+        this.sendEnterprise = messageLog.sendEnterprise;
+        this.recuu = messageLog.recuu;
+        this.recenuu = messageLog.recenuu;
+        this.receiver = messageLog.receiver;
+        this.recenterprise = messageLog.recenterprise;
+        this.status = messageLog.status;
+        this.isDelete = messageLog.isDelete;
+    }
+}

+ 198 - 0
src/main/java/com/uas/cloud/mall/domain/MessageText.java

@@ -0,0 +1,198 @@
+package com.uas.cloud.mall.domain;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+import java.util.Date;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Document(collection = "msg_message_text")
+public class MessageText {
+
+    @Id
+    private String id;
+
+    /**
+     * 消息内容
+     */
+    @Field(value = "content")
+    private String content;
+
+    /**
+     * 消息详细分类
+     */
+    @Field(value = "classes")
+    private String classes;
+
+    /**
+     * 消息发送时间
+     */
+    @Field(value = "sendTime")
+    private Date sendTime;
+
+    /**
+     * 消息预定发送时间
+     */
+    @Field(value = "expectSendTime")
+    private Date expectSendTime;
+
+    /**
+     * 发送人uu
+     */
+    private Long senduu;
+
+    /**
+     * 发送人
+     */
+    private UserBaseInfo sender;
+
+    /**
+     * 发送人企业uu
+     */
+    private Long sendEnuu;
+
+    /**
+     * 发送人企业
+     */
+    private Enterprise sendEnterprise;
+
+    /**
+     * 发送人数
+     */
+    private Long count;
+
+    /**
+     * 接收人uu(接收人为1人时)
+     */
+    private Long recuu;
+
+    /**
+     * 接收人(接收人为1人时)
+     */
+    private UserBaseInfo receiver;
+
+    /**
+     * 阅读状态(接收人为1人时)
+     */
+    private String status;
+
+    /**
+     * 有效人数
+     */
+    private Long effectiveNumber;
+
+    public Long getEffectiveNumber() {
+        return effectiveNumber;
+    }
+
+    public void setEffectiveNumber(Long effectiveNumber) {
+        this.effectiveNumber = effectiveNumber;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getClasses() {
+        return classes;
+    }
+
+    public void setClasses(String classes) {
+        this.classes = classes;
+    }
+
+    public Date getSendTime() {
+        return sendTime;
+    }
+
+    public void setSendTime(Date sendTime) {
+        this.sendTime = sendTime;
+    }
+
+    public Date getExpectSendTime() {
+        return expectSendTime;
+    }
+
+    public void setExpectSendTime(Date expectSendTime) {
+        this.expectSendTime = expectSendTime;
+    }
+
+    public Long getSenduu() {
+        return senduu;
+    }
+
+    public void setSenduu(Long senduu) {
+        this.senduu = senduu;
+    }
+
+    public UserBaseInfo getSender() {
+        return sender;
+    }
+
+    public void setSender(UserBaseInfo sender) {
+        this.sender = sender;
+    }
+
+    public Long getSendEnuu() {
+        return sendEnuu;
+    }
+
+    public void setSendEnuu(Long sendEnuu) {
+        this.sendEnuu = sendEnuu;
+    }
+
+    public Enterprise getSendEnterprise() {
+        return sendEnterprise;
+    }
+
+    public void setSendEnterprise(Enterprise sendEnterprise) {
+        this.sendEnterprise = sendEnterprise;
+    }
+
+    public Long getCount() {
+        return count;
+    }
+
+    public void setCount(Long count) {
+        this.count = count;
+    }
+
+    public Long getRecuu() {
+        return recuu;
+    }
+
+    public void setRecuu(Long recuu) {
+        this.recuu = recuu;
+    }
+
+    public UserBaseInfo getReceiver() {
+        return receiver;
+    }
+
+    public void setReceiver(UserBaseInfo receiver) {
+        this.receiver = receiver;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 78 - 0
src/main/java/com/uas/cloud/mall/domain/UserBaseInfo.java

@@ -0,0 +1,78 @@
+package com.uas.cloud.mall.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Entity
+@Table(name = "sec$users")
+public class UserBaseInfo {
+
+    @Id
+    @Column(name = "user_uu")
+    private Long userUU;
+
+    @Column(name = "user_name")
+    private String userName;
+
+    @Column(name = "user_email")
+    private String userEmail;
+
+    @Column(name = "user_tel")
+    private String userTel;
+
+    @Column(name = "user_sex")
+    private String userSex;
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserEmail() {
+        return userEmail;
+    }
+
+    public void setUserEmail(String userEmail) {
+        this.userEmail = userEmail;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public String getUserSex() {
+        return userSex;
+    }
+
+    public void setUserSex(String userSex) {
+        this.userSex = userSex;
+    }
+
+    public UserBaseInfo() {
+    }
+
+    public UserBaseInfo(Long userUU, String userName) {
+        this.userUU = userUU;
+        this.userName = userName;
+    }
+}

+ 35 - 0
src/main/java/com/uas/cloud/mall/domain/UserEnterprise.java

@@ -0,0 +1,35 @@
+package com.uas.cloud.mall.domain;
+
+/**
+ * 用户企业表
+ * @author wangyc
+ * @version 2017/8/14 17:22 wangyc
+ */
+public class UserEnterprise {
+
+    /**
+     * 用户uu
+     */
+    private Long useruu;
+
+    /**
+     * 企业uu
+     */
+    private Long enuu;
+
+    public Long getUseruu() {
+        return useruu;
+    }
+
+    public void setUseruu(Long useruu) {
+        this.useruu = useruu;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public void setEnuu(Long enuu) {
+        this.enuu = enuu;
+    }
+}

+ 15 - 0
src/main/java/com/uas/cloud/mall/repository/EnterpriseRepository.java

@@ -0,0 +1,15 @@
+package com.uas.cloud.mall.repository;
+
+import com.uas.cloud.mall.domain.Enterprise;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by wangyc on 2017/6/29.
+ */
+@Repository
+public interface EnterpriseRepository extends JpaSpecificationExecutor<Enterprise>, JpaRepository<Enterprise, Long> {
+
+    public Enterprise findByuu(Long uu);
+}

+ 117 - 0
src/main/java/com/uas/cloud/mall/repository/MessageLogRepository.java

@@ -0,0 +1,117 @@
+package com.uas.cloud.mall.repository;
+
+import com.uas.cloud.mall.domain.MessageLog;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Repository
+public interface MessageLogRepository extends MongoRepository<MessageLog, String>{
+
+    /**
+     * 通过接收人uu,接收人角色,消息状态,是否删除获取消息
+     * @param uu 接收人uu
+     * @param type 类型
+     * @param recRole 接收人角色
+     * @param status 消息状态
+     * @param isDelete 是否删除
+     * @return
+     */
+    List<MessageLog> findByRecuuAndTypeAndRecRoleAndStatusAndIsDelete(Long uu, String type, String recRole, String status, Short isDelete);
+
+    /**
+     * 通过接收人uu,接收人企业uu,接收人角色,消息状态,是否删除获取消息
+     * @param uu 接收人uu
+     * @param recenuu 接收人企业uu
+     * @param type 类型
+     * @param recRole 接收人角色
+     * @param status 消息状态
+     * @param isDelete 是否删除
+     * @return
+     */
+    List<MessageLog> findByRecuuAndRecenuuAndTypeAndRecRoleAndStatusAndIsDelete(Long uu, Long recenuu, String type, String recRole, String status, Short isDelete);
+
+    /**
+     * 通过消息内容id获取消息记录
+     * @param id
+     * @return
+     */
+    List<MessageLog> findByTextid(String id);
+
+    /**
+     * 通过消息内容id和消息阅读状态获取消息记录
+     * @param id 消息内容id
+     * @param status 消息阅读状态
+     * @return
+     */
+    List<MessageLog> findByTextidAndStatus(String id, String status);
+
+    /**
+     * 根据信息类型、接受类型及状态获取企业用户信息(Employee)
+     */
+//    List<MessageLog> findByRecuuAndRecenuuAndRecTypeAndStatusAndMessageTextType(Long recuu, Long recenuu, String type, String recType, String status);
+//
+//    /**
+//     * 根据信息类型、接受类型及状态获取个人用户信息(Person)
+//     */
+//    List<MessageLog> findByRecuuAndMessageTextTypeAndRecTypeAndStatus(Long recuu, String type, String recType, String status);
+//
+//    /**
+//     * 根据信息类型、接受类型及状态获取企业用户信息(Enterprise)
+//     */
+//    List<MessageLog> findByRecenuuAndMessageTextTypeAndRecTypeAndStatus(Long recenuu, String type, String recType, String status);
+//
+//    /**
+//     * 根据信息类型、接受类型获取企业用户信息(Employee)
+//     */
+//    List<MessageLog> findByRecuuAndRecenuuAndMessageTextTypeAndRecType(Long recuu, Long recenuu, String type, String recType);
+//
+//    /**
+//     * 根据信息类型、接受类型获取个人用户信息(Person)
+//     */
+//    List<MessageLog> findByRecuuAndMessageTextTypeAndRecType(Long recuu, String type, String recType);
+//
+//    /**
+//     * 根据信息类型、接受类型获取企业用户信息(Enterprise)
+//     */
+//    List<MessageLog> findByRecenuuAndMessageTextTypeAndRecType(Long recenuu, String type, String recType);
+//
+//    /**
+//     * 通过个人信息、状态分页获取私信消息(Person)
+//     * @param recuu
+//     * @param recType
+//     * @param type
+//     * @param status
+//     * @param pageable
+//     * @return
+//     */
+//    Page<MessageLog> findByRecuuAndRecTypeAndMessageTextTypeAndStatusInOrderByStatusDescMessageTextSendTimeDesc(Long recuu, String recType, String type, List<String> status, Pageable pageable);
+//
+//    /**
+//     * 通过个人信息、状态分页获取私信消息(Employee)
+//     * @param recuu
+//     * @param recenuu
+//     * @param recType
+//     * @param type
+//     * @param status
+//     * @param pageable
+//     * @return
+//     */
+//    Page<MessageLog> findByRecuuAndRecenuuAndRecTypeAndMessageTextTypeAndStatusInOrderByStatusDescMessageTextSendTimeDesc(Long recuu, Long recenuu, String recType, String type, List<String> status, Pageable pageable);
+//
+//    /**
+//     * 通过个人信息、状态分页获取私信消息(Enterprise)
+//     * @param recenuu
+//     * @param recType
+//     * @param type
+//     * @param status
+//     * @param pageable
+//     * @return
+//     */
+//    Page<MessageLog> findByRecenuuAndRecTypeAndMessageTextTypeAndStatusInOrderByStatusDescMessageTextSendTimeDesc(Long recenuu, String recType, String type, List<String> status, Pageable pageable);
+
+}

+ 20 - 0
src/main/java/com/uas/cloud/mall/repository/MessageTextRepository.java

@@ -0,0 +1,20 @@
+package com.uas.cloud.mall.repository;
+
+import com.uas.cloud.mall.domain.MessageText;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Repository
+public interface MessageTextRepository extends MongoRepository<MessageText, Long> {
+
+    /**
+     * 通过消息类型获取消息
+     * @param type
+     * @return
+     */
+//    List<MessageText> findByType(String type);
+
+}

+ 19 - 0
src/main/java/com/uas/cloud/mall/repository/UserBaseInfoReposity.java

@@ -0,0 +1,19 @@
+package com.uas.cloud.mall.repository;
+
+import com.uas.cloud.mall.domain.UserBaseInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by wangyc on 2017/6/29.
+ */
+@Repository
+public interface UserBaseInfoReposity extends JpaSpecificationExecutor<UserBaseInfo>,JpaRepository<UserBaseInfo, Long> {
+
+    public UserBaseInfo findByUserUU(Long userUU);
+
+    @Query("select count(1) from UserBaseInfo")
+    public Long findCount();
+}

+ 148 - 0
src/main/java/com/uas/cloud/mall/service/MessageLogService.java

@@ -0,0 +1,148 @@
+package com.uas.cloud.mall.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.cloud.mall.domain.MessageLog;
+import com.uas.cloud.mall.domain.MessageText;
+import com.uas.cloud.mall.util.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+public interface MessageLogService {
+
+    /**
+     * 保存私有消息
+     * @param jsonObject
+     * @param messageText
+     * @return
+     */
+//    MessageLog save(JSONObject jsonObject, MessageText messageText);
+
+    /**
+     * 保存私有消息
+     * @param jsonObject
+     * @return
+     */
+    MessageLog savePrivate(JSONObject jsonObject);
+
+    /**
+     * 保存多人私有消息
+     * @param jsonObject
+     * @return
+     */
+    MessageLog savePrivateMutilate(JSONObject jsonObject);
+
+    /**
+     * 保存公共消息
+     * @param jsonObject
+     * @return
+     */
+    MessageLog savePublic(JSONObject jsonObject);
+
+    /**
+     * 删除消息
+     * @param id
+     */
+    MessageLog delete(String id);
+
+    /**
+     * 批量删除消息
+     * @param ids
+     */
+    List<MessageLog> deleteBatch(String ids);
+
+    /**
+     * 阅读消息
+     * @param id
+     * @return
+     */
+    MessageLog read(String id);
+
+    /**
+     * 获取消息总数量
+     * @param uu 收信人uu
+     * @param enuu 收信人企业uu
+     * @param recRole 收信人角色
+     * @param status 状态
+     * @return
+     */
+    Integer getCount(Long uu, Long enuu, String recRole, String status);
+
+    /**
+     * 获取私信总数量
+     * @param uu 收信人uu
+     * @param enuu 收信人企业uu
+     * @param recRole 收信人角色
+     * @param status 状态
+     * @param isDelete 是否删除
+     * @return
+     */
+    Integer getCountPrivate(Long uu, Long enuu, String recRole, String status, Short isDelete);
+
+    /**
+     * 获取公告总数量
+     * @param uu 收信人uu
+     * @param recRole 收信人角色
+     * @param status 状态
+     * @param isDelete 是否删除
+     * @return
+     */
+    Integer getCountPublic(Long uu, String recRole, String status, Short isDelete);
+
+    /**
+     * 分页获取消息
+     * @param uu 接收人uu
+     * @param enuu 接收人企业uu
+     * @param recRole 接收人角色
+     * @param timeSorting 时间排序
+     * @param classes 消息分类
+     * @param pageable 分页参数
+     * @return
+     */
+    Page<MessageLog> getPage(Long uu, Long enuu, String recRole, String timeSorting, String classes, PageInfo pageable);
+
+    /**
+     * 分页获取消息(后台)
+     * @param keyword 关键词
+     * @param classes 消息类型
+     * @param pageInfo 分页参数
+     * @return
+     */
+    Page<MessageText> getPagesAdmin(String keyword, String classes, String timeSorting, PageInfo pageInfo);
+
+    /**
+     * 分页获取公告
+     * @param uu
+     * @param pageable
+     * @return
+     */
+    Page<MessageLog> getPagePublicPersonal(Long uu, Long enuu, String recType, String status, PageInfo pageable);
+
+    /**
+     * 通过textid分页获取消息记录
+     * @param textid 消息文本id
+     * @param keyword
+     * @param status
+     * @param pageable
+     * @return
+     */
+    Page<MessageLog> getMessageLogsByText(String textid, String keyword, String status, PageInfo pageable);
+
+    /**
+     * 通过textid获取消息记录数量
+     * @param textid
+     * @return
+     */
+    JSONObject getMessageLogsCountByText(String textid);
+
+    /**
+     * 发送消息
+     * @param jsonObject
+     * @return
+     */
+    MessageLog sendMessages(JSONObject jsonObject);
+
+}

+ 34 - 0
src/main/java/com/uas/cloud/mall/service/MessageTextService.java

@@ -0,0 +1,34 @@
+package com.uas.cloud.mall.service;
+
+import com.uas.cloud.mall.domain.MessageText;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+public interface MessageTextService {
+
+    /**
+     * 保存消息
+     * @param messageText
+     * @return
+     */
+    MessageText save(MessageText messageText);
+
+    /**
+     * 根据收信人信息、接受类型、状态获取相关公共消息
+     * @param recuu
+     * @param recenuu
+     * @param recType
+     * @param status
+     * @return
+     */
+    List<MessageText> findByReciverAndRecTypeAndStatus(Long recuu, Long recenuu, String recType, String status);
+
+    /**
+     * 根据类型获取信息
+     * @return
+     */
+    List<MessageText> getByType(String type);
+}

+ 651 - 0
src/main/java/com/uas/cloud/mall/service/impl/MessageLogServiceImpl.java

@@ -0,0 +1,651 @@
+package com.uas.cloud.mall.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.google.gson.JsonObject;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+import com.uas.cloud.mall.domain.*;
+import com.uas.cloud.mall.repository.*;
+import com.uas.cloud.mall.service.MessageLogService;
+import com.uas.cloud.mall.service.MessageTextService;
+import com.uas.cloud.mall.util.*;
+import org.apache.catalina.User;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Service
+public class MessageLogServiceImpl implements MessageLogService{
+
+    private final MessageLogRepository messageLogRepository;
+
+    private final MessageTextRepository messageTextRepository;
+
+    private final MessageTextService messageTextService;
+
+    private final UserBaseInfoReposity userBaseInfoReposity;
+
+    private final EnterpriseRepository enterpriseRepository;
+
+    private final JdbcTemplate jdbcTemplate;
+
+    private final MongoTemplate mongoTemplate;
+
+    @Autowired
+    public MessageLogServiceImpl (MessageLogRepository messageLogRepository, MessageTextService messageTextService, MessageTextRepository messageTextRepository,UserBaseInfoReposity userBaseInfoReposity, EnterpriseRepository enterpriseRepository, JdbcTemplate jdbcTemplate, MongoTemplate mongoTemplate) {
+        this.messageLogRepository = messageLogRepository;
+        this.messageTextRepository = messageTextRepository;
+        this.messageTextService = messageTextService;
+        this.userBaseInfoReposity = userBaseInfoReposity;
+        this.enterpriseRepository = enterpriseRepository;
+        this.jdbcTemplate = jdbcTemplate;
+        this.mongoTemplate = mongoTemplate;
+    }
+
+    @Override
+    public MessageLog savePrivate(JSONObject jsonObject) {
+        MessageLog messageLog = JSON.parseObject(jsonObject.toJSONString(), MessageLog.class);
+        UserBaseInfo receiver = userBaseInfoReposity.findByUserUU(messageLog.getRecuu());
+        messageLog.setReceiver(receiver);
+        if (messageLog.getRecenuu() != null)
+            messageLog.setRecenterprise(enterpriseRepository.findByuu(messageLog.getRecenuu()));
+
+        UserBaseInfo sender = new UserBaseInfo();
+        if (messageLog.getSenduu() == 1) {
+            sender.setUserUU(1L);
+            sender.setUserName("平台");
+        } else {
+            sender = userBaseInfoReposity.findByUserUU(messageLog.getSenduu());
+        }
+
+        messageLog.setSender(sender);
+        Enterprise sendEnterprise = enterpriseRepository.findByuu(messageLog.getSendEnuu());
+        messageLog.setSendEnterprise(sendEnterprise);
+        messageLog.setStatus(Status.UNREAD.name());
+        messageLog.setIsDelete((short) 0);
+
+        MessageText messageText = jsonObject.getObject("messageText", MessageText.class);
+        messageText.setCount(1L);
+        messageText.setSenduu(messageLog.getSenduu());
+        messageText.setSendEnuu(messageLog.getSendEnuu());
+        messageText.setSender(sender);
+        messageText.setSendEnterprise(sendEnterprise);
+        messageText.setRecuu(messageLog.getRecuu());
+        messageText.setReceiver(receiver);
+        messageTextRepository.save(messageText);
+
+        messageLog.setMessageText(messageText);
+        messageLog.setTextid(messageText.getId());
+        return messageLogRepository.save(messageLog);
+    }
+
+    @Override
+    public MessageLog savePrivateMutilate(JSONObject jsonObject) {
+        MessageLog messageLog = JSON.parseObject(jsonObject.toJSONString(), MessageLog.class);
+        MessageText messageText = jsonObject.getObject("messageText", MessageText.class);
+
+        List<MessageLog> messageLogs = new ArrayList<MessageLog>();
+        List<Map<String, Object>> users = jdbcTemplate.queryForList("select * from sec$userenterprise where en_uu=" + messageLog.getRecenuu());
+
+        UserBaseInfo sender = new UserBaseInfo(1L, "平台");
+        if (messageLog.getSenduu() != 1)
+            sender = userBaseInfoReposity.findByUserUU(messageLog.getSenduu());
+        Enterprise sendEnterprise = enterpriseRepository.findByuu(messageLog.getSendEnuu());
+        messageText.setCount((long) users.size());
+        messageText.setSenduu(messageLog.getSenduu());
+        messageText.setSendEnuu(messageLog.getSendEnuu());
+        messageText.setSender(sender);
+        messageText.setSendEnterprise(sendEnterprise);
+
+        messageTextRepository.save(messageText);
+
+        for (Map<String, Object> user : users) {
+            MessageLog messageLogUser = new MessageLog(messageLog);
+            messageLogUser.setRecuu(Long.valueOf(user.get("user_uu").toString()));
+            messageLogUser.setRecenuu(Long.valueOf(user.get("en_uu").toString()));
+            messageLogUser.setReceiver(userBaseInfoReposity.findByUserUU(messageLogUser.getRecuu()));
+            messageLogUser.setRecenterprise(enterpriseRepository.findByuu(messageLogUser.getRecenuu()));
+            messageLogUser.setSender(sender);
+            messageLogUser.setSendEnterprise(sendEnterprise);
+            messageLogUser.setStatus(Status.UNREAD.name());
+            messageLogUser.setIsDelete((short) 0);
+            messageLogUser.setMessageText(messageText);
+            messageLogUser.setTextid(messageText.getId());
+            messageLogs.add(messageLogUser);
+        }
+        return messageLogRepository.save(messageLogs).get(0);
+    }
+
+    @Override
+    public MessageLog savePublic(JSONObject jsonObject) {
+        MessageText messageText = jsonObject.getObject("messageText", MessageText.class);
+
+
+        // 给每个用户发送一条公有消息
+        List<UserBaseInfo> users = userBaseInfoReposity.findAll();
+        JSON.parseObject(jsonObject.toJSONString(), MessageLog.class);
+        MessageLog message = JSON.parseObject(jsonObject.toJSONString(), MessageLog.class);
+
+        messageText.setSendEnuu(message.getSendEnuu());
+        messageText.setSenduu(message.getSenduu());
+
+        UserBaseInfo sender = new UserBaseInfo(1L, "平台");
+        if (message.getSenduu() != 1) {
+            sender = userBaseInfoReposity.findByUserUU(message.getSenduu());
+        }
+        Enterprise sendEnterprise = enterpriseRepository.findByuu(message.getSendEnuu());
+
+        messageText.setSender(sender);
+        messageText.setSendEnterprise(sendEnterprise);
+        messageText.setCount((long) users.size());
+
+        messageTextRepository.save(messageText);
+
+        Thread t = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                long startTime = new Date().getTime();
+                PageParams pageParams = new PageParams();
+                int page = 1;
+                pageParams.setPage(page);
+                pageParams.setCount(1000);
+                final PageInfo pageInfo = new PageInfo(pageParams);
+                Long usersCount = userBaseInfoReposity.findCount();
+                Long pages = usersCount / 1000;
+                pages = usersCount % 1000 > 0 ? pages + 1 : pages;
+                System.err.println("总数:" + usersCount);
+                System.err.println(pages);
+//                int num = 1;
+                for (int i = 1; i <= pages; i++) {
+                    pageInfo.setPageNumber(i);
+                    pageInfo.setOffset(1000 * (i - 1));
+                    Page<UserBaseInfo> pageUsers = userBaseInfoReposity.findAll(pageInfo);
+                    List<UserBaseInfo> usersList = pageUsers.getContent();
+                    for (UserBaseInfo user : usersList) {
+//                        System.err.println("第 " + num + " 位:" + user.getUserName());
+                        MessageLog messageLog = JSON.parseObject(jsonObject.toJSONString(), MessageLog.class);
+                        messageLog.setRecuu(user.getUserUU());
+                        messageLog.setReceiver(user);
+                        messageLog.setReceiver(userBaseInfoReposity.findByUserUU(messageLog.getRecuu()));
+                        UserBaseInfo sender = new UserBaseInfo(1L, "平台");
+                        if (messageLog.getSenduu() != 1) {
+                            sender = userBaseInfoReposity.findByUserUU(message.getSenduu());
+                        }
+                        messageLog.setSender(sender);
+                        messageLog.setSendEnterprise(sendEnterprise);
+                        messageLog.setStatus(Status.UNREAD.name());
+                        messageLog.setIsDelete((short) 0);
+                        messageLog.setMessageText(messageText);
+                        messageLog.setTextid(messageText.getId());
+                        messageLogRepository.save(messageLog);
+//                        num++;
+                    }
+                }
+                long endTime = new Date().getTime();
+                System.err.println("发送时间是:" + (startTime - endTime)/1000 + "秒");
+            }
+        });
+        t.start();
+
+        return null;
+    }
+
+    @Override
+    public MessageLog delete(String id) {
+        MessageLog messageLog = messageLogRepository.findOne(id);
+        messageLog.setIsDelete((short) 1);
+        return messageLogRepository.save(messageLog);
+    }
+
+    @Override
+    public List<MessageLog> deleteBatch(String ids) {
+        String[] idList = ids.split(",");
+        for (String id : idList) {
+            if (messageLogRepository.findOne(id) != null)
+                delete(id);
+        }
+        return null;
+    }
+
+    @Override
+    public MessageLog read(String id) {
+        MessageLog messageLog = messageLogRepository.findOne(id);
+        messageLog.setStatus(Status.ISREAD.name());
+        return messageLogRepository.save(messageLog);
+    }
+
+    @Override
+    public Integer getCount(Long uu, Long enuu, String recRole, String status) {
+        Integer privateCount = getCountPrivate(uu, enuu, recRole, status, (short) 0);
+        Integer publicCount = getCountPublic(uu, recRole, status, (short) 0);
+        return privateCount + publicCount;
+    }
+
+    @Override
+    public Integer getCountPrivate(Long uu, Long enuu, String recRole, String status, Short isDelete) {
+        if (enuu != null) {
+            return messageLogRepository.findByRecuuAndRecenuuAndTypeAndRecRoleAndStatusAndIsDelete(uu, enuu, Type.PRIVATE.name(), recRole, status, isDelete).size();
+        } else {
+            return messageLogRepository.findByRecuuAndTypeAndRecRoleAndStatusAndIsDelete(uu, Type.PRIVATE.name(), recRole, status, isDelete).size();
+        }
+    }
+
+    @Override
+    public Integer getCountPublic(Long uu, String recRole, String status, Short isDelete) {
+        return messageLogRepository.findByRecuuAndTypeAndRecRoleAndStatusAndIsDelete(uu, Type.PUBLIC.name(), recRole, status , isDelete).size();
+    }
+
+    /**
+     * 通过收信人信息、收信类型、消息状态获取消息(Person)
+     * @param uu
+     * @param status
+     * @return
+     */
+    public List<MessageLog> getCountPersonalPrivatePerson(Long uu, String recType, String status) {
+//        return messageLogRepository.findByRecuuAndMessageTextTypeAndRecTypeAndStatus(uu, Type.PRIVATE.name(), recType, status);
+        return null;
+    }
+
+    /**
+     * 通过收信人信息、收信类型、消息状态获取消息(Employee)
+     * @param uu
+     * @param enuu
+     * @param status
+     * @return
+     */
+    public List<MessageLog> getCountPersonalPrivateEmployee(Long uu, Long enuu, String recType, String status) {
+//        return messageLogRepository.findByRecuuAndRecenuuAndRecTypeAndStatusAndMessageTextType(uu, enuu, recType, status, Type.PRIVATE.name());
+        return null;
+    }
+
+    /**
+     * 通过收信人信息、收信类型、消息状态获取消息(Enterprise)
+     * @param enuu
+     * @param status
+     * @return
+     */
+    public List<MessageLog> getCountPersonalPrivateEnterprise(Long enuu, String recType, String status) {
+//        return messageLogRepository.findByRecenuuAndMessageTextTypeAndRecTypeAndStatus(enuu, Type.PRIVATE.name(), recType, status);
+        return null;
+    }
+
+    @Override
+    public Page<MessageLog> getPage(Long uu, Long enuu, String recRole, String timeSorting, String classes, PageInfo pageInfo) {
+        Query query = new Query();
+        Criteria criteria = new Criteria();
+        criteria.and("recuu").is(uu);
+        criteria.and("isDelete").is(0);
+
+        Criteria[] typeCriteria = new Criteria[2];
+
+        Criteria privateCrieria = new Criteria();
+        if (enuu == null) {
+            enuu = 1L;
+        }
+        privateCrieria.and("recenuu").is(enuu);
+        privateCrieria.and("recRole").is(recRole);
+        privateCrieria.and("type").is(Type.PRIVATE.name());
+
+        Criteria publicCrieria = new Criteria();
+        publicCrieria.and("type").is(Type.PUBLIC.name());
+        publicCrieria.and("recRole").is(Type.BUYER.name());
+
+        if (enuu != null) {
+            typeCriteria[0] = publicCrieria;
+            typeCriteria[1] = privateCrieria;
+            criteria.orOperator(typeCriteria);
+        } else {
+            criteria.andOperator(publicCrieria);
+        }
+
+        if (StringUtils.hasText(classes))
+            criteria.and("messageText.classes").is(classes);
+        List<Sort.Order> orders = new ArrayList<Sort.Order>();
+        if ("DESC".equals(timeSorting))
+            orders.add(new Sort.Order(Sort.Direction.DESC, "messageText.sendTime"));
+        if ("ASC".equals(timeSorting))
+            orders.add(new Sort.Order(Sort.Direction.ASC, "messageText.sendTime"));
+        Sort sort = new Sort(orders);
+        if (null != sort) {
+            query.with(sort);
+        }
+        query.addCriteria(criteria);
+        Long count = mongoTemplate.count(query, MessageLog.class);
+
+        List<MessageLog> messageLogs = mongoTemplate.find(query.with(pageInfo), MessageLog.class);
+        for (MessageLog messageLog : messageLogs) {
+            if (Status.UNREAD.name().equals(messageLog.getStatus())) {
+                messageLog.setStatus(Status.ISREAD.name());
+                messageLogRepository.save(messageLog);
+            }
+        }
+        Page<MessageLog> pageList = new PageImpl<MessageLog>(messageLogs, pageInfo, count);
+        return pageList;
+    }
+
+    @Override
+    public Page<MessageText> getPagesAdmin(String keyword, String classes, String timeSorting, PageInfo pageInfo) {
+        Query query = new Query();
+        Criteria criteria = new Criteria();
+        if (StringUtils.hasText(keyword)) {
+            criteria.orOperator(Criteria.where("sender.userName").regex(keyword), Criteria.where("sendEnterprise.enName").regex(keyword), Criteria.where("content").regex(keyword));
+        }
+        if (StringUtils.hasText(classes))
+            criteria.and("classes").is(classes);
+        List<Sort.Order> orders = new ArrayList<Sort.Order>();
+        if (StringUtils.isEmpty(timeSorting))
+            timeSorting = "DESC";
+        if ("DESC".equals(timeSorting))
+            orders.add(new Sort.Order(Sort.Direction.DESC, "sendTime"));
+        if ("ASC".equals(timeSorting))
+            orders.add(new Sort.Order(Sort.Direction.ASC, "sendTime"));
+        Sort sort = new Sort(orders);
+        if (null != sort) {
+            query.with(sort);
+        }
+        query.addCriteria(criteria);
+        Long count = mongoTemplate.count(query, MessageText.class);
+        List<MessageText> messageTexts = mongoTemplate.find(query.with(pageInfo), MessageText.class);
+
+        for (MessageText messageText : messageTexts) {
+            DBObject query1 = new BasicDBObject("textid", messageText.getId());
+            List<MessageLog> messageLogLists = mongoTemplate.getCollection("msg_message_log").distinct("recuu",query1);
+            messageText.setEffectiveNumber( (long) messageLogLists.size() );
+            if (messageText.getCount().equals(1L)) {
+                List<MessageLog> messageLog = messageLogRepository.findByTextid(messageText.getId());
+                if (!messageLog.get(0).getStatus().equals(messageText.getStatus())) {
+                    messageText.setStatus(messageLog.get(0).getStatus());
+                    messageTextRepository.save(messageText);
+                }
+            }
+        }
+
+        Page<MessageText> pageList = new PageImpl<MessageText>(messageTexts, pageInfo, count);
+        return pageList;
+    }
+
+    @Override
+    public Page<MessageLog> getPagePublicPersonal(Long uu, Long enuu, String type, String status, PageInfo pageable) {
+        List<MessageText> unreadmessagetexts = messageTextService.getByType(Type.PUBLIC.name());
+        List<MessageLog> messageLogs = new ArrayList<MessageLog>();
+        if (Type.PERSON.name().equals(type)) {
+//            messageLogs = messageLogRepository.findByRecuuAndMessageTextTypeAndRecType(uu,Type.PUBLIC.name(), type);
+        }
+        if (Type.EMPLOYEE.name().equals(type)) {
+//            messageLogs = messageLogRepository.findByRecuuAndRecenuuAndMessageTextTypeAndRecType(uu, enuu, Type.PUBLIC.name(), type);
+        }
+        if (Type.ENTERPRISE.name().equals(type)) {
+//            messageLogs = messageLogRepository.findByRecenuuAndMessageTextTypeAndRecType(enuu, Type.PUBLIC.name(), type);
+        }
+        if (CollectionUtils.isNotEmpty(messageLogs)) {
+            Set<String> messageLogIds = new HashSet<String>();
+            for (MessageLog messageLog : messageLogs) {
+                messageLogIds.add(messageLog.getMessageText().getId());
+            }
+            for (Iterator it = unreadmessagetexts.iterator(); it.hasNext();) {
+                MessageText thisText = (MessageText) it.next();
+                if (messageLogIds.contains(thisText.getId()))
+                    it.remove();
+            }
+        }
+
+        // 将未读公告加入个人信息
+        for (MessageText messagetext : unreadmessagetexts) {
+            MessageLog messagelog = new MessageLog();
+            messagelog.setSenduu(1l);
+            messagelog.setSendEnuu(1l);
+            messagelog.setMessageText(messagetext);
+            messagelog.setStatus(Status.UNREAD.name());
+//            messagelog.setRecType(type);
+            messagelog.setRecuu(uu);
+            messagelog.setRecenuu(enuu);
+            if (messagelog.getRecuu() != null)
+                messagelog.setReceiver(userBaseInfoReposity.findByUserUU(messagelog.getRecuu()));
+            if (messagelog.getRecenuu() != null)
+                messagelog.setRecenterprise(enterpriseRepository.findByuu(messagelog.getRecenuu()));
+
+            messageLogs.add(messagelog);
+        }
+        messageLogRepository.save(messageLogs);
+
+        return getPage(uu, enuu, type, status, Type.PUBLIC.name(), pageable);
+    }
+
+    @Override
+    public Page<MessageLog> getMessageLogsByText(String textid, String keyword, String status, PageInfo pageable) {
+        Query query = new Query();
+
+        Criteria criteria = new Criteria();
+        criteria.and("textid").is(textid);
+
+        if (StringUtils.hasText(keyword)) {
+            criteria.orOperator(Criteria.where("receiver.userName").regex(keyword), Criteria.where("recenterprise.enName").regex(keyword));
+        }
+        if (StringUtils.hasText(status))
+            criteria.and("status").is(status);
+
+        List<Sort.Order> orders = new ArrayList<Sort.Order>();
+        orders.add(new Sort.Order(Sort.Direction.ASC, "id"));
+        Sort sort = new Sort(orders);
+
+        query.with(sort);
+        query.addCriteria(criteria);
+
+        Long count = mongoTemplate.count(query, MessageLog.class);
+        List<MessageLog> messageLogs = mongoTemplate.find(query.with(pageable), MessageLog.class);
+        Page<MessageLog> messageLogPage = new PageImpl<MessageLog>(messageLogs, pageable, count);
+        return messageLogPage;
+    }
+
+    @Override
+    public JSONObject getMessageLogsCountByText(String textid) {
+        Integer count = messageLogRepository.findByTextid(textid).size();
+        Integer isReadCount = messageLogRepository.findByTextidAndStatus(textid, Status.ISREAD.name()).size();
+        Integer unReadCount = messageLogRepository.findByTextidAndStatus(textid, Status.UNREAD.name()).size();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("count", count);
+        jsonObject.put("isReadCount", isReadCount);
+        jsonObject.put("unReadCount", unReadCount);
+        return jsonObject;
+    }
+
+    @Override
+    public MessageLog sendMessages(JSONObject jsonObject) {
+        String classes = jsonObject.getString("classes");
+        if (StringUtils.isEmpty(classes)) {
+            throw new IllegalOperatorException("没有选择发送信息的类型,请选择后重新发送!");
+        }
+        String recRole = jsonObject.getString("recRole");
+        if (StringUtils.isEmpty(recRole)) {
+            throw new IllegalOperatorException("没有选择发送信息对象的角色,请选择后重新发送!");
+        }
+        Long[] enuus = new Long[0];
+        if (jsonObject.getJSONArray("enuu") != null) {
+            enuus = objectToLong(jsonObject.getJSONArray("enuu").toArray());
+        }
+        List<UserEnterprise> userEnterprises = new ArrayList<UserEnterprise>();
+        if (jsonObject.getString("user") != null) {
+            JSONArray arr = jsonObject.getJSONArray("user");
+            for (Object obj : arr) {
+                UserEnterprise userEnterprise = JSONObject.parseObject(JSONObject.toJSONString(obj), UserEnterprise.class);
+                userEnterprises.add(userEnterprise);
+            }
+        }
+        String content = jsonObject.getString("content");
+        if (StringUtils.isEmpty(content)) {
+            throw new IllegalOperatorException("发送的内容为空,请填写后重新发送!");
+        }
+        if (enuus.length > 1000) {
+            throw new IllegalOperatorException("选择的企业名称超过1000个,请重新发送!");
+        }
+        if (userEnterprises.size() > 1000) {
+            throw new IllegalOperatorException("选择的具体用户超过1000个,请重新发送!");
+        }
+        if (enuus.length < 1 && userEnterprises.size() < 1) {
+            throw new IllegalOperatorException("没有选择要发送信息的对象,请重新发送!");
+        }
+        if (jsonObject.getString("userUu") == null) {
+            throw new IllegalOperatorException("当前操作用户尚未登录,请登录后重新发送!");
+        }
+        Long user_Uu = Long.parseLong(jsonObject.getString("userUu"));
+        //Long en_Uu = Long.parseLong(jsonObject.getString("enUu"));
+        if (!CollectionUtils.isEmpty(userEnterprises)) {
+            for (UserEnterprise user : userEnterprises) {
+                if (CollectionUtils.isEmpty(jdbcTemplate.queryForList("select * from sec$userenterprise where " +
+                        "user_uu = " + user.getUseruu() + " and en_uu = " + user.getEnuu()))) {
+                    if (userBaseInfoReposity.findByUserUU(user.getUseruu()) == null) {
+                        throw new IllegalOperatorException("uu号为" + user.getUseruu() + "的用户不存在,请核对后重新发送!");
+                    }
+                }
+            }
+        }
+        List<UserEnterprise> userEnterprisesRemove = new ArrayList<UserEnterprise>();
+        for (UserEnterprise user : userEnterprises) {
+            if (Arrays.asList(enuus).contains(user.getEnuu())) {
+                userEnterprisesRemove.add(user);
+            }
+        }
+        if (!CollectionUtils.isEmpty(userEnterprisesRemove)) {
+            userEnterprises.removeAll(userEnterprisesRemove);
+        }
+        for (int i = 0; i < enuus.length; i++) {
+            if (enterpriseRepository.findByuu(enuus[i]) == null) {
+                throw new IllegalOperatorException("企业uu号为" + enuus[i] + "的企业不存在,请核对后重新发送!");
+            }
+        }
+        MessageLog messageLog = new MessageLog();
+        MessageText messageText = new MessageText();
+        List<MessageLog> messageLogs = new ArrayList<MessageLog>();
+        messageText.setContent(content);
+        messageText.setClasses(classes);
+        if (!recRole.contains(",")) {
+            if (Type.BUYER.name().equals(recRole)) {
+                messageLog.setRecRole(Type.BUYER.name());
+            } else if (Type.SELLER.name().equals(recRole)) {
+                messageLog.setRecRole(Type.SELLER.name());
+            } else {
+                throw new IllegalOperatorException("没有选择消息接收的角色,请重新选择后再发送!");
+            }
+        }
+        UserBaseInfo sender = userBaseInfoReposity.findByUserUU(user_Uu);
+        messageLog.setSenduu(user_Uu);
+        messageLog.setSender(sender);
+        Long enuu = Long.valueOf(10101);
+        messageLog.setSendEnuu(enuu);
+//        Enterprise enterprise = enterpriseRepository.findByuu(enuu);
+        Enterprise enterprise = new Enterprise(enuu, "平台", "平台");
+        messageLog.setSendEnterprise(enterprise);
+        messageLog.setStatus(Status.UNREAD.name());
+        messageLog.setIsDelete((short) 0);
+        messageLog.setType(Type.PRIVATE.name());
+        messageText.setSenduu(messageLog.getSenduu());
+        messageText.setSendEnuu(messageLog.getSendEnuu());
+        messageText.setSender(sender);
+        messageText.setSendEnterprise(messageLog.getSendEnterprise());
+        messageText.setSendTime(new Date());
+        for (int i = 0; i < enuus.length; i++) {
+            List<Map<String, Object>> en_uus = jdbcTemplate.queryForList("select * from sec$userenterprise where en_uu = " + enuus[i]);
+            for (Map<String, Object> enUu : en_uus) {
+                MessageLog messageLogUser = new MessageLog(messageLog);
+                messageLogUser.setRecenuu(enuus[i]);
+                messageLogUser.setRecenterprise(enterpriseRepository.findByuu(enuus[i]));
+                Long userUu = Long.valueOf(enUu.get("user_uu").toString());
+                messageLogUser.setRecuu(userUu);
+                messageLogUser.setReceiver(userBaseInfoReposity.findByUserUU(userUu));
+                messageLogs.add(messageLogUser);
+            }
+        }
+        for (UserEnterprise user : userEnterprises) {
+            MessageLog messageLogUser = new MessageLog(messageLog);
+            messageLogUser.setRecuu(user.getUseruu());
+            //发送个人信息时给enuu 设置一个默认值用于个人账号的信息查询
+            if (user.getEnuu() != null) {
+                messageLogUser.setRecenuu(user.getEnuu());
+            } else {
+                messageLogUser.setRecenuu(1L);
+            }
+            messageLogUser.setReceiver(userBaseInfoReposity.findByUserUU(messageLogUser.getRecuu()));
+            messageLogUser.setRecenterprise(enterpriseRepository.findByuu(messageLogUser.getRecenuu()));
+            messageLogs.add(messageLogUser);
+        }
+        messageText.setCount((long) messageLogs.size());
+        if (messageLogs.size() == 1) {
+            messageText.setRecuu(messageLogs.get(0).getRecuu());
+            messageText.setReceiver(messageLogs.get(0).getReceiver());
+        }
+        messageTextRepository.save(messageText);
+        for (int i = 0; i < messageLogs.size(); i++) {
+            messageLogs.get(i).setTextid(messageText.getId());
+            messageLogs.get(i).setMessageText(messageText);
+        }
+        if (recRole.contains(",")) {
+            String[] recRoles = recRole.split(",");
+            for (MessageLog messageLog1 : messageLogs) {
+                messageLog1.setRecRole(recRoles[0]);
+            }
+            messageLogRepository.save(messageLogs);
+            List<MessageLog> messageLogss = new ArrayList<MessageLog>();
+            for (MessageLog messageLog1 : messageLogs) {
+                MessageLog messageLog2 = new MessageLog(messageLog1);
+                //如果接受企业是1L,则是个人信息,设置为不发送
+                if (messageLog2.getRecenuu() == 1L) {
+                    continue;
+                }
+                messageLog2.setRecRole(recRoles[1]);
+                messageLog2.setTextid(messageText.getId());
+                messageLog2.setMessageText(messageText);
+                messageLogss.add(messageLog2);
+            }
+            if (messageLogss.size() != 0) {
+                messageLogRepository.save(messageLogss);
+            }
+        } else if (Type.BUYER.name().equals(recRole)) {
+            messageLogRepository.save(messageLogs);
+        } else {
+            List<MessageLog> messageLogss = new ArrayList<MessageLog>();
+            for (MessageLog messageLog1 : messageLogs) {
+                MessageLog messageLog2 = new MessageLog(messageLog1);
+                //如果接受企业是1L,则是个人信息,设置为不发送
+                if (messageLog2.getRecenuu() == 1L) {
+                    continue;
+                }
+                messageLog2.setRecRole(Type.SELLER.name());
+                messageLog2.setTextid(messageText.getId());
+                messageLog2.setMessageText(messageText);
+                messageLogss.add(messageLog2);
+            }
+            if (messageLogss.size() != 0) {
+                messageLogRepository.save(messageLogss);
+            } else {
+                messageTextRepository.delete(messageText);
+                throw new IllegalOperatorException("个人用户没有卖家身份,请选择后重新发送!");
+            }
+        }
+        return null;
+    }
+
+    private Long[] objectToLong(Object[] objects) {
+        Long[] longs = new Long[objects.length];
+        for (int i = 0; i < objects.length; i++) {
+            longs[i] = Long.valueOf(objects[i].toString());
+        }
+        return longs;
+    }
+}

+ 75 - 0
src/main/java/com/uas/cloud/mall/service/impl/MessageTextServiceImpl.java

@@ -0,0 +1,75 @@
+package com.uas.cloud.mall.service.impl;
+
+import com.uas.cloud.mall.domain.MessageLog;
+import com.uas.cloud.mall.domain.MessageText;
+import com.uas.cloud.mall.repository.MessageTextRepository;
+import com.uas.cloud.mall.service.MessageTextService;
+import com.uas.cloud.mall.util.Status;
+import com.uas.cloud.mall.util.Type;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+//import com.uas.cloud.mall.repository.MessageLogRepository;
+
+//import com.uas.cloud.mall.repository.MessageLogRepository;
+
+/**
+ * Created by wangyc on 2017/6/26.
+ */
+@Service
+public class MessageTextServiceImpl implements MessageTextService{
+
+    private final MessageTextRepository messageTextRepository;
+
+//    private final MessageLogRepository messageLogRepository;
+
+    @Autowired
+    public MessageTextServiceImpl(MessageTextRepository messageTextRepository/*, MessageLogRepository messageLogRepository*/) {
+        this.messageTextRepository = messageTextRepository;
+//        this.messageLogRepository = messageLogRepository;
+    }
+
+    @Override
+    public MessageText save(MessageText messageText) {
+        return messageTextRepository.save(messageText);
+    }
+
+    @Override
+    public List<MessageText> findByReciverAndRecTypeAndStatus(Long recuu, Long recenuu, String recType, String status) {
+        List<MessageText> publicText = getByType(Type.PUBLIC.name());
+        List<MessageLog> messageLogs = new ArrayList<MessageLog>();
+//        if (Type.PERSON.name().equals(recType)) {
+//            messageLogs = messageLogRepository.findByRecuuAndMessageTextTypeAndRecType(recuu,Type.PUBLIC.name(), recType);
+//        }
+//        if (Type.EMPLOYEE.name().equals(recType)) {
+//            messageLogs = messageLogRepository.findByRecuuAndRecenuuAndMessageTextTypeAndRecType(recuu, recenuu, Type.PUBLIC.name(), recType);
+//        }
+//        if (Type.ENTERPRISE.name().equals(recType)) {
+//            messageLogs = messageLogRepository.findByRecenuuAndMessageTextTypeAndRecType(recenuu, Type.PUBLIC.name(), recType);
+//        }
+        if (CollectionUtils.isNotEmpty(messageLogs)) {
+            Set<String> messageLogIds = new HashSet<String>();
+            for (MessageLog messageLog : messageLogs) {
+                if (!messageLog.getStatus().equals(Status.UNREAD.name()))
+                    messageLogIds.add(messageLog.getMessageText().getId());
+            }
+            for (Iterator it = publicText.iterator(); it.hasNext();) {
+                MessageText thisText = (MessageText) it.next();
+                if (messageLogIds.contains(thisText.getId()))
+                    it.remove();
+            }
+        }
+
+        return publicText;
+    }
+
+    @Override
+    public List<MessageText> getByType(String type) {
+//        return messageTextRepository.findByType(type);
+        return null;
+    }
+
+}

+ 32 - 0
src/main/java/com/uas/cloud/mall/util/IllegalOperatorException.java

@@ -0,0 +1,32 @@
+package com.uas.cloud.mall.util;
+
+/**
+ * 非法操作
+ * 
+ * @author yingp
+ * 
+ */
+public class IllegalOperatorException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 3958657497510022539L;
+
+	public IllegalOperatorException() {
+		super("非法操作");
+	}
+
+	public IllegalOperatorException(String paramString) {
+		super(paramString);
+	}
+
+	public IllegalOperatorException(String paramString, Throwable paramThrowable) {
+		super(paramString, paramThrowable);
+	}
+
+	public IllegalOperatorException(Throwable paramThrowable) {
+		super(paramThrowable);
+	}
+
+}

+ 68 - 0
src/main/java/com/uas/cloud/mall/util/JacksonUtils.java

@@ -0,0 +1,68 @@
+package com.uas.cloud.mall.util;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * JSON 工具类
+ *
+ * history:
+ * Created by huxz on 2017-3-1 10:16:03
+ */
+public final class JacksonUtils {
+
+	private static ObjectMapper objectMapper;
+
+	/**
+	 * 把JSON文本parse为JavaBean
+	 */
+	public static <T> T fromJson(String text, Class<T> clazz) {
+		if (objectMapper == null) {
+			objectMapper = new ObjectMapper();
+		}
+		try {
+			return objectMapper.readValue(text, clazz);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 把JSON文本parse成JavaBean集合
+	 */
+	public static <T> List<T> fromJsonArray(String text, Class<T> clazz) {
+		if (objectMapper == null) {
+			objectMapper = new ObjectMapper();
+		}
+		JavaType javaType = objectMapper.getTypeFactory().constructParametricType(ArrayList.class, clazz);
+		try {
+			return objectMapper.readValue(text, javaType);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return Collections.emptyList();
+	}
+
+	/**
+	 * 将JavaBean序列化为JSON文本
+	 */
+	public static String toJson(Object object) {
+		if (objectMapper == null) {
+			objectMapper = new ObjectMapper();
+		}
+		try {
+			return objectMapper.writeValueAsString(object);
+		} catch (JsonProcessingException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+}

+ 215 - 0
src/main/java/com/uas/cloud/mall/util/PageInfo.java

@@ -0,0 +1,215 @@
+package com.uas.cloud.mall.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+
+import java.util.LinkedList;
+import java.util.Map;
+
+/**
+ * 分页信息
+ * 
+ * @author yingp
+ * 
+ */
+public class PageInfo implements Pageable {
+
+	public PageInfo() {
+	}
+
+	/**
+	 * 分页信息
+	 * 
+	 * @param jsonPageParams
+	 */
+	public PageInfo(String jsonPageParams) {
+		PageParams params = JSON.parseObject(jsonPageParams,
+				PageParams.class);
+		getPageInfo(params);
+	}
+
+	public PageInfo(PageParams params) {
+		getPageInfo(params);
+	}
+
+	private void getPageInfo(PageParams params) {
+		this.pageSize = params.getCount();
+		if (this.pageSize == 0) {// 不传入页面大小,默认页面大小为5
+			this.pageSize = 5;
+		}
+		this.pageNumber = params.getPage();
+		if (this.pageNumber == 0) {
+			this.pageNumber = 1;// 不传入页码,默认为第一页
+		}
+		this.offset = this.pageSize * (this.pageNumber - 1);
+		if (params.getSorting() != null) {
+			JSONObject sorting = JSON.parseObject(params.getSorting());
+			LinkedList<Sort.Order> orders = new LinkedList<Sort.Order>();
+			for (Object property : sorting.keySet()) {
+				orders.add(new Sort.Order(Direction.fromString(sorting.get(
+						property).toString()), property.toString()));
+			}
+			sort = new Sort(orders);
+		}
+	}
+
+	/**
+	 * 分页信息
+	 * 
+	 * @param pageNumber
+	 *            页码
+	 * @param pageSize
+	 *            单页条数
+	 */
+	public PageInfo(int pageNumber, int pageSize) {
+		this.pageNumber = pageNumber;
+		this.pageSize = pageSize;
+		this.offset = this.pageSize * (this.pageNumber - 1);
+	}
+
+	/**
+	 * 分页信息
+	 * 
+	 * @param pageNumber
+	 *            页码
+	 * @param pageSize
+	 *            单页条数
+	 */
+	public PageInfo(int pageNumber, int pageSize, int offset) {
+		this.pageNumber = pageNumber;
+		this.pageSize = pageSize;
+		this.offset = offset;
+	}
+
+	/**
+	 * 排序
+	 * 
+	 * @param property
+	 *            需要排序的字段
+	 * @param direction
+	 *            方向
+	 */
+	public void sorting(String property, Direction direction) {
+		sort = new Sort(direction, property);
+	}
+
+	/**
+	 * 排序
+	 * 
+	 * @param direction
+	 *            方向
+	 * @param properties
+	 *            需要排序的字段
+	 */
+	public void sorting(Direction direction, String... properties) {
+		sort = new Sort(direction, properties);
+	}
+
+	private int pageNumber;
+
+	private int pageSize;
+
+	private int offset;
+
+	private Sort sort;
+
+	private Map<String, Boolean> ignoreCaseMap; // 是否对这个字段 进行忽略大小写的查询
+
+	public int getPageNumber() {
+		return pageNumber;
+	}
+
+	public int getPageSize() {
+		return pageSize;
+	}
+
+	public int getOffset() {
+		return offset;
+	}
+
+	public Sort getSort() {
+		return sort;
+	}
+
+	public void setPageNumber(int pageNumber) {
+		this.pageNumber = pageNumber;
+	}
+
+	public void setPageSize(int pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public void setOffset(int offset) {
+		this.offset = offset;
+	}
+
+	public void setSort(Sort sort) {
+		this.sort = sort;
+	}
+
+	public Pageable next() {
+		return null;
+	}
+
+	public Pageable previousOrFirst() {
+		return null;
+	}
+
+	public Pageable first() {
+		return null;
+	}
+
+	public boolean hasPrevious() {
+		return false;
+	}
+
+	public Pageable getPageable() {
+		final Pageable scope = this;
+		return new Pageable() {
+
+			@Override
+			public Pageable previousOrFirst() {
+				return scope.previousOrFirst();
+			}
+
+			@Override
+			public Pageable next() {
+				return scope.next();
+			}
+
+			@Override
+			public boolean hasPrevious() {
+				return scope.hasPrevious();
+			}
+
+			@Override
+			public Sort getSort() {
+				return scope.getSort();
+			}
+
+			@Override
+			public int getPageSize() {
+				return scope.getPageSize();
+			}
+
+			@Override
+			public int getPageNumber() {
+				return scope.getPageNumber();
+			}
+
+			@Override
+			public int getOffset() {
+				return scope.getOffset();
+			}
+
+			@Override
+			public Pageable first() {
+				return scope.first();
+			}
+		};
+	}
+
+}

+ 61 - 0
src/main/java/com/uas/cloud/mall/util/PageParams.java

@@ -0,0 +1,61 @@
+package com.uas.cloud.mall.util;
+
+import java.io.Serializable;
+
+public class PageParams implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private int count;
+	private int page;
+	private String filter;
+	private String sorting;
+
+	public int getCount() {
+		return count;
+	}
+
+	public void setCount(int count) {
+		this.count = count;
+	}
+
+	public int getPage() {
+		return page;
+	}
+
+	public void setPage(int page) {
+		this.page = page;
+	}
+
+	public String getFilter() {
+		return filter;
+	}
+
+	public void setFilter(String filter) {
+		this.filter = filter;
+	}
+
+	public String getSorting() {
+		return sorting;
+	}
+
+	public void setSorting(String sorting) {
+		this.sorting = sorting;
+	}
+
+	public PageParams(int count, int page, String filter, String sorting) {
+		super();
+		this.count = count;
+		this.page = page;
+		this.filter = filter;
+		this.sorting = sorting;
+	}
+
+	public PageParams() {
+		super();
+	}
+
+
+}

+ 8 - 0
src/main/java/com/uas/cloud/mall/util/Status.java

@@ -0,0 +1,8 @@
+package com.uas.cloud.mall.util;
+
+/**
+ * Created by wangyc on 2017/6/27.
+ */
+public enum Status {
+    UNREAD, ISREAD, DELETE
+}

+ 8 - 0
src/main/java/com/uas/cloud/mall/util/Type.java

@@ -0,0 +1,8 @@
+package com.uas.cloud.mall.util;
+
+/**
+ * Created by wangyc on 2017/6/27.
+ */
+public enum Type {
+    PUBLIC, PRIVATE, PERSON, EMPLOYEE, ENTERPRISE, SELLER, BUYER
+}

+ 24 - 0
src/main/resources/application-dev.yml

@@ -0,0 +1,24 @@
+server:
+  port: 20240
+
+eureka:
+  client:
+    service-url:
+      defaultZone: http://localhost:1111/eureka/
+
+spring:
+  data:
+    # Spring Data Mongo
+    mongodb:
+      uri: mongodb://10.10.100.22:27017/mall_cms
+
+  jpa:
+    hibernate:
+     ddl:
+      auto:
+        update
+  datasource:
+    url: jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
+    username: root
+    password: select111***
+    driver-class-name: com.mysql.jdbc.Driver

+ 24 - 0
src/main/resources/application-prod.yml

@@ -0,0 +1,24 @@
+server:
+  port: 20240
+
+eureka:
+  client:
+    service-url:
+      defaultZone: http://10.10.0.187:28000/eureka/
+
+spring:
+  data:
+    # Spring Data Mongo
+    mongodb:
+      uri: mongodb://10.10.0.218:27017/mall_intenalmessage
+
+  jpa:
+    hibernate:
+     ddl:
+      auto:
+        update
+  datasource:
+    url: jdbc:mysql://10.10.0.208:8066/mall_prod?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
+    username: sa
+    password: Select123!#%*(
+    driver-class-name: com.mysql.jdbc.Driver

+ 24 - 0
src/main/resources/application-test.yml

@@ -0,0 +1,24 @@
+server:
+  port: 20240
+
+eureka:
+  client:
+    service-url:
+      defaultZone: http://10.10.0.187:28000/eureka/
+
+spring:
+  data:
+    # Spring Data Mongo
+    mongodb:
+      uri: mongodb://10.10.0.218:27017/mall_intenalmessage
+
+  jpa:
+    hibernate:
+     ddl:
+      auto:
+        update
+  datasource:
+    url: jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
+    username: root
+    password: select111***
+    driver-class-name: com.mysql.jdbc.Driver

+ 5 - 0
src/main/resources/application.yml

@@ -0,0 +1,5 @@
+spring:
+  application:
+    name: mall-internalMessage-service
+  profiles:
+    active: dev

+ 16 - 0
src/test/java/com/uas/cloud/mall/MallInternalmessageServiceApplicationTests.java

@@ -0,0 +1,16 @@
+package com.uas.cloud.mall;
+
+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 MallInternalmessageServiceApplicationTests {
+
+	@Test
+	public void contextLoads() {
+	}
+
+}