From b8eb6e78a33e75eec7645862be981c13256093a9 Mon Sep 17 00:00:00 2001 From: jiangjiazhi Date: Wed, 9 Mar 2016 14:14:02 +0800 Subject: [PATCH] first commit --- platform-biz-patient-service/pom.xml | 39 ++ .../spring/applicationContext_biz_patient.xml | 46 ++ .../src/main/resources/spring/spring-mongodb.xml | 15 + platform-biz-service/pom.xml | 33 ++ .../src/main/resources/spring/spring-mybatis.xml | 165 ++++++++ .../src/main/resources/spring/spring.xml | 22 + platform-common/pom.xml | 26 ++ .../main/java/com/lyms/platform/common/Test.java | 11 + .../lyms/platform/common/base/BaseController.java | 85 ++++ .../common/base/ExceptionHandlerController.java | 145 +++++++ .../platform/common/cache/redis/HashAlgorithm.java | 43 ++ .../cache/redis/HashAlgorithmPercentTest.java | 103 +++++ .../common/cache/redis/HashAlgorithmTest.java | 67 +++ .../common/cache/redis/KetamaNodeLocator.java | 56 +++ .../com/lyms/platform/common/cache/redis/Node.java | 55 +++ .../platform/common/cache/redis/RedisConstant.java | 7 + .../lyms/platform/common/cache/redis/RedisObj.java | 47 +++ .../platform/common/cache/redis/RedisUtils.java | 262 ++++++++++++ .../common/cache/redis/utils/SerializeUtil.java | 47 +++ .../common/constants/ErrorCodeConstants.java | 38 ++ .../platform/common/constants/WsConstants.java | 13 + .../platform/common/core/annotation/form/Form.java | 13 + .../common/core/annotation/form/FormParam.java | 13 + .../core/converter/StringMessageConverter.java | 21 + .../resolve/AnnotationFormArgumentResolver.java | 129 ++++++ .../common/core/resolve/MessageResolver.java | 39 ++ .../common/datasource/DataSourceContextHolder.java | 26 ++ .../common/datasource/DynamicDataSource.java | 9 + .../annotation/DynamicDataSourceAnnotation.java | 16 + .../datasource/aop/DynamicDataSourceAspect.java | 75 ++++ .../common/exception/BusinessException.java | 42 ++ .../common/exception/ParameterException.java | 44 ++ .../platform/common/exception/TokenException.java | 42 ++ .../platform/common/perf/DalMethodInterceptor.java | 72 ++++ .../platform/common/perf/SimpleHttpPerfFilter.java | 95 +++++ .../com/lyms/platform/common/result/BaseModel.java | 20 + .../lyms/platform/common/result/BaseResponse.java | 45 ++ .../com/lyms/platform/common/utils/Config.java | 75 ++++ .../com/lyms/platform/common/utils/DateUtil.java | 315 ++++++++++++++ .../lyms/platform/common/utils/ExceptionUtils.java | 17 + .../com/lyms/platform/common/utils/ImageUtils.java | 68 +++ .../com/lyms/platform/common/utils/JsonUtil.java | 83 ++++ .../platform/common/utils/ReflectionUtils.java | 275 ++++++++++++ .../lyms/platform/common/utils/ResultUtils.java | 28 ++ platform-dal/pom.xml | 33 ++ .../main/java/com/lyms/platform/dao/BaseDao.java | 49 +++ .../main/java/com/lyms/platform/pojo/Patients.java | 229 ++++++++++ platform-data-api/pom.xml | 103 +++++ .../platform/data/web/result/EmergenceResult.java | 59 +++ .../lyms/platform/data/web/result/Emergences.java | 44 ++ .../data/web/ws/EmergenceServiceWsImpl.java | 30 ++ .../data/web/ws/intf/IEmergenceServiceWs.java | 13 + .../src/main/resources/database.properties | 11 + .../src/main/resources/log4j_config.xml | 91 ++++ .../resources/spring/applicationContext-cxf.xml | 25 ++ .../main/resources/spring/applicationContext.xml | 71 ++++ platform-data-api/src/main/webapp/WEB-INF/web.xml | 54 +++ platform-operate-api/pom.xml | 76 ++++ .../src/main/resources/log4j_config.xml | 91 ++++ .../resources/spring/applicationContext-mvc.xml | 36 ++ .../main/resources/spring/applicationContext.xml | 17 + .../src/main/webapp/WEB-INF/cxf-servlet.xml | 23 + .../src/main/webapp/WEB-INF/web.xml | 56 +++ .../src/main/webapp/crossdomain.xml | 4 + platform-report-api/pom.xml | 76 ++++ .../src/main/resources/log4j_config.xml | 91 ++++ .../main/resources/spring/applicationContext.xml | 17 + .../src/main/webapp/WEB-INF/cxf-servlet.xml | 23 + .../src/main/webapp/WEB-INF/web.xml | 56 +++ .../src/main/webapp/crossdomain.xml | 4 + platform-resource/resources/config-dev.properties | 10 + .../resources/config-product.properties | 13 + platform-resource/resources/config-test.properties | 13 + pom.xml | 462 +++++++++++++++++++++ 74 files changed, 4767 insertions(+) create mode 100644 platform-biz-patient-service/pom.xml create mode 100644 platform-biz-patient-service/src/main/resources/spring/applicationContext_biz_patient.xml create mode 100644 platform-biz-patient-service/src/main/resources/spring/spring-mongodb.xml create mode 100644 platform-biz-service/pom.xml create mode 100644 platform-biz-service/src/main/resources/spring/spring-mybatis.xml create mode 100644 platform-biz-service/src/main/resources/spring/spring.xml create mode 100644 platform-common/pom.xml create mode 100644 platform-common/src/main/java/com/lyms/platform/common/Test.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/base/ExceptionHandlerController.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithm.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmPercentTest.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/HashAlgorithmTest.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/KetamaNodeLocator.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/Node.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisConstant.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisObj.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/RedisUtils.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/cache/redis/utils/SerializeUtil.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/constants/ErrorCodeConstants.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/constants/WsConstants.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/Form.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/core/annotation/form/FormParam.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/core/converter/StringMessageConverter.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/core/resolve/AnnotationFormArgumentResolver.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/core/resolve/MessageResolver.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/datasource/DataSourceContextHolder.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/datasource/DynamicDataSource.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/datasource/annotation/DynamicDataSourceAnnotation.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/datasource/aop/DynamicDataSourceAspect.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/exception/BusinessException.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/exception/ParameterException.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/exception/TokenException.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/perf/DalMethodInterceptor.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/perf/SimpleHttpPerfFilter.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/result/BaseModel.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/result/BaseResponse.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/Config.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/ExceptionUtils.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/ImageUtils.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/JsonUtil.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/ReflectionUtils.java create mode 100644 platform-common/src/main/java/com/lyms/platform/common/utils/ResultUtils.java create mode 100644 platform-dal/pom.xml create mode 100644 platform-dal/src/main/java/com/lyms/platform/dao/BaseDao.java create mode 100644 platform-dal/src/main/java/com/lyms/platform/pojo/Patients.java create mode 100644 platform-data-api/pom.xml create mode 100644 platform-data-api/src/main/java/com/lyms/platform/data/web/result/EmergenceResult.java create mode 100644 platform-data-api/src/main/java/com/lyms/platform/data/web/result/Emergences.java create mode 100644 platform-data-api/src/main/java/com/lyms/platform/data/web/ws/EmergenceServiceWsImpl.java create mode 100644 platform-data-api/src/main/java/com/lyms/platform/data/web/ws/intf/IEmergenceServiceWs.java create mode 100644 platform-data-api/src/main/resources/database.properties create mode 100644 platform-data-api/src/main/resources/log4j_config.xml create mode 100644 platform-data-api/src/main/resources/spring/applicationContext-cxf.xml create mode 100644 platform-data-api/src/main/resources/spring/applicationContext.xml create mode 100644 platform-data-api/src/main/webapp/WEB-INF/web.xml create mode 100644 platform-operate-api/pom.xml create mode 100644 platform-operate-api/src/main/resources/log4j_config.xml create mode 100644 platform-operate-api/src/main/resources/spring/applicationContext-mvc.xml create mode 100644 platform-operate-api/src/main/resources/spring/applicationContext.xml create mode 100644 platform-operate-api/src/main/webapp/WEB-INF/cxf-servlet.xml create mode 100644 platform-operate-api/src/main/webapp/WEB-INF/web.xml create mode 100644 platform-operate-api/src/main/webapp/crossdomain.xml create mode 100644 platform-report-api/pom.xml create mode 100644 platform-report-api/src/main/resources/log4j_config.xml create mode 100644 platform-report-api/src/main/resources/spring/applicationContext.xml create mode 100644 platform-report-api/src/main/webapp/WEB-INF/cxf-servlet.xml create mode 100644 platform-report-api/src/main/webapp/WEB-INF/web.xml create mode 100644 platform-report-api/src/main/webapp/crossdomain.xml create mode 100644 platform-resource/resources/config-dev.properties create mode 100644 platform-resource/resources/config-product.properties create mode 100644 platform-resource/resources/config-test.properties create mode 100644 pom.xml 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> list = new ArrayList>(); + for (int i = 24; i <= 28; i++) { + Map map = new HashMap(); + map.put("day", i); + map.put("havedata", 0); + list.add(map); + } + Random r = new Random(); + for (int i = 1; i <= 31; i++) { + Map map = new HashMap(); + map.put("day", i); + map.put("havedata", 1); + map.put("nowfee", 3216 + r.nextInt(1000000)); + map.put("oldfee", 3216 + r.nextInt(1000000)); + map.put("dau", 3216 + r.nextInt(1000000)); + map.put("dnu", 3216 + r.nextInt(1000000)); + list.add(map); + } + for (int i = 1; i <= 6; i++) { + Map map = new HashMap(); + map.put("day", i); + map.put("havedata", 0); + list.add(map); + } + System.out.println(array2JsonString(list)); + + String json = "{\"code\":0,\"info\":\"success\",\"data\":{\"systemMail\":{\"mailVer\":19,\"target\":0,\"condition\":0,\"value\":2,\"title\":\"???è?????é??\",\"content\":\"???è?????é?????è?????é??\",\"sendTime\":1402555848,\"award\":{\"awardId\":0,\"gold\":2,\"heart\":2,\"diamond\":333,\"items\":[12,123],\"itemsCount\":[1,2]}}},\"sys_time\":1402555848}"; + JSONObject obj = getObj(json); + System.out.println(obj.getJSONObject("data").getJSONObject("systemMail").getInt("mailVer")); + System.out.println(obj.getInt("code")); + + } + +} diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/ReflectionUtils.java b/platform-common/src/main/java/com/lyms/platform/common/utils/ReflectionUtils.java new file mode 100644 index 0000000..d3d0dab --- /dev/null +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/ReflectionUtils.java @@ -0,0 +1,275 @@ +package com.lyms.platform.common.utils; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; + +/** + * 反射工具类. + * + * 提供访问私有变量,获取泛型类型Class, 提取集合中元素的属性, 转换字符串到对象等Util函数. + * + */ +public class ReflectionUtils { + + private static Logger logger = LoggerFactory + .getLogger(ReflectionUtils.class); + + private static final ConcurrentHashMap, Class> classInstance = new ConcurrentHashMap, Class> (); + + /** + * 调用Getter方法. + */ + public static Object invokeGetterMethod(Object obj, String propertyName) { + String getterMethodName = "get" + StringUtils.capitalize(propertyName); + return invokeMethod(obj, getterMethodName, new Class[] {}, + new Object[] {}); + } + + /** + * 调用Setter方法.使用value的Class来查找Setter方法. + */ + public static void invokeSetterMethod(Object obj, String propertyName, + Object value) { + invokeSetterMethod(obj, propertyName, value, null); + } + + /** + * 调用Setter方法. + * + * @param propertyType + * 用于查找Setter方法,为空时使用value的Class替代. + */ + public static void invokeSetterMethod(Object obj, String propertyName, + Object value, Class propertyType) { + Class type = propertyType != null ? propertyType : value.getClass(); + String setterMethodName = "set" + StringUtils.capitalize(propertyName); + invokeMethod(obj, setterMethodName, new Class[] { type }, + new Object[] { value }); + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue(final Object obj, final String fieldName, + final Object value) { + Field field = getAccessibleField(obj, fieldName); + + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + + fieldName + "] on target [" + obj + "]"); + } + + try { + field.set(obj, value); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常:{}", e.getMessage()); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, + final String fieldName) { + Assert.notNull(obj, "object不能为空"); + Assert.hasText(fieldName, "fieldName"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass + .getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + field.setAccessible(true); + return field; + } catch (NoSuchFieldException e) {// NOSONAR + // Field不在当前类定义,继续向上转型 + } + } + return null; + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. 用于一次性调用的情况. + */ + public static Object invokeMethod(final Object obj, + final String methodName, final Class[] parameterTypes, + final Object[] args) { + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) { + throw new IllegalArgumentException("Could not find method [" + + methodName + "] on target [" + obj + "]"); + } + + try { + return method.invoke(obj, args); + } catch (Exception e) { + throw convertReflectionExceptionToUnchecked(e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. 如向上转型到Object仍无法找到, 返回null. + * + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... + * args) + */ + public static Method getAccessibleMethod(final Object obj, + final String methodName, final Class... parameterTypes) { + Assert.notNull(obj, "object不能为空"); + + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass + .getSuperclass()) { + try { + Method method = superClass.getDeclaredMethod(methodName, + parameterTypes); + + method.setAccessible(true); + + return method; + + } catch (NoSuchMethodException e) {// NOSONAR + // Method不在当前类定义,继续向上转型 + } + } + return null; + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. 如无法找到, 返回Object.class. eg. public UserDao + * extends HibernateDao + * + * @param clazz + * The class to introspect + * @return the first generic declaration, or Object.class if cannot be + * determined + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static Class getSuperClassGenricType(final Class clazz) { + return getSuperClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. 如无法找到, 返回Object.class. + * + * 如public UserDao extends HibernateDao + * + * @param clazz + * clazz The class to introspect + * @param index + * the Index of the generic ddeclaration,start from 0. + * @return the index generic declaration, or Object.class if cannot be + * determined + */ + @SuppressWarnings("rawtypes") + public static Class getSuperClassGenricType(final Class clazz, + final int index) { + + if (classInstance.containsKey(clazz)) { + return classInstance.get(clazz); + } + + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) { + logger.warn(clazz.getSimpleName() + + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) { + logger.warn("Index: " + index + ", Size of " + + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) { + logger.warn(clazz.getSimpleName() + + " not set the actual class on superclass generic parameter"); + return Object.class; + } + Class classGenricType = (Class) params[index]; + classInstance.put(clazz, classGenricType); + return classGenricType; + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked( + Exception e) { + if (e instanceof IllegalAccessException + || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) { + return new IllegalArgumentException("Reflection Exception.", e); + } else if (e instanceof InvocationTargetException) { + return new RuntimeException("Reflection Exception.", + ((InvocationTargetException) e).getTargetException()); + } else if (e instanceof RuntimeException) { + return (RuntimeException) e; + } + return new RuntimeException("Unexpected Checked Exception.", e); + } + + /** + * + * 传入一个对象获取到这个对象需要修改的字段值 + * + * @param object + * @return + */ + public static Map getUpdateField(Object object){ + Field [] fields = object.getClass().getDeclaredFields(); + Map resultMap = new HashMap(); + Object result = null; + String name = null; + for(Field field:fields){ + field.setAccessible(true); + name= field.getName(); + //过滤掉序列化的字段 + if("serialVersionUID".equals(name)){ + continue; + } + try { + result = field.get(object); + } catch (Exception e) { + } + if(null!=result){ + resultMap.put(name, result); + } + } + return resultMap; + } +} \ No newline at end of file diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/ResultUtils.java b/platform-common/src/main/java/com/lyms/platform/common/utils/ResultUtils.java new file mode 100644 index 0000000..31e3091 --- /dev/null +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/ResultUtils.java @@ -0,0 +1,28 @@ +package com.lyms.platform.common.utils; + +import com.lyms.platform.common.result.BaseResponse; + +public final class ResultUtils { + + public static BaseResponse buildBaseResponse(String msg, String errorcode) { + return new BaseResponse(msg, errorcode); + } + + /** + * 设置提示信息和返回码,只要继承baseResponse的对象都可以使用 + * + * @param msg 提示信息 + * + * @param errorcode 错误码 + * + * @param baseResponse 对象 + * + * @return + */ + public static T buildResponse(String msg, + String errorcode, T baseResponse) { + baseResponse.setErrormsg(msg); + baseResponse.setErrorcode(errorcode); + return baseResponse; + } +} \ No newline at end of file diff --git a/platform-dal/pom.xml b/platform-dal/pom.xml new file mode 100644 index 0000000..40c0e8a --- /dev/null +++ b/platform-dal/pom.xml @@ -0,0 +1,33 @@ + + + + com.lyms.core + regional-platform + 1.0.1 + + 4.0.0 + jar + platform-dal + + + + com.lyms.core + platform-common + 1.0.1 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + platform-dal + + \ No newline at end of file diff --git a/platform-dal/src/main/java/com/lyms/platform/dao/BaseDao.java b/platform-dal/src/main/java/com/lyms/platform/dao/BaseDao.java new file mode 100644 index 0000000..c89750b --- /dev/null +++ b/platform-dal/src/main/java/com/lyms/platform/dao/BaseDao.java @@ -0,0 +1,49 @@ +package com.lyms.platform.dao; + +import java.util.List; + +public interface BaseDao { + + /** + * 插入单个实体 + * + * @param entity + */ + int insert(T entity); + + /** + * 删除单条数据 + * + * @param id + */ + int delete(String id); + + /** + * 修改实体 + * + * @param entity + */ + int update(T entity); + + /** + * 查询单条数据 + * + * @param id + * @return + */ + T getById(String id); + + /** + * 查询符合条件的数据 + * + * @return + */ + List getAll(); + + /** + * 查询条数 + * + * @return + */ + int findPageCount(T entity); +} \ No newline at end of file diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/Patients.java b/platform-dal/src/main/java/com/lyms/platform/pojo/Patients.java new file mode 100644 index 0000000..e3dd126 --- /dev/null +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/Patients.java @@ -0,0 +1,229 @@ +package com.lyms.platform.pojo; + +import java.util.Date; + +import com.lyms.platform.common.utils.DateUtil; + +public class Patients { + private String id; + + private String username; + + private Integer crisis; + + private String avatar; + + private Date dueDate; + + private Date lastMenses; + + @SuppressWarnings("unused") + private Integer age; + + private String phone; + + private String foreignId; + + private String publishId; + + private String publishName; + + private Integer yn; + + private Date modified; + + private Date created; + + private Integer gender; + + private Date birth; + + private Integer type; + + private String foreignSubId; + + private String triageOrderNo; + + private Date nextCheckTime; + + private Integer patientLevel; + + public Integer getPatientLevel() { + return patientLevel; + } + + public void setPatientLevel(Integer patientLevel) { + this.patientLevel = patientLevel; + } + + public Date getNextCheckTime() { + return nextCheckTime; + } + + public void setNextCheckTime(Date nextCheckTime) { + this.nextCheckTime = nextCheckTime; + } + + public String getForeignSubId() { + return foreignSubId; + } + + public void setForeignSubId(String foreignSubId) { + this.foreignSubId = foreignSubId; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getTriageOrderNo() { + return triageOrderNo; + } + + public void setTriageOrderNo(String triageOrderNo) { + this.triageOrderNo = triageOrderNo; + } + + public Integer getGender() { + return gender; + } + + public void setGender(Integer gender) { + this.gender = gender; + } + + public Date getBirth() { + return birth; + } + + public void setBirth(Date birth) { + this.birth = birth; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + + } + + public Integer getCrisis() { + return crisis; + } + + public void setCrisis(Integer crisis) { + this.crisis = crisis; + + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + + } + + public Date getDueDate() { + return dueDate; + } + + public void setDueDate(Date dueDate) { + this.dueDate = dueDate; + + } + + public Date getLastMenses() { + return lastMenses; + } + + public void setLastMenses(Date lastMenses) { + this.lastMenses = lastMenses; + + } + + public Integer getAge() { + return DateUtil.getAge(birth); + } + + public void setAge(Integer age) { + this.age = age; + + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + + } + + public String getForeignId() { + return foreignId; + } + + public void setForeignId(String foreignId) { + this.foreignId = foreignId; + + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPublishId() { + return publishId; + } + + public void setPublishId(String publishId) { + this.publishId = publishId; + } + + public String getPublishName() { + return publishName; + } + + public void setPublishName(String publishName) { + this.publishName = publishName; + + } + + public Integer getYn() { + return yn; + } + + public void setYn(Integer yn) { + this.yn = yn; + + } + + public Date getModified() { + return modified; + } + + public void setModified(Date modified) { + this.modified = modified; + + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } +} \ No newline at end of file diff --git a/platform-data-api/pom.xml b/platform-data-api/pom.xml new file mode 100644 index 0000000..6b205a5 --- /dev/null +++ b/platform-data-api/pom.xml @@ -0,0 +1,103 @@ + + + + com.lyms.core + regional-platform + 1.0.1 + + 4.0.0 + war + platform-data-api + + + + + com.lyms.core + platform-common + ${project.version} + + + com.lyms.core + platform-biz-patient + ${project.version} + + + com.lyms.core + platform-biz + ${project.version} + + + + + + ../platform-resource/resources + + + **/* + + + true + + + src/main/resources + + **/* + + + + + + + src/main/resources + + database.properties + + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + platform-data-api + + + + dev + + + + true + + + + ../platform-resource/resources/config-dev.properties + + + + + test + + + ../platform-resource/resources/config-test.properties + + + + + prod + + + ../platform-resource/resources/config-product.properties + + + + + \ No newline at end of file diff --git a/platform-data-api/src/main/java/com/lyms/platform/data/web/result/EmergenceResult.java b/platform-data-api/src/main/java/com/lyms/platform/data/web/result/EmergenceResult.java new file mode 100644 index 0000000..0a44b85 --- /dev/null +++ b/platform-data-api/src/main/java/com/lyms/platform/data/web/result/EmergenceResult.java @@ -0,0 +1,59 @@ +package com.lyms.platform.data.web.result; + +import java.io.Serializable; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +@XmlRootElement(name = "emergenceResult") +@XmlAccessorType(XmlAccessType.FIELD) +public class EmergenceResult implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + + @XmlElement(name = "errorcode", required = true) + private String errorcode; + + @XmlElement(name = "errormsg", required = true) + private String errormsg; + + @XmlElement(name = "data", required = true) + private List data; + + public String getErrorcode() { + return errorcode; + } + + public void setErrorcode(String errorcode) { + this.errorcode = errorcode; + } + + public String getErrormsg() { + return errormsg; + } + + public void setErrormsg(String errormsg) { + this.errormsg = errormsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } +} \ No newline at end of file diff --git a/platform-data-api/src/main/java/com/lyms/platform/data/web/result/Emergences.java b/platform-data-api/src/main/java/com/lyms/platform/data/web/result/Emergences.java new file mode 100644 index 0000000..b616fe6 --- /dev/null +++ b/platform-data-api/src/main/java/com/lyms/platform/data/web/result/Emergences.java @@ -0,0 +1,44 @@ +package com.lyms.platform.data.web.result; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class Emergences { + + @XmlElement(name = "content", required = true) + private String content; + @XmlElement(name = "docName", required = true) + private String docName; + @XmlElement(name = "risk", required = true) + private String risk; + + public String getContent() { + return content; + } + public void setContent(String content) { + this.content = content; + } + public String getDocName() { + return docName; + } + public void setDocName(String docName) { + this.docName = docName; + } + public String getRisk() { + return risk; + } + public void setRisk(String risk) { + this.risk = risk; + } + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this,ToStringStyle.SHORT_PREFIX_STYLE); + } +} \ No newline at end of file diff --git a/platform-data-api/src/main/java/com/lyms/platform/data/web/ws/EmergenceServiceWsImpl.java b/platform-data-api/src/main/java/com/lyms/platform/data/web/ws/EmergenceServiceWsImpl.java new file mode 100644 index 0000000..109651d --- /dev/null +++ b/platform-data-api/src/main/java/com/lyms/platform/data/web/ws/EmergenceServiceWsImpl.java @@ -0,0 +1,30 @@ +package com.lyms.platform.data.web.ws; + +import java.util.ArrayList; +import java.util.List; + +import javax.jws.WebService; + +import com.lyms.platform.data.web.result.EmergenceResult; +import com.lyms.platform.data.web.result.Emergences; +import com.lyms.platform.data.web.ws.intf.IEmergenceServiceWs; + +@WebService(endpointInterface = "com.lyms.platform.data.web.ws.intf.IEmergenceServiceWs") +public class EmergenceServiceWsImpl implements IEmergenceServiceWs { + + @Override + public EmergenceResult queryEmergences(Integer page) { + System.out.println("request page:" + page); + EmergenceResult emergenceResult = new EmergenceResult(); + emergenceResult.setErrorcode("0000000"); + emergenceResult.setErrormsg("成功"); + List list = new ArrayList(); + Emergences emergences = new Emergences(); + emergences.setContent("测试医生"); + emergences.setDocName("xiaoqi"); + emergences.setRisk("蛋白低"); + list.add(emergences); + emergenceResult.setData(list); + return emergenceResult; + } +} \ No newline at end of file diff --git a/platform-data-api/src/main/java/com/lyms/platform/data/web/ws/intf/IEmergenceServiceWs.java b/platform-data-api/src/main/java/com/lyms/platform/data/web/ws/intf/IEmergenceServiceWs.java new file mode 100644 index 0000000..625bd45 --- /dev/null +++ b/platform-data-api/src/main/java/com/lyms/platform/data/web/ws/intf/IEmergenceServiceWs.java @@ -0,0 +1,13 @@ +package com.lyms.platform.data.web.ws.intf; + +import javax.jws.WebParam; +import javax.jws.WebService; + +import com.lyms.platform.common.constants.WsConstants; +import com.lyms.platform.data.web.result.EmergenceResult; + +@WebService(targetNamespace=WsConstants.NS) +public interface IEmergenceServiceWs { + + EmergenceResult queryEmergences(@WebParam Integer page); +} diff --git a/platform-data-api/src/main/resources/database.properties b/platform-data-api/src/main/resources/database.properties new file mode 100644 index 0000000..7a17118 --- /dev/null +++ b/platform-data-api/src/main/resources/database.properties @@ -0,0 +1,11 @@ +mysql.db.username=${mysql.db.name} +mysql.db.password=${mysql.db.password} +mysql.db.jdbcurl=${mysql.jdbcurl} + +mysql.maxpoolsize=5 +mysql.initialpoolsize=2 +mysql.minpoolsize=2 +mysql.maxIdle=3 +mysql.maxwait=300 +mysql.maxactive=300 +mysql.validationquery=SELECT 1 FROM DUAL \ No newline at end of file diff --git a/platform-data-api/src/main/resources/log4j_config.xml b/platform-data-api/src/main/resources/log4j_config.xml new file mode 100644 index 0000000..a1548ea --- /dev/null +++ b/platform-data-api/src/main/resources/log4j_config.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform-data-api/src/main/resources/spring/applicationContext-cxf.xml b/platform-data-api/src/main/resources/spring/applicationContext-cxf.xml new file mode 100644 index 0000000..8413bed --- /dev/null +++ b/platform-data-api/src/main/resources/spring/applicationContext-cxf.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/platform-data-api/src/main/resources/spring/applicationContext.xml b/platform-data-api/src/main/resources/spring/applicationContext.xml new file mode 100644 index 0000000..b59f255 --- /dev/null +++ b/platform-data-api/src/main/resources/spring/applicationContext.xml @@ -0,0 +1,71 @@ + + + + + + + + + classpath:database.properties + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform-data-api/src/main/webapp/WEB-INF/web.xml b/platform-data-api/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..7721564 --- /dev/null +++ b/platform-data-api/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,54 @@ + + + + cxf + + contextConfigLocation + + classpath*:/spring/applicationContext.xml + + + + webAppRootKey + webapp.platform-data-api + + + Apache CXF Endpoint + cxf + cxf + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + cxf + /services/* + + + 60 + + + log4jConfigLocation + classpath:log4j_config.xml + + + log4jRefreshInterval + 60000 + + + org.springframework.web.context.ContextLoaderListener + + + org.springframework.web.util.Log4jConfigListener + + \ No newline at end of file diff --git a/platform-operate-api/pom.xml b/platform-operate-api/pom.xml new file mode 100644 index 0000000..b19d18b --- /dev/null +++ b/platform-operate-api/pom.xml @@ -0,0 +1,76 @@ + + + + com.lyms.core + regional-platform + 1.0.1 + + 4.0.0 + war + platform-operate-api + + + + + com.lyms.core + platform-common + ${project.version} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + platform-operate-api + + + \ No newline at end of file diff --git a/platform-operate-api/src/main/resources/log4j_config.xml b/platform-operate-api/src/main/resources/log4j_config.xml new file mode 100644 index 0000000..a1548ea --- /dev/null +++ b/platform-operate-api/src/main/resources/log4j_config.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform-operate-api/src/main/resources/spring/applicationContext-mvc.xml b/platform-operate-api/src/main/resources/spring/applicationContext-mvc.xml new file mode 100644 index 0000000..96b657c --- /dev/null +++ b/platform-operate-api/src/main/resources/spring/applicationContext-mvc.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform-operate-api/src/main/resources/spring/applicationContext.xml b/platform-operate-api/src/main/resources/spring/applicationContext.xml new file mode 100644 index 0000000..1dc27d6 --- /dev/null +++ b/platform-operate-api/src/main/resources/spring/applicationContext.xml @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/platform-operate-api/src/main/webapp/WEB-INF/cxf-servlet.xml b/platform-operate-api/src/main/webapp/WEB-INF/cxf-servlet.xml new file mode 100644 index 0000000..cc10158 --- /dev/null +++ b/platform-operate-api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/platform-operate-api/src/main/webapp/WEB-INF/web.xml b/platform-operate-api/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..2c6f850 --- /dev/null +++ b/platform-operate-api/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,56 @@ + + + + cxf + + contextConfigLocation + + classpath*:/applicationContext.xml + + + + Apache CXF Endpoint + cxf + cxf + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + cxf + /services/* + + + 60 + + + log4jConfigLocation + classpath:log4j_config.xml + + + log4jRefreshInterval + 60000 + + + org.springframework.web.context.ContextLoaderListener + + + org.springframework.web.util.Log4jConfigListener + + diff --git a/platform-operate-api/src/main/webapp/crossdomain.xml b/platform-operate-api/src/main/webapp/crossdomain.xml new file mode 100644 index 0000000..141465a --- /dev/null +++ b/platform-operate-api/src/main/webapp/crossdomain.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/platform-report-api/pom.xml b/platform-report-api/pom.xml new file mode 100644 index 0000000..9f5e98b --- /dev/null +++ b/platform-report-api/pom.xml @@ -0,0 +1,76 @@ + + + + com.lyms.core + regional-platform + 1.0.1 + + 4.0.0 + war + platform-report-api + + + + + com.lyms.core + platform-common + ${project.version} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + platform-report-api + + + \ No newline at end of file diff --git a/platform-report-api/src/main/resources/log4j_config.xml b/platform-report-api/src/main/resources/log4j_config.xml new file mode 100644 index 0000000..a1548ea --- /dev/null +++ b/platform-report-api/src/main/resources/log4j_config.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform-report-api/src/main/resources/spring/applicationContext.xml b/platform-report-api/src/main/resources/spring/applicationContext.xml new file mode 100644 index 0000000..1dc27d6 --- /dev/null +++ b/platform-report-api/src/main/resources/spring/applicationContext.xml @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/platform-report-api/src/main/webapp/WEB-INF/cxf-servlet.xml b/platform-report-api/src/main/webapp/WEB-INF/cxf-servlet.xml new file mode 100644 index 0000000..cc10158 --- /dev/null +++ b/platform-report-api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/platform-report-api/src/main/webapp/WEB-INF/web.xml b/platform-report-api/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..2c6f850 --- /dev/null +++ b/platform-report-api/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,56 @@ + + + + cxf + + contextConfigLocation + + classpath*:/applicationContext.xml + + + + Apache CXF Endpoint + cxf + cxf + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + cxf + /services/* + + + 60 + + + log4jConfigLocation + classpath:log4j_config.xml + + + log4jRefreshInterval + 60000 + + + org.springframework.web.context.ContextLoaderListener + + + org.springframework.web.util.Log4jConfigListener + + diff --git a/platform-report-api/src/main/webapp/crossdomain.xml b/platform-report-api/src/main/webapp/crossdomain.xml new file mode 100644 index 0000000..141465a --- /dev/null +++ b/platform-report-api/src/main/webapp/crossdomain.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/platform-resource/resources/config-dev.properties b/platform-resource/resources/config-dev.properties new file mode 100644 index 0000000..b3231d6 --- /dev/null +++ b/platform-resource/resources/config-dev.properties @@ -0,0 +1,10 @@ +mongo.db.host=localhost +mongo.db.port=27017 +mongo.db.dbname=dev_mongo + + +mysql.db.name=dev +mysql.db.password=dev +mysql.driver=com.mysql.jdbc.Driver +mysql.jdbcurl=jdbc:mysql://192.168.5.250:3306/mommybaby?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 + diff --git a/platform-resource/resources/config-product.properties b/platform-resource/resources/config-product.properties new file mode 100644 index 0000000..1a33451 --- /dev/null +++ b/platform-resource/resources/config-product.properties @@ -0,0 +1,13 @@ +mongo.db.host=localhost +mongo.db.port=27017 +mongo.db.dbname=dev_mongo + + +mysql.db.name=prod +mysql.db.password=prod +mysql.driver=com.mysql.jdbc.Driver +mysql.jdbcurl=jdbc:mysql://192.168.5.250:3306/mommybaby?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 + +mysql.maxpoolsize=5 +mysql.initialpoolsize=2 +mysql.minpoolsize=2 \ No newline at end of file diff --git a/platform-resource/resources/config-test.properties b/platform-resource/resources/config-test.properties new file mode 100644 index 0000000..ce1c789 --- /dev/null +++ b/platform-resource/resources/config-test.properties @@ -0,0 +1,13 @@ +mongo.db.host=localhost +mongo.db.port=27017 +mongo.db.dbname=dev_mongo + + +mysql.db.name=test +mysql.db.password=test +mysql.driver=com.mysql.jdbc.Driver +mysql.jdbcurl=jdbc:mysql://192.168.5.250:3306/mommybaby?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 + +mysql.maxpoolsize=5 +mysql.initialpoolsize=2 +mysql.minpoolsize=2 \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ddb3659 --- /dev/null +++ b/pom.xml @@ -0,0 +1,462 @@ + + 4.0.0 + com.lyms.core + regional-platform + pom + 1.0.1 + regional-platform + http://maven.apache.org + + + regional-platform + + + + + platform-common + platform-dal + platform-biz-service + platform-biz-patient-service + + platform-data-api + platform-operate-api + platform-report-api + + + + UTF-8 + 3.2.4.RELEASE + 1.5.6.RELEASE + 1.0.0 + + + + + com.alibaba + dubbo + 2.5.3 + + + org.springframework + spring + + + + + + org.apache.zookeeper + zookeeper + 3.4.5 + + + + com.101tec + zkclient + 0.3 + + + com.alibaba + druid + 1.0.15 + + + org.apache.cxf + cxf-rt-frontend-jaxws + 3.1.5 + + + org.apache.cxf + cxf-rt-transports-http + 3.1.5 + + + org.apache.cxf + cxf-rt-transports-http-jetty + 3.1.5 + + + org.apache.cxf + cxf-rt-ws-security + 3.1.5 + + + + org.springframework.data + spring-data-mongodb + ${org.spring.data-mongodb} + + + org.springframework + spring-aop + ${org.springframework.version} + + + org.springframework + spring-aspects + ${org.springframework.version} + + + org.springframework + spring-beans + ${org.springframework.version} + + + org.springframework + spring-context + ${org.springframework.version} + + + org.springframework + spring-context-support + ${org.springframework.version} + + + org.springframework + spring-core + ${org.springframework.version} + + + org.springframework + spring-expression + ${org.springframework.version} + + + org.springframework + spring-instrument + ${org.springframework.version} + + + org.springframework + spring-instrument-tomcat + ${org.springframework.version} + + + org.springframework + spring-jdbc + ${org.springframework.version} + + + org.springframework + spring-jms + ${org.springframework.version} + + + org.springframework + spring-orm + ${org.springframework.version} + + + org.springframework + spring-oxm + ${org.springframework.version} + + + + org.springframework + spring-test + ${org.springframework.version} + test + + + org.springframework + spring-tx + ${org.springframework.version} + + + org.springframework + spring-web + ${org.springframework.version} + + + org.springframework + spring-webmvc + ${org.springframework.version} + + + org.springframework + spring-webmvc-portlet + ${org.springframework.version} + + + + + org.mybatis + mybatis + 3.3.0 + + + org.mybatis + mybatis-spring + 1.2.3 + + + + + + mysql + mysql-connector-java + 5.1.34 + + + + + org.postgresql + postgresql + 9.4-1202-jdbc42 + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + commons-logging + commons-logging-api + 1.1 + + + org.slf4j + slf4j-api + 1.6.4 + + + org.slf4j + slf4j-log4j12 + 1.6.4 + + + log4j + log4j + 1.2.16 + + + dom4j + dom4j + 1.6.1 + + + commons-fileupload + commons-fileupload + 1.2.2 + + + commons-io + commons-io + 2.0 + + + commons-beanutils + commons-beanutils + 1.8.3 + + + commons-dbcp + commons-dbcp + 1.4 + + + commons-pool + commons-pool + 1.4 + + + commons-codec + commons-codec + 1.5 + + + commons-discovery + commons-discovery + 0.2 + + + + com.mchange + c3p0 + 0.9.2-pre5 + + + org.apache.velocity + velocity + 1.7 + + + org.apache.velocity + velocity-tools + 2.0 + + + org.codehaus.jackson + jackson-core-asl + 1.9.7 + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.7 + + + + net.sf.json-lib + json-lib + jdk15 + 2.4 + + + commons-collections + commons-collections + 3.2.1 + + + commons-lang + commons-lang + 2.6 + + + net.sf.ezmorph + ezmorph + 1.0.5 + + + joda-time + joda-time + 2.0 + + + com.belerweb + pinyin4j + 2.5.0 + + + + org.apache.shiro + shiro-all + 1.2.1 + + + + net.sf.ehcache + ehcache + 2.7.0 + + + com.googlecode.ehcache-spring-annotations + ehcache-spring-annotations + 1.2.0 + + + + org.bouncycastle + bcprov-jdk15on + 1.47 + + + com.thoughtworks.xstream + xstream + 1.3.1 + + + javax.mail + mail + 1.4.3 + + + javax.xml + jaxrpc + 1.1 + + + commons-httpclient + commons-httpclient + 3.1 + + + org.quartz-scheduler + quartz + 1.8.4 + + + org.aspectj + aspectjrt + 1.8.5 + + + org.aspectj + aspectjweaver + 1.8.5 + + + + javax.validation + validation-api + 1.1.0.Final + + + org.hibernate + hibernate-validator + 5.1.3.Final + + + + + wsdl4j + wsdl4j + 1.6.3 + + + + org.igniterealtime.smack + smack-core + 4.1.3 + + + org.igniterealtime.smack + smack-debug + 4.1.3 + + + org.igniterealtime.smack + smack-tcp + 4.1.3 + + + org.igniterealtime.smack + smack-java7 + 4.1.3 + + + org.igniterealtime.smack + smack-resolver-javax + 4.1.3 + + + org.igniterealtime.smack + smack-resolver-dnsjava + 4.1.3 + + + + org.igniterealtime.smack + smack-extensions + 4.1.3 + + + com.qiniu + qiniu-java-sdk + [7.0.0, 7.0.99] + + + redis.clients + jedis + 2.1.0 + + + com.google.guava + guava + 19.0-rc2 + + + -- 1.8.3.1