diff --git a/platform-biz-patient-service/pom.xml b/platform-biz-patient-service/pom.xml
new file mode 100644
index 0000000..272d3af
--- /dev/null
+++ b/platform-biz-patient-service/pom.xml
@@ -0,0 +1,39 @@
+
+
+
+ com.lyms.core
+ regional-platform
+ 1.0.1
+
+ 4.0.0
+ jar
+ platform-biz-patient-service
+
+
+
+ com.lyms.core
+ platform-common
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+
+
+
+
+
+ platform-biz-patient-service
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform-biz-patient-service/src/main/resources/spring/applicationContext_biz_patient.xml b/platform-biz-patient-service/src/main/resources/spring/applicationContext_biz_patient.xml
new file mode 100644
index 0000000..a587f43
--- /dev/null
+++ b/platform-biz-patient-service/src/main/resources/spring/applicationContext_biz_patient.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ dalInterceptor
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform-biz-patient-service/src/main/resources/spring/spring-mongodb.xml b/platform-biz-patient-service/src/main/resources/spring/spring-mongodb.xml
new file mode 100644
index 0000000..12d900e
--- /dev/null
+++ b/platform-biz-patient-service/src/main/resources/spring/spring-mongodb.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform-biz-service/pom.xml b/platform-biz-service/pom.xml
new file mode 100644
index 0000000..f1d4fd1
--- /dev/null
+++ b/platform-biz-service/pom.xml
@@ -0,0 +1,33 @@
+
+
+
+ com.lyms.core
+ regional-platform
+ 1.0.1
+
+ 4.0.0
+ jar
+ platform-biz-service
+
+
+
+ com.lyms.core
+ platform-common
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+
+
+
+ platform-biz-service
+
+
\ No newline at end of file
diff --git a/platform-biz-service/src/main/resources/spring/spring-mybatis.xml b/platform-biz-service/src/main/resources/spring/spring-mybatis.xml
new file mode 100644
index 0000000..9238cae
--- /dev/null
+++ b/platform-biz-service/src/main/resources/spring/spring-mybatis.xml
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.lyms.rp.*.service.*
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform-biz-service/src/main/resources/spring/spring.xml b/platform-biz-service/src/main/resources/spring/spring.xml
new file mode 100644
index 0000000..04786db
--- /dev/null
+++ b/platform-biz-service/src/main/resources/spring/spring.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform-common/pom.xml b/platform-common/pom.xml
new file mode 100644
index 0000000..7dd360a
--- /dev/null
+++ b/platform-common/pom.xml
@@ -0,0 +1,26 @@
+
+
+
+ com.lyms.core
+ regional-platform
+ 1.0.1
+
+ 4.0.0
+ jar
+ platform-common
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+
+
+
+ platform-common
+
+
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/Test.java b/platform-common/src/main/java/com/lyms/platform/common/Test.java
new file mode 100644
index 0000000..0911d56
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/Test.java
@@ -0,0 +1,11 @@
+package com.lyms.platform.common;
+
+public class Test {
+ public static void main(String[] args) {
+// String s="[{\"functionCode\": null,\"id\": 83,\"moduleName\": \"平台管理-医院管理\"+","+\"action\": \"View\"+","+"\"permissionName\": \"查看\",+";
+ /* "moduleCode": null,+
+ "functionName": "床位类型管理",+
+ "ext": "/v1/sickbedTypes}]";*/
+// System.out.println(s);
+}
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java b/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java
new file mode 100644
index 0000000..0a8b050
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java
@@ -0,0 +1,85 @@
+package com.lyms.platform.common.base;
+
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by Peter on 15/3/12.
+ */
+public class BaseController extends ExceptionHandlerController{
+
+ protected Integer getIntTime() {
+ Long time = System.currentTimeMillis() / 1000;
+ return time.intValue();
+ }
+
+ /**
+ * 所有的Ajax 成功结果都用这个方法返回
+ *
+ * @param result
+ * @return
+ */
+ protected Map successResult(Object result) {
+ Map ajaxResult = new HashMap();
+ ajaxResult.put("success", result);
+ return ajaxResult;
+ }
+
+ /**
+ * 便捷方法
+ *
+ * @return
+ */
+ protected Map successResult() {
+ return this.successResult("ok");
+ }
+
+ protected Map failedResult(Object result) {
+ Map ajaxResult = new HashMap();
+ ajaxResult.put("failed", result);
+ return ajaxResult;
+ }
+
+ public void writeString(HttpServletResponse response, String content) {
+ //response.setContentType("application/html;charset=UTF-8");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Cache-Control", "no-cache");
+ try {
+ PrintWriter out = response.getWriter();
+ out.print(content);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void writeJson(HttpServletResponse response, String json) {
+ response.setContentType("application/json;charset=UTF-8");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Cache-Control", "no-cache");
+ try {
+ PrintWriter out = response.getWriter();
+ out.print(json);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public String getIpAddr(HttpServletRequest request) {
+ String ip = request.getHeader("x-forwarded-for");
+ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+ ip = request.getHeader("Proxy-Client-IP");
+ }
+ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+ ip = request.getHeader("WL-Proxy-Client-IP");
+ }
+ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+ ip = request.getRemoteAddr();
+ }
+ return ip;
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/base/ExceptionHandlerController.java b/platform-common/src/main/java/com/lyms/platform/common/base/ExceptionHandlerController.java
new file mode 100644
index 0000000..b276176
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/base/ExceptionHandlerController.java
@@ -0,0 +1,145 @@
+package com.lyms.platform.common.base;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+import com.lyms.platform.common.constants.ErrorCodeConstants;
+import com.lyms.platform.common.exception.BusinessException;
+import com.lyms.platform.common.exception.ParameterException;
+import com.lyms.platform.common.exception.TokenException;
+import com.lyms.platform.common.utils.ExceptionUtils;
+import com.lyms.platform.common.utils.JsonUtil;
+
+/**
+ * spring mvc 异常处理机制
+ */
+public class ExceptionHandlerController {
+
+ @ExceptionHandler(MethodArgumentNotValidException.class)
+ @ResponseStatus(HttpStatus.OK)
+ public void validationError(MethodArgumentNotValidException e, HttpServletResponse httpServletResponse) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(createValidationResponse(e.getBindingResult())));
+ } catch (Exception ex) {
+ }
+ }
+
+ @ExceptionHandler(BindException.class)
+ @ResponseStatus(HttpStatus.OK)
+ public void validationError(BindException e, HttpServletResponse httpServletResponse) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(createValidationResponse(e.getBindingResult())));
+ } catch (Exception ex) {
+ }
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @ExceptionHandler(ParameterException.class)
+ public void validationError(HttpServletResponse httpServletResponse) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+ Map resultMap = new HashMap<>();
+ resultMap.put("errorcode", ErrorCodeConstants.PARAMETER_ERROR);
+ resultMap.put("errormsg", "参数错误.");
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(resultMap));
+ } catch (Exception ex) {
+ ExceptionUtils.catchException(ex, "ExceptionHandlerController validationError.");
+ }
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @ExceptionHandler(TokenException.class)
+ public void buildTokenExpire(HttpServletResponse httpServletResponse) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+ Map resultMap = new HashMap<>();
+ resultMap.put("errorcode", ErrorCodeConstants.TOKEN_EXPIRE);
+ resultMap.put("errormsg", "您当前用户登录状态异常,暂时无法访问,请重新登录");
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(resultMap));
+ } catch (Exception ex) {
+ ExceptionUtils.catchException(ex, "ExceptionHandlerController buildTokenExpire.");
+ }
+ }
+
+ /**
+ * 处理spring mvc 缺少请求参数的异常提示
+ *
+ * @param httpServletResponse
+ * @param missRequestParameter
+ */
+ @ResponseStatus(HttpStatus.OK)
+ @ExceptionHandler(org.springframework.web.bind.MissingServletRequestParameterException.class)
+ public void handlMissingServletRequestParameter(HttpServletResponse httpServletResponse,
+ MissingServletRequestParameterException missRequestParameter) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+ Map resultMap = new HashMap<>();
+ resultMap.put("errorcode", ErrorCodeConstants.PARAMETER_ERROR);
+ resultMap.put("errormsg", missRequestParameter.getMessage());
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(resultMap));
+ } catch (Exception ex) {
+ ExceptionUtils.catchException(ex, "ExceptionHandlerController handlMissingServletRequestParameter.");
+ }
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @ExceptionHandler(BusinessException.class)
+ public void handlBusinessException(HttpServletResponse httpServletResponse, BusinessException busExc) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+ Map resultMap = new HashMap<>();
+ resultMap.put("errorcode", ErrorCodeConstants.BUSINESS_ERROR);
+ resultMap.put("errormsg", busExc.getMessage());
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(resultMap));
+ } catch (Exception ex) {
+ ExceptionUtils.catchException(ex, "ExceptionHandlerController Write response With handException.");
+ }
+ }
+
+ @ResponseStatus(HttpStatus.OK)
+ @ExceptionHandler(Exception.class)
+ public void buildException(HttpServletResponse httpServletResponse, Exception e) {
+ try {
+ setHttpResponseHeader(httpServletResponse);
+ Map resultMap = new HashMap<>();
+ resultMap.put("errorcode", ErrorCodeConstants.SYSTEM_ERROR);
+ resultMap.put("errormsg", "服务器异常.");
+ httpServletResponse.getWriter().print(JsonUtil.obj2JsonString(resultMap));
+ ExceptionUtils.catchException(e, "ExceptionHandlerController Exception.");
+ } catch (Exception ex) {
+ ExceptionUtils.catchException(ex, "ExceptionHandlerController Write response With handException.");
+ }
+ }
+
+ private Map createValidationResponse(BindingResult bindingResult) {
+ Map map = new HashMap();
+ List fieldErrors = bindingResult.getFieldErrors();
+ for (org.springframework.validation.FieldError fieldError : fieldErrors) {
+ map.put("errorcode", fieldError);
+ break;
+ }
+ return map;
+ }
+
+ private void setHttpResponseHeader(HttpServletResponse httpServletResponse) {
+ httpServletResponse.setCharacterEncoding("UTF-8");
+ httpServletResponse.setHeader("Cache-Control", "no-cache");
+
+ httpServletResponse.setContentType("application/json;charset=UTF-8");
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithm.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithm.java
new file mode 100644
index 0000000..4e1b9de
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithm.java
@@ -0,0 +1,43 @@
+package com.lyms.platform.common.cache.redis;
+
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public enum HashAlgorithm {
+
+ /**
+ * MD5-based hash algorithm used by ketama.
+ */
+ KETAMA_HASH;
+
+ public long hash(byte[] digest, int nTime) {
+ long rv = ((long) (digest[3 + nTime * 4] & 0xFF) << 24) | ((long) (digest[2 + nTime * 4] & 0xFF) << 16)
+ | ((long) (digest[1 + nTime * 4] & 0xFF) << 8) | (digest[0 + nTime * 4] & 0xFF);
+
+ return rv & 0xffffffffL; /* Truncate to 32-bits */
+ }
+
+ /**
+ * Get the md5 of the given key.
+ */
+ public byte[] computeMd5(String k) {
+ MessageDigest md5;
+ try {
+ md5 = MessageDigest.getInstance("MD5");
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException("MD5 not supported", e);
+ }
+ md5.reset();
+ byte[] keyBytes = null;
+ try {
+ keyBytes = k.getBytes("UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException("Unknown string :" + k, e);
+ }
+
+ md5.update(keyBytes);
+ return md5.digest();
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmPercentTest.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmPercentTest.java
new file mode 100644
index 0000000..b484d84
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmPercentTest.java
@@ -0,0 +1,103 @@
+package com.lyms.platform.common.cache.redis;
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+@SuppressWarnings("unused")
+public class HashAlgorithmPercentTest {
+
+ static Random ran = new Random();
+
+ /** key's count */
+ private static final Integer EXE_TIMES = 100000;
+
+
+ private static final Integer NODE_COUNT = 5;
+
+ static List allKeys = null;
+
+ static {
+ allKeys = getAllStrings();
+ }
+
+ private static void call(List nodes, Map> map) {
+ KetamaNodeLocator locator = new KetamaNodeLocator();
+ locator.initNodes(nodes);
+
+ for (Map.Entry> entry : map.entrySet()) {
+ Node node = locator.getPrimary(entry.getKey());
+
+ if (node != null) {
+ List list = entry.getValue();
+ list.add(node);
+ }
+ }
+ }
+
+ private static Map> generateRecord() {
+ Map> record = new HashMap>(EXE_TIMES);
+
+ for (String key : allKeys) {
+ List list = record.get(key);
+ if (list == null) {
+ list = new ArrayList();
+ record.put(key, list);
+ }
+ }
+
+ return record;
+ }
+
+ /**
+ * Gets the mock node by the material parameter
+ *
+ * @param nodeCount
+ * the count of node wanted
+ * @return
+ * the node list
+ */
+ private static List getNodes(int nodeCount) {
+ List nodes = new ArrayList();
+
+ for (int k = 1; k <= nodeCount; k++) {
+ Node node = new Node("node" + k, "127.0.0.1", 100, "");
+ nodes.add(node);
+ }
+
+ return nodes;
+ }
+
+ /**
+ * All the keys
+ */
+ private static List getAllStrings() {
+ List allStrings = new ArrayList(EXE_TIMES);
+
+ for (int i = 0; i < EXE_TIMES; i++) {
+ allStrings.add(generateRandomString(ran.nextInt(50)));
+ }
+
+ return allStrings;
+ }
+
+ /**
+ * To generate the random string by the random algorithm
+ *
+ * The char between 32 and 127 is normal char
+ *
+ * @param length
+ * @return
+ */
+ private static String generateRandomString(int length) {
+ StringBuffer sb = new StringBuffer(length);
+
+ for (int i = 0; i < length; i++) {
+ sb.append((char) (ran.nextInt(95) + 32));
+ }
+
+ return sb.toString();
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmTest.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmTest.java
new file mode 100644
index 0000000..94bba8b
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmTest.java
@@ -0,0 +1,67 @@
+package com.lyms.platform.common.cache.redis;
+
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+@SuppressWarnings("unused")
+public class HashAlgorithmTest {
+
+ static Random ran = new Random();
+
+ /** key's count */
+ private static final Integer EXE_TIMES = 100000;
+
+
+ private static final Integer NODE_COUNT = 5;
+
+ /**
+ * Gets the mock node by the material parameter
+ *
+ * @param nodeCount
+ * the count of node wanted
+ * @return
+ * the node list
+ */
+ private List getNodes(int nodeCount) {
+ List nodes = new ArrayList();
+
+ for (int k = 1; k <= nodeCount; k++) {
+ Node node = new Node("node" + k, "127.0.0.1", 2, "");
+ nodes.add(node);
+ }
+
+ return nodes;
+ }
+
+ /**
+ * All the keys
+ */
+ private List getAllStrings() {
+ List allStrings = new ArrayList(EXE_TIMES);
+
+ for (int i = 0; i < EXE_TIMES; i++) {
+ allStrings.add(generateRandomString(ran.nextInt(50)));
+ }
+
+ return allStrings;
+ }
+
+ /**
+ * To generate the random string by the random algorithm
+ *
+ * The char between 32 and 127 is normal char
+ *
+ * @param length
+ * @return
+ */
+ private String generateRandomString(int length) {
+ StringBuffer sb = new StringBuffer(length);
+
+ for (int i = 0; i < length; i++) {
+ sb.append((char) (ran.nextInt(95) + 32));
+ }
+
+ return sb.toString();
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/KetamaNodeLocator.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/KetamaNodeLocator.java
new file mode 100644
index 0000000..0f0f09c
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/KetamaNodeLocator.java
@@ -0,0 +1,56 @@
+package com.lyms.platform.common.cache.redis;
+
+
+import java.util.List;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+public final class KetamaNodeLocator {
+
+ private TreeMap ketamaNodes;
+ private HashAlgorithm hashAlg;
+ public static int numReps = 16;
+
+ public void initNodes(List nodes) {
+ initParam(nodes, HashAlgorithm.KETAMA_HASH, numReps);
+ }
+
+ private void initParam(List nodes, HashAlgorithm alg, int nodeCopies) {
+ hashAlg = HashAlgorithm.KETAMA_HASH;
+ ketamaNodes = new TreeMap();
+ numReps = nodeCopies;
+
+ for (Node node : nodes) {
+ for (int i = 0; i < numReps / 4; i++) {
+ byte[] digest = hashAlg.computeMd5(node.getName() + i);
+ for (int h = 0; h < 4; h++) {
+ long m = hashAlg.hash(digest, h);
+
+ ketamaNodes.put(m, node);
+ }
+ }
+ }
+ }
+
+ public Node getPrimary(final String k) {
+ byte[] digest = hashAlg.computeMd5(k);
+ Node rv = getNodeForKey(hashAlg.hash(digest, 0));
+ return rv;
+ }
+
+ Node getNodeForKey(long hash) {
+ final Node rv;
+ Long key = hash;
+ if (!ketamaNodes.containsKey(key)) {
+ SortedMap tailMap = ketamaNodes.tailMap(key);
+ if (tailMap.isEmpty()) {
+ key = ketamaNodes.firstKey();
+ } else {
+ key = tailMap.firstKey();
+ }
+ }
+
+ rv = ketamaNodes.get(key);
+ return rv;
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/Node.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/Node.java
new file mode 100644
index 0000000..9dc1c60
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/Node.java
@@ -0,0 +1,55 @@
+package com.lyms.platform.common.cache.redis;
+
+
+import java.io.Serializable;
+
+public class Node implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1010631373804335118L;
+ private String name;
+ private String ip;
+ private int port;
+ private String auth;
+
+ public Node(String name, String ip, int port, String auth) {
+ this.name = name;
+ this.ip = ip;
+ this.port = port;
+ this.auth = auth;
+ }
+
+ public String getAuth() {
+ return auth;
+ }
+
+ public void setAuth(String auth) {
+ this.auth = auth;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisConstant.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisConstant.java
new file mode 100644
index 0000000..05ff082
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisConstant.java
@@ -0,0 +1,7 @@
+package com.lyms.platform.common.cache.redis;
+
+
+public class RedisConstant {
+ /** 系统前缀 */
+ public static final String SYSTEM_PREF = "cc_";
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisObj.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisObj.java
new file mode 100644
index 0000000..f77d05e
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisObj.java
@@ -0,0 +1,47 @@
+package com.lyms.platform.common.cache.redis;
+
+
+public class RedisObj {
+
+ private String key;
+ private Object obj;
+ private int secord = 0;
+
+ public RedisObj(String key, Object obj) {
+ super();
+ this.key = key;
+ this.obj = obj;
+ }
+
+ public RedisObj(String key, Object obj, int secord) {
+ super();
+ this.key = key;
+ this.obj = obj;
+ this.secord = secord;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public Object getObj() {
+ return obj;
+ }
+
+ public void setObj(Object obj) {
+ this.obj = obj;
+ }
+
+ public int getSecord() {
+ return secord;
+ }
+
+ public void setSecord(int secord) {
+ this.secord = secord;
+ }
+
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisUtils.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisUtils.java
new file mode 100644
index 0000000..edcc7b3
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisUtils.java
@@ -0,0 +1,262 @@
+package com.lyms.platform.common.cache.redis;
+
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.JedisPoolConfig;
+import redis.clients.jedis.Pipeline;
+
+import com.lyms.platform.common.cache.redis.utils.SerializeUtil;
+import com.lyms.platform.common.utils.Config;
+
+
+public class RedisUtils {
+ private final static String CACHE_PREX = "mommybaby_";
+ /**
+ * Redis工具类,用于获取RedisPool. 参考官网说明如下: You shouldn't use the same instance
+ * from different threads because you'll have strange errors. And sometimes
+ * creating lots of Jedis instances is not good enough because it means lots
+ * of sockets and connections, which leads to strange errors as well. A
+ * single Jedis instance is not threadsafe! To avoid these problems, you
+ * should use JedisPool, which is a threadsafe pool of network connections.
+ * This way you can overcome those strange errors and achieve great
+ * performance. To use it, init a pool: JedisPool pool = new JedisPool(new
+ * JedisPoolConfig(), "localhost"); You can store the pool somewhere
+ * statically, it is thread-safe. JedisPoolConfig includes a number of
+ * helpful Redis-specific connection pooling defaults. For example, Jedis
+ * with JedisPoolConfig will close a connection after 300 seconds if it has
+ * not been returned.
+ *
+ * @author riecard
+ */
+
+ private static Map jedispoolMaps = new ConcurrentHashMap();
+ private static KetamaNodeLocator locator = new KetamaNodeLocator();
+
+ static {
+ initJedisServers();
+ }
+
+ public static void main(String[] a) {
+ System.out.println(getObj("tt"));
+ }
+
+ private static void initJedisServers() {
+ List list = new ArrayList();
+ String[] servers = Config.getItems("redis.servers", "121.41.33.157:6379:mommybaby123");
+ for (String server : servers) {
+ String ip = server.split(":")[0];
+ int port = Integer.parseInt(server.split(":")[1]);
+ String auth = server.split(":")[2];
+ Node node = new Node(server, ip, port, auth);
+ list.add(node);
+ }
+ // 一致hash环
+ locator.initNodes(list);
+ for (Node node : list) {
+ initJedisPools(node);
+ }
+
+ }
+
+ private static void initJedisPools(Node node) {
+ JedisPool pool = null;
+ if (!jedispoolMaps.containsKey(node.getName())) {
+ JedisPoolConfig config = new JedisPoolConfig();
+ config.setMaxActive(50);
+ config.setMaxIdle(10);
+ config.setMaxWait(10);
+ config.setTestOnBorrow(true);
+ config.setTestOnReturn(true);
+ try {
+ pool = new JedisPool(config, node.getIp(), node.getPort(), 5000,node.getAuth());
+ jedispoolMaps.put(node.getName(), pool);
+ } catch (Exception e) {
+ // e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * 获取连接池.
+ *
+ * @return 连接池实例
+ */
+ private static JedisPool getPool(String key) {
+ return jedispoolMaps.get(key);
+ }
+
+ /**
+ * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。
+ */
+
+ private static RedisUtils instance = new RedisUtils();
+
+ /**
+ * 当getInstance方法第一次被调用的时候,它第一次读取
+ * RedisUtilHolder.instance,导致RedisUtilHolder类得到初始化;而这个类在装载并被初始化的时候,会初始化它的静
+ * 态域,从而创建RedisUtil的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。
+ * 这个模式的优势在于,getInstance方法并没有被同步,并且只是执行一个域的访问,因此延迟初始化并没有增加任何访问成本。
+ */
+ public static RedisUtils getInstance() {
+ return instance;
+ }
+
+ /**
+ * 获取Redis实例.
+ *
+ * @return Redis工具类实例
+ */
+ private static Jedis getJedis(String key) {
+ Jedis jedis = null;
+ int count = 0;
+ do {
+ try {
+ jedis = getPool(key).getResource();
+ // log.info("get redis master1!");
+ } catch (Exception e) {
+ // log.error("get redis master1 failed!", e);
+ // 销毁对象
+ getPool(key).returnBrokenResource(jedis);
+ }
+ count++;
+ } while (jedis == null && count < 3);
+ return jedis;
+ }
+
+ /**
+ * 释放redis实例到连接池.
+ *
+ * @param jedis
+ * redis实例
+ */
+ public static void closeJedis(Jedis jedis, String key) {
+ if (jedis != null) {
+ getPool(key).returnResource(jedis);
+ }
+ }
+
+ /**
+ * 得到原生态的redis对象
+ * key 必须,分布式查找缓存系统
+ * @return
+ */
+ public static Jedis getOriginRedis(String key) {
+ key = CACHE_PREX + key;
+ //默认节点数获取缓存服务器
+ Node selectRedis = locator.getPrimary(key);
+ Jedis j = getJedis(selectRedis.getName());
+ return j;
+ }
+
+ /**
+ * 缓存得到对象
+ *
+ * @param key
+ * @return
+ */
+ public static Object getObj(String key) {
+ key = CACHE_PREX + key;
+ Node selectRedis = locator.getPrimary(key);
+ Jedis j = getJedis(selectRedis.getName());
+ Object obj = SerializeUtil.unserialize(j.get(key.getBytes()));
+ closeJedis(j, selectRedis.getName());
+ return obj;
+ }
+
+ /**
+ * 缓存存储对象
+ *
+ * @param key
+ * @param obj
+ */
+ public static void setObj(String key, Object obj) {
+ key = CACHE_PREX + key;
+ Node selectRedis = locator.getPrimary(key);
+ Jedis j = getJedis(selectRedis.getName());
+ j.set(key.getBytes(), SerializeUtil.serialize(obj));
+ closeJedis(j, selectRedis.getName());
+ }
+
+ /**
+ *
+ * @param key
+ * @param obj
+ * @param secord 缓存时间秒
+ */
+ public static void setObj(String key, Object obj,int secord) {
+ key = CACHE_PREX + key;
+ Node selectRedis = locator.getPrimary(key);
+ Jedis j = getJedis(selectRedis.getName());
+ j.setex(key.getBytes(), secord, SerializeUtil.serialize(obj));
+ closeJedis(j, selectRedis.getName());
+ }
+
+ public static void setObj(List list) {
+ if (list.size() > 0) {
+ Node selectRedis = locator.getPrimary(CACHE_PREX + list.get(0).getKey());
+ Jedis j = getJedis(selectRedis.getName());
+ for (RedisObj obj:list) {
+ String key = CACHE_PREX + obj.getKey();
+ if (obj.getSecord() > 0) {
+ j.setex(key.getBytes(),obj.getSecord(), SerializeUtil.serialize(obj.getObj()));
+ } else {
+ j.set(key.getBytes(), SerializeUtil.serialize(obj.getObj()));
+ }
+ }
+ closeJedis(j, selectRedis.getName());
+ }
+
+ }
+
+ public static void delObj(String key) {
+ key = CACHE_PREX + key;
+ Node selectRedis = locator.getPrimary(key);
+ Jedis j = getJedis(selectRedis.getName());
+ j.del(key);
+ System.out.println("delete reids key:----------"+key);
+ closeJedis(j, selectRedis.getName());
+ }
+
+ public static boolean existsObj(String key) {
+ key = CACHE_PREX + key;
+ Node selectRedis = locator.getPrimary(key);
+ Jedis j = getJedis(selectRedis.getName());
+ boolean boo = j.exists(key);
+ closeJedis(j, selectRedis.getName());
+ return boo;
+ }
+
+
+ /**
+ * 批量处理,都保持在一台服务器,趋向于有个找节点的key
+ * @param serverKey
+ * @param map
+ */
+ public static void setObjBatch(String serverKey, Map map) {
+ if (map != null && map.size() > 0) {
+ serverKey = CACHE_PREX + serverKey;
+ Node selectRedis = locator.getPrimary(serverKey);
+ Jedis j = getJedis(selectRedis.getName());
+ Pipeline p = j.pipelined();
+ Iterator> it = map.entrySet().iterator();
+ while (it.hasNext()) {
+ Entry entry = it.next();
+ String objkey = entry.getKey();
+ objkey = CACHE_PREX + objkey;
+ Object obj = entry.getValue();
+ j.set(objkey.getBytes(), SerializeUtil.serialize(obj));
+ }
+ p.sync();
+ closeJedis(j, selectRedis.getName());
+ }
+ }
+
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/cache/redis/utils/SerializeUtil.java b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/utils/SerializeUtil.java
new file mode 100644
index 0000000..3f6505b
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/cache/redis/utils/SerializeUtil.java
@@ -0,0 +1,47 @@
+package com.lyms.platform.common.cache.redis.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+public class SerializeUtil {
+ /**
+ * 序列化
+ *
+ * @param object
+ * @return
+ */
+ public static byte[] serialize(Object object) {
+ ObjectOutputStream oos = null;
+ ByteArrayOutputStream baos = null;
+ try {
+ // 序列化
+ baos = new ByteArrayOutputStream();
+ oos = new ObjectOutputStream(baos);
+ oos.writeObject(object);
+ byte[] bytes = baos.toByteArray();
+ return bytes;
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ /**
+ * 反序列化
+ *
+ * @param bytes
+ * @return
+ */
+ public static Object unserialize(byte[] bytes) {
+ ByteArrayInputStream bais = null;
+ try {
+ // 反序列化
+ bais = new ByteArrayInputStream(bytes);
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ return ois.readObject();
+ } catch (Exception e) {
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/constants/ErrorCodeConstants.java b/platform-common/src/main/java/com/lyms/platform/common/constants/ErrorCodeConstants.java
new file mode 100644
index 0000000..8244ae1
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/constants/ErrorCodeConstants.java
@@ -0,0 +1,38 @@
+package com.lyms.platform.common.constants;
+
+public class ErrorCodeConstants {
+ // 成功
+ public static final int SUCCESS = 0;
+
+ // 发送验证码失败
+ public static final int VERIFY_CODE_FAIL = 4001;
+
+ // token过期
+ public static final int TOKEN_EXPIRE = 4002;
+
+ // 用户不存在
+ public static final int USER_NOT_EXISTS = 4003;
+
+ // 密码错误
+ public static final int USER_PASSWORD_ERROR = 4004;
+
+ // 用户关联的医院不存在
+ public static final int USER_CONSTAN_HOSPITAL_NOT_EXISTS = 4005;
+
+ // 医院信息不存在
+ public static final int HOSPITAL_NOT_EXISTS = 4006;
+
+ // 科室信息不存在
+ public static final int DEPT_NOT_EXISTS = 4006;
+
+ // 手机号码过期
+ public static final int PHONE_EXPIRE = 4007;
+
+ // 参数错误
+ public static final int PARAMETER_ERROR = 4097;
+
+ // 系统异常
+ public static final int SYSTEM_ERROR = 4099;
+
+ public static final int BUSINESS_ERROR = 4098;
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/constants/WsConstants.java b/platform-common/src/main/java/com/lyms/platform/common/constants/WsConstants.java
new file mode 100644
index 0000000..370c95f
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/constants/WsConstants.java
@@ -0,0 +1,13 @@
+package com.lyms.platform.common.constants;
+
+/**
+ *
+ * web service 的命名空间定义
+ *
+ * @author Administrator
+ *
+ */
+public class WsConstants {
+
+ public static final String NS = "http://soap.webservice.lyms.com";
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/Form.java b/platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/Form.java
new file mode 100644
index 0000000..c1d3064
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/Form.java
@@ -0,0 +1,13 @@
+package com.lyms.platform.common.core.annotation.form;
+
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Form {
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/FormParam.java b/platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/FormParam.java
new file mode 100644
index 0000000..3a685c7
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/FormParam.java
@@ -0,0 +1,13 @@
+package com.lyms.platform.common.core.annotation.form;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface FormParam {
+ String value() default "";
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/core/converter/StringMessageConverter.java b/platform-common/src/main/java/com/lyms/platform/common/core/converter/StringMessageConverter.java
new file mode 100644
index 0000000..c85d1c5
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/core/converter/StringMessageConverter.java
@@ -0,0 +1,21 @@
+package com.lyms.platform.common.core.converter;
+
+
+
+import java.util.ArrayList;
+
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.StringHttpMessageConverter;
+
+public class StringMessageConverter extends StringHttpMessageConverter {
+
+ public StringMessageConverter() {
+ setWriteAcceptCharset(false);
+ ArrayList textTypes = new ArrayList();
+ textTypes.add(MediaType.TEXT_PLAIN);
+ textTypes.add(MediaType.TEXT_HTML);
+ textTypes.add(MediaType.TEXT_XML);
+ textTypes.add(MediaType.APPLICATION_XML);
+ setSupportedMediaTypes(textTypes);
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/core/resolve/AnnotationFormArgumentResolver.java b/platform-common/src/main/java/com/lyms/platform/common/core/resolve/AnnotationFormArgumentResolver.java
new file mode 100644
index 0000000..321ef02
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/core/resolve/AnnotationFormArgumentResolver.java
@@ -0,0 +1,129 @@
+
+package com.lyms.platform.common.core.resolve;
+
+import java.lang.reflect.Field;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.servlet.ServletRequest;
+
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.core.MethodParameter;
+import org.springframework.web.bind.ServletRequestDataBinder;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartRequest;
+import org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor;
+import org.springframework.web.util.WebUtils;
+
+import com.lyms.platform.common.core.annotation.form.Form;
+import com.lyms.platform.common.core.annotation.form.FormParam;
+
+
+public class AnnotationFormArgumentResolver extends ServletModelAttributeMethodProcessor {
+ private final ConcurrentMap, Map> definitionsCache = new ConcurrentHashMap, Map>();
+
+ public AnnotationFormArgumentResolver() {
+ super(true);
+ }
+
+ @Override
+ public boolean supportsParameter(MethodParameter parameter) {
+ return parameter.getParameterType().isAnnotationPresent(Form.class);
+ }
+
+ @Override
+ protected void bindRequestParameters(WebDataBinder binder, NativeWebRequest request) {
+ ServletRequest servletRequest = request.getNativeRequest(ServletRequest.class);
+ ServletRequestDataBinder servletBinder = (ServletRequestDataBinder) binder;
+ bind(servletRequest, servletBinder);
+ }
+
+ private void bind(ServletRequest request, ServletRequestDataBinder binder) {
+ Map values = parsePropertyValues(request, binder.getTarget().getClass());
+ MutablePropertyValues propertyValues = new MutablePropertyValues(values);
+ MultipartRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartRequest.class);
+ if (multipartRequest != null) {
+ bindMultipart(multipartRequest.getMultiFileMap(), propertyValues);
+ }
+
+ // todo: support path variables?
+ // from ExtendedServletRequestDataBinder to support path variable
+ // String attr = HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE;
+ // propertyValues.addPropertyValues((Map)
+ // request.getAttribute(attr));
+ binder.bind(propertyValues);
+ }
+
+ private Map parsePropertyValues(ServletRequest request, Class> targetClass) {
+ Map params = new HashMap();
+ //AssertUtils.assertNotNull(request, "request must not be null");
+ Enumeration> paramNames = request.getParameterNames();
+ Map parameterMappings = getOrCreateParameterMappings(targetClass);
+ if (paramNames != null)
+ while (paramNames.hasMoreElements()) {
+ String paramName = (String) paramNames.nextElement();
+ String fieldName = parameterMappings.get(paramName);
+ if (fieldName == null) {
+ fieldName = paramName;
+ }
+ Object value = getParamValue(request, paramName);
+ params.put(fieldName, value);
+ }
+ return params;
+ }
+
+ private Object getParamValue(ServletRequest request, String paramName) {
+ String[] value = request.getParameterValues(paramName);
+ if (value == null)
+ return null;
+ if (value.length > 1)
+ return value;
+ return value[0];
+ }
+
+ Map getOrCreateParameterMappings(Class> targetClass) {
+ Map existingMappings = definitionsCache.get(targetClass);
+ if (existingMappings == null) {
+ Map mappings = createParameterMappings(targetClass);
+ definitionsCache.putIfAbsent(targetClass, mappings);
+ return mappings;
+ }
+ return existingMappings;
+ }
+
+ private Map createParameterMappings(Class> targetClass) {
+ Field[] fields = targetClass.getDeclaredFields();
+ Map mappings = new HashMap(fields.length);
+ // todo: iterate parent class fields?
+ for (Field field : fields) {
+
+ FormParam annotation = field.getAnnotation(FormParam.class);
+ if (annotation != null && !annotation.value().isEmpty()) {
+ mappings.put(annotation.value(), field.getName());
+ }
+ }
+ return mappings;
+ }
+
+ // from WebDataBinder
+ private void bindMultipart(Map> multipartFiles, MutablePropertyValues propertyValues) {
+ for (Map.Entry> entry : multipartFiles.entrySet()) {
+ String key = entry.getKey();
+ List values = entry.getValue();
+ if (values.size() == 1) {
+ MultipartFile value = values.get(0);
+ if (!value.isEmpty()) {
+ propertyValues.add(key, value);
+ }
+ } else {
+ propertyValues.add(key, values);
+ }
+ }
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/core/resolve/MessageResolver.java b/platform-common/src/main/java/com/lyms/platform/common/core/resolve/MessageResolver.java
new file mode 100644
index 0000000..7eb4835
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/core/resolve/MessageResolver.java
@@ -0,0 +1,39 @@
+package com.lyms.platform.common.core.resolve;
+
+import java.util.Properties;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.support.EncodedResource;
+import org.springframework.core.io.support.PropertiesLoaderUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 提示信息装载者
+ *
+ * @author Administrator
+ */
+public class MessageResolver implements InitializingBean {
+
+ private Logger logger = LoggerFactory.getLogger(MessageResolver.class);
+
+ // 提示信息的文件名
+ private String DEFAULT_NAME = "message.properties";
+
+ private String messageFile = DEFAULT_NAME;
+
+ private Properties messageMapHolder;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ logger.info("MessageResolver init start,load {0}", new Object[] { messageFile });
+ Properties proper = PropertiesLoaderUtils.loadProperties(new EncodedResource(new ClassPathResource(messageFile), "UTF8"));
+ messageMapHolder = proper;
+ logger.info("MessageResolver init end,load {0} ,{1}", new Object[] { messageFile, messageMapHolder });
+ }
+
+ public String getErrorMessage(String key) {
+ return messageMapHolder.getProperty(key);
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/datasource/DataSourceContextHolder.java b/platform-common/src/main/java/com/lyms/platform/common/datasource/DataSourceContextHolder.java
new file mode 100644
index 0000000..7064d97
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/datasource/DataSourceContextHolder.java
@@ -0,0 +1,26 @@
+package com.lyms.platform.common.datasource;
+
+public class DataSourceContextHolder {
+
+ public static final String DATA_SOURCE_A = "dataSourceA";
+
+ public static final String DATA_SOURCE_B = "dataSourceB";
+
+ public static final String DATA_SOURCE_C = "dataSourceC";
+
+ public static final String DATA_SOURCE_D = "dataSourceD";
+
+ private static final ThreadLocal contextHolder = new ThreadLocal();
+
+ public static void setDbType(String dbType) {
+ contextHolder.set(dbType);
+ }
+
+ public static String getDbType() {
+ return (contextHolder.get());
+ }
+
+ public static void clearDbType() {
+ contextHolder.remove();
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/datasource/DynamicDataSource.java b/platform-common/src/main/java/com/lyms/platform/common/datasource/DynamicDataSource.java
new file mode 100644
index 0000000..0dc1755
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/datasource/DynamicDataSource.java
@@ -0,0 +1,9 @@
+package com.lyms.platform.common.datasource;
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+public class DynamicDataSource extends AbstractRoutingDataSource {
+ @Override
+ protected Object determineCurrentLookupKey() {
+ return DataSourceContextHolder.getDbType();
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/datasource/annotation/DynamicDataSourceAnnotation.java b/platform-common/src/main/java/com/lyms/platform/common/datasource/annotation/DynamicDataSourceAnnotation.java
new file mode 100644
index 0000000..8106db9
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/datasource/annotation/DynamicDataSourceAnnotation.java
@@ -0,0 +1,16 @@
+package com.lyms.platform.common.datasource.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.lyms.platform.common.datasource.DataSourceContextHolder;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.TYPE, ElementType.METHOD })
+public @interface DynamicDataSourceAnnotation {
+ String dataSource() default DataSourceContextHolder.DATA_SOURCE_A;
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/datasource/aop/DynamicDataSourceAspect.java b/platform-common/src/main/java/com/lyms/platform/common/datasource/aop/DynamicDataSourceAspect.java
new file mode 100644
index 0000000..072a908
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/datasource/aop/DynamicDataSourceAspect.java
@@ -0,0 +1,75 @@
+package com.lyms.platform.common.datasource.aop;
+
+import java.lang.reflect.Method;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.lyms.platform.common.datasource.DataSourceContextHolder;
+import com.lyms.platform.common.datasource.annotation.DynamicDataSourceAnnotation;
+
+@Component
+@Aspect
+@Order(1)
+@SuppressWarnings("rawtypes")
+public class DynamicDataSourceAspect {
+
+ @Before("@annotation(com.lyms.platform.common.datasource.aop.DynamicDataSourceAnnotation)")
+ public void setDynamicDataSource(JoinPoint jp) {
+ Class> className = jp.getTarget().getClass();
+ DynamicDataSourceAnnotation dataSourceAnnotation = className.getAnnotation(DynamicDataSourceAnnotation.class);
+ if (dataSourceAnnotation != null) {
+ String methodName = jp.getSignature().getName();
+ Class[] argClazzs = ((MethodSignature) jp.getSignature()).getMethod().getParameterTypes();
+ Method method;
+ String dtSource = DataSourceContextHolder.DATA_SOURCE_A;
+ try {
+ method = className.getMethod(methodName, argClazzs);
+
+ if (method.isAnnotationPresent(DynamicDataSourceAnnotation.class)) {
+ DynamicDataSourceAnnotation al = method.getAnnotation(DynamicDataSourceAnnotation.class);
+ dtSource = al.dataSource();
+ System.out.println("datasouse before info ==>" + dtSource);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ DataSourceContextHolder.setDbType(dtSource);
+ }
+ // String dataSource = dataSourceAnnotation.dataSource();
+ }
+
+ @After("@annotation(com.lyms.platform.common.datasource.aop.DynamicDataSourceAnnotation)")
+ public void removeDynamicDataSource(JoinPoint jp) {
+ Class> className = jp.getTarget().getClass();
+ DynamicDataSourceAnnotation dataSourceAnnotation = className.getAnnotation(DynamicDataSourceAnnotation.class);
+ if (dataSourceAnnotation != null) {
+ String methodName = jp.getSignature().getName();
+
+ Class[] argClazzs = ((MethodSignature) jp.getSignature()).getMethod().getParameterTypes();
+ Method method;
+ String dtSource = DataSourceContextHolder.DATA_SOURCE_A;
+ try {
+ method = className.getMethod(methodName, argClazzs);
+
+ if (method.isAnnotationPresent(DynamicDataSourceAnnotation.class)) {
+ DynamicDataSourceAnnotation al = method.getAnnotation(DynamicDataSourceAnnotation.class);
+ dtSource = al.dataSource();
+ System.out.println("datasouse after info ==>" + dtSource);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (dtSource != null && !DataSourceContextHolder.DATA_SOURCE_A.equals(dtSource)) {
+ DataSourceContextHolder.clearDbType();
+ }
+ // DataSourceContextHolder.setDbType(dtSource);
+ }
+ // String dataSource = dataSourceAnnotation.dataSource();
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/exception/BusinessException.java b/platform-common/src/main/java/com/lyms/platform/common/exception/BusinessException.java
new file mode 100644
index 0000000..9504bc4
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/exception/BusinessException.java
@@ -0,0 +1,42 @@
+package com.lyms.platform.common.exception;
+
+/**
+ * Created by Administrator on 2015/9/29 0029.
+ */
+public class BusinessException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String code;
+
+ private String message;
+
+ public BusinessException() {
+
+ }
+
+ public BusinessException(String code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/exception/ParameterException.java b/platform-common/src/main/java/com/lyms/platform/common/exception/ParameterException.java
new file mode 100644
index 0000000..e9c572d
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/exception/ParameterException.java
@@ -0,0 +1,44 @@
+package com.lyms.platform.common.exception;
+
+/**
+ *
+ *
+ * Created by Administrator on 2015/9/25 0025.
+ */
+public class ParameterException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String code;
+
+ private String message;
+
+ public ParameterException() {
+
+ }
+
+ public ParameterException(String code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/exception/TokenException.java b/platform-common/src/main/java/com/lyms/platform/common/exception/TokenException.java
new file mode 100644
index 0000000..6fc0994
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/exception/TokenException.java
@@ -0,0 +1,42 @@
+package com.lyms.platform.common.exception;
+
+/**
+ * Created by Administrator on 2015/9/25 0025.
+ */
+public class TokenException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String code;
+
+ private String message;
+
+ public TokenException() {
+ super();
+ }
+
+ public TokenException(String code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java b/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java
new file mode 100644
index 0000000..141ea5f
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java
@@ -0,0 +1,72 @@
+package com.lyms.platform.common.perf;
+
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * dao层的性能拦截类,用于统计dal层操作的耗时
+ *
+ * @author Administrator
+ *
+ */
+public class DalMethodInterceptor implements MethodInterceptor {
+
+ private Logger logger = LoggerFactory.getLogger("DAL-MONITOR");
+
+ /**
+ * 阀值超过该阀值就是warn 级别的日志
+ */
+ private int threshold=50;
+
+ public void setThreshold(int threshold) {
+ this.threshold = threshold;
+ }
+
+ @Override
+ public Object invoke(MethodInvocation arg0) throws Throwable {
+ long start = System.currentTimeMillis();
+ try {
+ Object object = arg0.proceed();
+ return object;
+ } catch (Exception e) {
+ }finally{
+ long end = System.currentTimeMillis();
+ long i =(end - start);
+ String result = arg0.getThis().getClass().getSimpleName() + "."
+ + arg0.getMethod().getName()
+ + getShortArgs(arg0.getArguments()) + " use " + i
+ + "ms.";
+ if(i>threshold){
+ logger.warn(result);
+ }else{
+ logger.info(result);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 获取参数列表
+ *
+ * @param obj
+ * @return
+ */
+ private String getShortArgs(Object[] obj) {
+ StringBuilder builder = new StringBuilder("(");
+ for (Object o : obj) {
+ if (o.getClass().isPrimitive()) {
+ builder.append(o);
+ } else {
+ builder.append(o.getClass().getSimpleName());
+ }
+ builder.append(",");
+ }
+ if(builder.toString().endsWith(",")){
+ builder.deleteCharAt(builder.length()-1).append(")");
+ }
+ return builder.toString();
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/perf/SimpleHttpPerfFilter.java b/platform-common/src/main/java/com/lyms/platform/common/perf/SimpleHttpPerfFilter.java
new file mode 100644
index 0000000..17894f5
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/perf/SimpleHttpPerfFilter.java
@@ -0,0 +1,95 @@
+package com.lyms.platform.common.perf;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * http 性能分析过滤器
+ *
+ * @author Administrator
+ *
+ */
+public class SimpleHttpPerfFilter implements Filter {
+
+ private Logger logger = LoggerFactory.getLogger("ACCESS-MONITOR");
+ /**
+ * 不需要过滤的后缀名字
+ */
+ private List fixUri = new ArrayList();
+
+ @Override
+ public void destroy() {
+ fixUri.clear();
+ fixUri=null;
+ }
+
+ @Override
+ public void doFilter(ServletRequest arg0, ServletResponse arg1,
+ FilterChain arg2) throws IOException, ServletException {
+ if (!check((HttpServletRequest) arg0)) {
+ long start = System.currentTimeMillis();
+ arg2.doFilter(arg0, arg1);
+ long end = System.currentTimeMillis();
+ String queryStr = getRequestUrl((HttpServletRequest) arg0);
+ logger.info(queryStr + " costTime " + (end - start) + "ms.");
+ }
+ }
+
+ /**
+ * 检查是否需要过滤
+ *
+ * @param httpServletRequest
+ * @return
+ */
+ private boolean check(HttpServletRequest httpServletRequest) {
+ boolean f = false;
+ for (int i = 0; i < fixUri.size(); i++) {
+ f = httpServletRequest.getRequestURI().endsWith(fixUri.get(i));
+ if (f) {
+ break;
+ }
+ }
+ return f;
+ }
+
+ @Override
+ public void init(FilterConfig arg0) throws ServletException {
+ String fixNames = arg0.getInitParameter("fixName");
+ if (null != fixNames) {
+ fixUri.addAll(Arrays.asList(fixNames.split(",")));
+ }
+ }
+
+ /**
+ *
+ * 获取请求的url和参数信息
+ *
+ * @param httpServletRequest
+ * @return
+ */
+ private String getRequestUrl(HttpServletRequest httpServletRequest) {
+ StringBuilder builder = new StringBuilder(128);
+
+ builder.append(httpServletRequest.getMethod()).append('|');
+
+ builder.append(httpServletRequest.getRequestURI());
+ String queryString = httpServletRequest.getQueryString();
+ if (null != queryString) {
+ builder.append('?').append(queryString);
+ }
+ return builder.toString();
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/result/BaseModel.java b/platform-common/src/main/java/com/lyms/platform/common/result/BaseModel.java
new file mode 100644
index 0000000..5028c68
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/result/BaseModel.java
@@ -0,0 +1,20 @@
+package com.lyms.platform.common.result;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+
+public class BaseModel implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this,
+ ToStringStyle.DEFAULT_STYLE);
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/result/BaseResponse.java b/platform-common/src/main/java/com/lyms/platform/common/result/BaseResponse.java
new file mode 100644
index 0000000..62a64a2
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/result/BaseResponse.java
@@ -0,0 +1,45 @@
+package com.lyms.platform.common.result;
+
+
+/**
+ * 基础的返回模型
+ *
+ * @author Administrator
+ *
+ */
+public class BaseResponse extends BaseModel {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ protected String errormsg;
+ protected String errorcode;
+
+ public BaseResponse() {
+ super();
+ }
+
+ public BaseResponse(String errormsg, String errorcode) {
+ super();
+ this.errormsg = errormsg;
+ this.errorcode = errorcode;
+ }
+
+ public String getErrormsg() {
+ return errormsg;
+ }
+
+ public void setErrormsg(String errormsg) {
+ this.errormsg = errormsg;
+ }
+
+ public String getErrorcode() {
+ return errorcode;
+ }
+
+ public void setErrorcode(String errorcode) {
+ this.errorcode = errorcode;
+ }
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/Config.java b/platform-common/src/main/java/com/lyms/platform/common/utils/Config.java
new file mode 100644
index 0000000..1302ce9
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/utils/Config.java
@@ -0,0 +1,75 @@
+package com.lyms.platform.common.utils;
+
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public class Config {
+
+ private static ResourceBundle rb = null;
+ @SuppressWarnings("unused")
+ private static final Locale locale = new Locale("zh", "ZH");
+
+ static {
+ try {
+ rb = ResourceBundle.getBundle("config");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static String getItem(String item, String defaultValue) {
+ String value = null;
+ if (rb != null) {
+ try {
+ value = rb.getString(item.trim());
+ } catch (Exception e) {
+ }
+ }
+ if (value == null) {
+ return defaultValue;
+ }
+ return value.trim();
+ }
+
+ public static String[] getItems(String item,String defaultvalue) {
+ String[] values = null;
+ if (rb != null) {
+ String value = null;
+ try {
+ value = rb.getString(item.trim());
+ if (value == null||value.indexOf('$')>=0) {
+ return defaultvalue.split(",");
+ }
+ return value.split(",");
+ } catch (Exception e) {
+ System.out.println("cache.redis.config Config item=" + item + e);
+ }
+
+ } else {
+ return defaultvalue.split(",");
+ }
+ return values;
+ }
+
+ public static int getIntItem(String item, String defaultValue) {
+ int i = 0;
+ String value = getItem(item, defaultValue);
+ try {
+ i = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ System.out.println("cache.redis.config Config item=" + item + ", defaultValue=" + defaultValue + e);
+ }
+ return i;
+ }
+
+ public static boolean getBooleanItem(String item, boolean defaultValue) {
+ boolean b = false;
+ String value = getItem(item, Boolean.valueOf(defaultValue).toString());
+ if (value != null && value.equalsIgnoreCase("true")) {
+ b = true;
+ }
+ return b;
+ }
+
+}
\ No newline at end of file
diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java b/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java
new file mode 100644
index 0000000..0b5e1c2
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java
@@ -0,0 +1,315 @@
+package com.lyms.platform.common.utils;
+
+
+import org.joda.time.DateTime;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+public class DateUtil {
+
+ public static SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");
+ public static SimpleDateFormat y_m_d = new SimpleDateFormat("yyyy-MM-dd");
+ public static SimpleDateFormat m_d = new SimpleDateFormat("MM/dd");
+ public static SimpleDateFormat y_m_d_h_m_s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ public static SimpleDateFormat y_m_d_h_m = new SimpleDateFormat("yyyyMMddHHmm");
+ public static SimpleDateFormat yyyyMMddHHmmssSSS = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ public static final int DAY_SECONDS = 86399;
+ public static final int DAY_FULL_SECONDS = 86400;
+
+ public static String getymdhmss() {
+ return yyyyMMddHHmmssSSS.format(new Date());
+ }
+
+ public static Integer getDays(Date start,
+ Date end) {
+ Integer days = 0;
+ if (start != null && end != null) {
+ start = getDayStartTime(start);
+ end = getDayStartTime(end);
+ Integer seconds = (int) ((end.getTime() - start.getTime()) / 1000);
+ days = seconds / DAY_FULL_SECONDS;
+ }
+ return days;
+ }
+
+ public static Integer minute2Index(Date date) {
+ DateTime dt = new DateTime(date.getTime());
+ return dt.getMinuteOfDay() / 10;
+ }
+
+ public static Integer getAge(Date birth) {
+ if (birth == null) {
+ return null;
+ }
+ Date now = new Date();
+ long m = now.getTime() - birth.getTime();
+ Long age = m / 31536000000L;
+ return age.intValue();
+ }
+
+ public static Integer getWeek(Date date) {
+ if (date == null) {
+ return null;
+ }
+ Date now = new Date();
+ date = getDayStartTime(date);
+ long m = now.getTime() - date.getTime() + 86400000L;
+ Long week = m / 604800000L;
+ return week.intValue();
+ }
+
+ public static Integer getWeek(Date start, Date end) {
+ if (start == null || end == null) {
+ return null;
+ }
+ start = getDayStartTime(start);
+ end = getDayStartTime(end);
+ long m = end.getTime() - start.getTime() + 86400000L;
+ Long week = m / 604800000L;
+ return week.intValue();
+ }
+
+ public static Long getStartTime() {
+ Calendar todayStart = Calendar.getInstance();
+ todayStart.set(Calendar.HOUR_OF_DAY
+ , 0);
+ todayStart.set(Calendar.MINUTE, 0);
+ todayStart.set(Calendar.SECOND, 0);
+ todayStart.set(Calendar.MILLISECOND, 0);
+ return todayStart.getTime().getTime();
+ }
+
+ public static Long getEndTime() {
+ Calendar todayEnd = Calendar.getInstance();
+ todayEnd.set(Calendar.HOUR_OF_DAY
+ , 23);
+ todayEnd.set(Calendar.MINUTE, 59);
+ todayEnd.set(Calendar.SECOND, 59);
+ todayEnd.set(Calendar.MILLISECOND, 999);
+ return todayEnd.getTime().getTime();
+ }
+
+ /**
+ * 获取到秒
+ *
+ * @param date
+ * @return
+ */
+ public static Integer getSecond(Date date) {
+ if (null == date) {
+ return 0;
+ }
+ long time = date.getTime();
+ return (int) (time / 1000);
+ }
+
+ public static Integer getInt() {
+ long time = new Date().getTime();
+ return (int) (time / 1000);
+ }
+
+ public static String getYmdhm(int day,
+ int minute) {
+ DateTime dt = new DateTime();
+ dt = dt.minusMillis(dt.getMillisOfDay());
+ dt = dt.plusDays(day);
+ dt = dt.plusMinutes(minute);
+ return dt.toString("yyyyMMddHHmm");
+ }
+
+ public static Date getYmdhmDate(String s) {
+ if (s == null) {
+ return null;
+ }
+ try {
+ return y_m_d_h_m.parse(s);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static String getymdhm(Date d) {
+ if (d == null) {
+ return null;
+ }
+ try {
+ return y_m_d_h_m.format(d);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * @return 返回当前年月日字符串 :20131025
+ */
+ public static String getYmd() {
+ return ymd.format(new Date());
+ }
+
+ public static String getYmd(Date d) {
+ if (d == null) {
+ return null;
+ }
+ try {
+ return ymd.format(d);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static Date parseYMD(String s) {
+ if (s == null) {
+ return null;
+ }
+ try {
+ return y_m_d.parse(s);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static String getyyyy_MM_dd(Date d) {
+ if (d == null) {
+ return null;
+ }
+ try {
+ return y_m_d.format(d);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static String getMM_dd(Date d) {
+ if (d == null) {
+ return null;
+ }
+ try {
+ return m_d.format(d);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static Date parseYMDHMS(String s) {
+ if (s == null) {
+ return null;
+ }
+ try {
+ return y_m_d_h_m_s.parse(s);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static String getyyyy_MM_dd_hms(Date d) {
+ if (d == null) {
+ return null;
+ }
+ try {
+ return y_m_d_h_m_s.format(d);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static Date getDayStartTime(Date startTime) {
+ if (startTime == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(startTime.getTime());
+ dt = dt.minusMillis(dt.getMillisOfDay());
+ return dt.toDate();
+ }
+
+ public static Date getDayEndTime(Date endTime) {
+ if (endTime == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(endTime.getTime());
+ dt = dt.minusMillis(dt.getMillisOfDay()).plusSeconds(DAY_SECONDS);
+ return dt.toDate();
+ }
+
+ public static Date getMonthStart(Date time) {
+ if (time == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(time.getTime());
+ dt = dt.minusMillis(dt.getMillisOfDay()).minusDays(dt.getDayOfMonth() - 1);
+ return dt.toDate();
+ }
+
+ public static Date getMonthEndTime(Date endTime) {
+ if (endTime == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(getMonthStart(new DateTime(endTime.getTime()).plusMonths(1).toDate())).minusDays(1).plusSeconds(DAY_SECONDS);
+ return dt.toDate();
+ }
+
+ public static Date getQuarterStart(Date date) {
+ if (date == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(date.getTime()).minusMonths(1);
+ dt = dt.withMonthOfYear(dt.getMonthOfYear() / 3 * 3 + 1);
+ return getMonthStart(dt.toDate());
+ }
+
+ public static Date getQuarterEnd(Date date) {
+ if (date == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(date.getTime()).minusMonths(1);
+ dt = dt.withMonthOfYear(dt.getMonthOfYear() / 3 * 3 + 3);
+ return getMonthEndTime(dt.toDate());
+ }
+
+ public static Date getWeekStart(Date date) {
+ if (date == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(date.getTime());
+ dt = dt.withDayOfWeek(1);
+ return getDayStartTime(dt.toDate());
+ }
+
+ public static Date getWeekEnd(Date date) {
+ if (date == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(date.getTime());
+ dt = dt.withDayOfWeek(1).plusDays(6);
+ return getDayEndTime(dt.toDate());
+ }
+
+ public static Integer getWeekNum(Date date) {
+ if (date == null) {
+ return null;
+ }
+ DateTime dt = new DateTime(date.getTime());
+ return (dt.getWeekyear() % 100) * 100 + dt.getWeekOfWeekyear();
+ }
+
+
+ public static Date addDay(Date srcDate, int days) {
+ Calendar rightNow = Calendar.getInstance();
+ rightNow.setTime(srcDate);
+ rightNow.add(Calendar.DAY_OF_YEAR, days);
+ return rightNow.getTime();
+ }
+
+
+ public static void main(String[] arg) {
+ Date today = new Date(1448336360000L);
+
+ System.out.println(DateUtil.getyyyy_MM_dd_hms(today));
+ System.out.println(today);
+ System.out.println(getWeek(parseYMDHMS("2015-05-20 16:30:00"), parseYMDHMS("2015-12-22 11:30:00")));
+ System.out.println(new DateTime().minusDays(77));
+ System.out.println(getWeek(parseYMD("2015-4-23")));
+ }
+
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/ExceptionUtils.java b/platform-common/src/main/java/com/lyms/platform/common/utils/ExceptionUtils.java
new file mode 100644
index 0000000..cac0ee0
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/utils/ExceptionUtils.java
@@ -0,0 +1,17 @@
+package com.lyms.platform.common.utils;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created by Administrator on 2015/9/25 0025.
+ */
+public class ExceptionUtils {
+
+ private static Logger logger = LoggerFactory.getLogger("COMMON-ERROR");
+
+ public static void catchException(Exception exception,String message){
+ logger.error(message,exception);
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/ImageUtils.java b/platform-common/src/main/java/com/lyms/platform/common/utils/ImageUtils.java
new file mode 100644
index 0000000..27a03e1
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/utils/ImageUtils.java
@@ -0,0 +1,68 @@
+package com.lyms.platform.common.utils;
+
+
+import org.apache.commons.io.FilenameUtils;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Created by Peter on 15/3/14.
+ */
+public class ImageUtils {
+
+ public static void zoom(File srcFile,File destFile,int destWidth,int destHeight){
+ Graphics2D graphics2D = null;
+ ImageOutputStream imageOutputStream = null;
+ ImageWriter imageWriter = null;
+ try {
+ BufferedImage srcBufferedImage = ImageIO.read(srcFile);
+ int srcWidth = srcBufferedImage.getWidth();
+ int srcHeight = srcBufferedImage.getHeight();
+ int width = destWidth;
+ int height = destHeight;
+ if (srcHeight >= srcWidth) {
+ width = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
+ } else {
+ height = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
+ }
+ BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
+ graphics2D = destBufferedImage.createGraphics();
+ graphics2D.setBackground(Color.white);
+ graphics2D.clearRect(0, 0, destWidth, destHeight);
+ graphics2D.drawImage(srcBufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH), (destWidth / 2) - (width / 2), (destHeight / 2) - (height / 2), null);
+
+ imageOutputStream = ImageIO.createImageOutputStream(destFile);
+ imageWriter = ImageIO.getImageWritersByFormatName(FilenameUtils.getExtension(destFile.getName())).next();
+ imageWriter.setOutput(imageOutputStream);
+ ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
+ imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ imageWriteParam.setCompressionQuality((float) (95 / 100.0));
+ imageWriter.write(null, new IIOImage(destBufferedImage, null, null), imageWriteParam);
+ imageOutputStream.flush();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (graphics2D != null) {
+ graphics2D.dispose();
+ }
+ if (imageWriter != null) {
+ imageWriter.dispose();
+ }
+ if (imageOutputStream != null) {
+ try {
+ imageOutputStream.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ }
+}
diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/JsonUtil.java b/platform-common/src/main/java/com/lyms/platform/common/utils/JsonUtil.java
new file mode 100644
index 0000000..7e85b18
--- /dev/null
+++ b/platform-common/src/main/java/com/lyms/platform/common/utils/JsonUtil.java
@@ -0,0 +1,83 @@
+package com.lyms.platform.common.utils;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.*;
+
+public class JsonUtil {
+
+
+ @SuppressWarnings("unchecked")
+ public static T str2Obj(String content,
+ Class cls) {
+ if (StringUtils.isNotBlank(content)) {
+ return (T) JSONObject.toBean(JSONObject.fromObject(content), cls);
+ }
+ return null;
+ }
+
+ public static JSONObject getObj(String content) {
+ if (StringUtils.isNotBlank(content))
+ return JSONObject.fromObject(content);
+ return null;
+ }
+
+ public static Integer getGameCode(String content) {
+ if (StringUtils.isNotBlank(content)) {
+ JSONObject obj = JSONObject.fromObject(content);
+ return obj.getInt("code");
+ }
+ return -1000;
+ }
+
+ public static String obj2JsonString(Object obj) {
+ return JSONObject.fromObject(obj).toString();
+ }
+
+ public static String array2JsonString(Object obj) {
+ return JSONArray.fromObject(obj).toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ public static List toList(String content,
+ Class cls) {
+ return (List) JSONArray.toCollection(JSONArray.fromObject(content), cls);
+ }
+
+ public static void main(String[] args) {
+ List