Browse Source

Merge branch '2.0' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into 2.0

wangzhinan 2 years ago
parent
commit
35d49f9840
100 changed files with 3599 additions and 331 deletions
  1. 2 2
      business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java
  2. 1 1
      business/base-service/src/main/java/com/yihu/jw/doctor/service/BaseDoctorInfoService.java
  3. 1 1
      business/base-service/src/main/java/com/yihu/jw/doctor/service/BaseDoctorService.java
  4. 2 2
      business/base-service/src/main/java/com/yihu/jw/healthUpload/service/BaseDoctorHealthUploadService.java
  5. 1 1
      business/base-service/src/main/java/com/yihu/jw/hospital/family/service/WlyyFamilyMemberService.java
  6. 1 1
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java
  7. 1 1
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/TasyNatService.java
  8. 2 2
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/TnPrescriptionService.java
  9. 3 3
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/YkyyPrescriptionService.java
  10. 2 2
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/DoctorPreSignService.java
  11. 4 4
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java
  12. 1 1
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/HcyyEntranceService.java
  13. 3 3
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/TnyyEntranceService.java
  14. 1 1
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/XzzxEntranceService.java
  15. 3 3
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/YkyyEntranceService.java
  16. 1 1
      business/base-service/src/main/java/com/yihu/jw/hospital/ykyy/service/YkyyService.java
  17. 1 1
      business/base-service/src/main/java/com/yihu/jw/oauth/OauthSsoService.java
  18. 2 2
      business/base-service/src/main/java/com/yihu/jw/order/BusinessOrderService.java
  19. 1 1
      business/base-service/src/main/java/com/yihu/jw/patient/service/BasePatientService.java
  20. 1 1
      business/base-service/src/main/java/com/yihu/jw/rehabilitation/service/DoctorPatientRelationService.java
  21. 2 2
      business/base-service/src/main/java/com/yihu/jw/utils/YkyySMSService.java
  22. 1 1
      business/base-service/src/main/java/com/yihu/jw/wechat/service/WxAccessTokenService.java
  23. 1 1
      business/base-service/src/main/java/com/yihu/jw/wlyy/service/WlyyBusinessService.java
  24. 3 3
      business/sms-service/src/main/java/com/yihu/jw/sms/service/BaseSmsGatewayService.java
  25. 101 0
      common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqChannel.java
  26. 81 0
      common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqMessageLog.java
  27. 61 0
      common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqPublisher.java
  28. 61 0
      common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqSubscriber.java
  29. 107 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisCacheAuthorization.java
  30. 91 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisCacheCategory.java
  31. 127 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisCacheKeyRule.java
  32. 136 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisMqChannel.java
  33. 107 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisMqPublisher.java
  34. 107 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisMqSubscriber.java
  35. 140 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/standard/MStdDatasetRelation.java
  36. 29 2
      common/common-util/pom.xml
  37. 14 0
      common/common-util/src/main/java/com/yihu/jw/util/common/RSAUtils.java
  38. 109 49
      common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java
  39. 3 2
      common/common-util/src/main/java/com/yihu/jw/util/encrypt/AES.java
  40. 14 0
      common/common-util/src/main/java/com/yihu/jw/util/encrypt/MD5.java
  41. 15 0
      common/common-util/src/main/java/com/yihu/jw/util/id/UuidUtil.java
  42. 41 0
      common/common-util/src/main/java/com/yihu/jw/util/network/HttpResponse.java
  43. 497 0
      common/common-util/src/main/java/com/yihu/jw/util/network/HttpUtils.java
  44. 56 0
      common/common-util/src/main/java/com/yihu/jw/util/network/IPInfoUtils.java
  45. 96 113
      common/common-util/src/main/java/com/yihu/jw/util/sql/BeanTransformer.java
  46. 88 29
      common/common-util/src/main/java/com/yihu/jw/util/sql/SqlCreator.java
  47. 10 0
      common/commons-ehr-constants/src/main/java/com/yihu/ehr/constants/ServiceApi.java
  48. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  49. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java
  50. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/client/WlyyJdbcClientRedirectUriService.java
  51. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyAuthorizationEndpoint.java
  52. 4 4
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  53. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyYkyyEndpoint.java
  54. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/HcyyService.java
  55. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthSsoService.java
  56. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthWjwConfigService.java
  57. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthWlyyConfigService.java
  58. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthYlzConfigService.java
  59. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/RegisterService.java
  60. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/UserService.java
  61. 3 3
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/YkyyService.java
  62. 1 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/utils/AesUtilsByDigitalCloudSign.java
  63. 3 3
      starter/mysql-starter/src/main/java/com/yihu/jw/mysql/query/BaseJpaService.java
  64. 1 1
      starter/mysql-starter/src/main/java/com/yihu/jw/mysql/query/URLQueryParser.java
  65. 3 3
      svr/svr-base/src/main/java/com/yihu/jw/base/activemq/ConsumerRunner.java
  66. 2 2
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/patient/BasePatientEndpoint.java
  67. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEntryEndpoint.java
  68. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/BaseDoctorService.java
  69. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java
  70. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/system/SystemDictService.java
  71. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/user/UserService.java
  72. 3 3
      svr/svr-base/src/main/java/com/yihu/jw/base/service/util/YkyyBaseService.java
  73. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WxAccessTokenService.java
  74. 22 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/config/Config.java
  75. 1 1
      svr/svr-basic/src/main/java/com/yihu/jw/basic/patient/controller/PatientEndPoint.java
  76. 4 10
      svr/svr-basic/src/main/java/com/yihu/jw/basic/patient/service/ArchiveRelationService.java
  77. 1 1
      svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/controller/PortalFeedbackEndPoint.java
  78. 2 12
      svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/controller/PortalSurveyQuestionAdminController.java
  79. 1 28
      svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/controller/PortalSurveyTemplateAdminController.java
  80. 2 2
      svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/service/PortalMessageRemindService.java
  81. 1 1
      svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/controller/TjQuotaEndPoint.java
  82. 1 1
      svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/service/TjQuotaLogService.java
  83. 1 1
      svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/service/TjQuotaService.java
  84. 215 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqChannelEndPoint.java
  85. 43 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqOperationEndPoint.java
  86. 158 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqPublisherEndPoint.java
  87. 215 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqSubscriberEndPoint.java
  88. 24 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqChannelDao.java
  89. 25 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqMessageLogDao.java
  90. 25 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqPublisherDao.java
  91. 28 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqSubscriberDao.java
  92. 46 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/CustomMessageListenerAdapter.java
  93. 129 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/DefaultMessageDelegate.java
  94. 46 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/MessageCommonBiz.java
  95. 13 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/MessageDelegate.java
  96. 182 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/PubSubMessageJob.java
  97. 145 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqChannelService.java
  98. 43 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqMessageLogService.java
  99. 56 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqPublisherService.java
  100. 0 0
      svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqSubscriberService.java

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java

@ -248,12 +248,12 @@ public class DailyReportUploadService {
            if (StringUtils.isNotBlank(mobile)) {
                baseDoctorDO.setSalt(PwdUtil.randomString(5));
                try {
                    baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex(baseDoctorDO.getMobile().substring(baseDoctorDO.getMobile().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                    baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex(baseDoctorDO.getMobile().substring(baseDoctorDO.getMobile().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
                baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
            }
            // 用医生和机构id、部门判断数据是否存在,若不存在则保存医生机构关联关系
            String deptCode = dept;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/doctor/service/BaseDoctorInfoService.java

@ -18,7 +18,7 @@ import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.collections.map.HashedMap;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/doctor/service/BaseDoctorService.java

@ -13,7 +13,7 @@
//import com.yihu.jw.util.date.DateUtil;
//import com.yihu.jw.utils.hibernate.HibenateUtils;
//import com.yihu.mysql.query.BaseJpaService;
//import com.yihu.utils.security.MD5;
//import com.yihu.jw.util.encrypt.MD5;
//import net.sf.json.JSONArray;
//import net.sf.json.JSONObject;
//import org.apache.commons.collections.map.HashedMap;

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/healthUpload/service/BaseDoctorHealthUploadService.java

@ -396,12 +396,12 @@ public class BaseDoctorHealthUploadService extends BaseJpaService<BaseDoctorHeal
            if (StringUtils.isNotBlank(mobile)) {
                baseDoctorDO.setSalt(PwdUtil.randomString(5));
                try {
                    baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex(baseDoctorDO.getMobile().substring(baseDoctorDO.getMobile().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                    baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex(baseDoctorDO.getMobile().substring(baseDoctorDO.getMobile().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
                baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
            }
            // 用医生和机构id、部门判断数据是否存在,若不存在则保存医生机构关联关系
            String deptCode = dept;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/family/service/WlyyFamilyMemberService.java

@ -28,7 +28,7 @@ import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import net.sf.json.JSONArray;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -113,7 +113,7 @@ import com.yihu.jw.wechat.service.WxAccessTokenService;
import com.yihu.jw.yx.dao.YxTokenMappingDao;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import com.ylzinfo.ehc.EhcHandler;
import com.ylzinfo.ehc.common.utils.DateUtils;
import com.ylzinfo.ehc.trans.TransRequest;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/TasyNatService.java

@ -20,7 +20,7 @@ import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.utils.WebserviceUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import net.sf.json.xml.XMLSerializer;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/TnPrescriptionService.java

@ -38,8 +38,8 @@ import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.jw.wechat.dao.WechatDao;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 3 - 3
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/YkyyPrescriptionService.java

@ -59,9 +59,9 @@ import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.jw.wechat.dao.WechatDao;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/DoctorPreSignService.java

@ -8,8 +8,8 @@ import com.yihu.jw.hospital.prescription.dao.OauthDzqmConfigDao;
import com.yihu.jw.hospital.prescription.service.entrance.util.WebserviceUtil;
import com.yihu.jw.utils.dzqm.SignPictureService;
import com.yihu.jw.utils.dzqm.SignPictureServiceImplServiceLocator;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

+ 4 - 4
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java

@ -2438,12 +2438,12 @@ public class EntranceService {
                                    if (StringUtils.isNotBlank(idCard)) {
                                        baseDoctorDO.setSalt(PwdUtil.randomString(5));
                                        try {
                                            baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex(baseDoctorDO.getIdcard().substring(baseDoctorDO.getIdcard().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                                            baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex(baseDoctorDO.getIdcard().substring(baseDoctorDO.getIdcard().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                                        } catch (Exception e) {
                                            logger.error(e.getMessage() + "docotr=" + doctorCode + ";idcard=" + baseDoctorDO.getIdcard());
                                        }
                                    } else {
                                        baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
                                        baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
                                    }
                                    //拼音码
                                    baseDoctorDO.setSpell(null == jsonObjectBody.get("PinYin_Code") ? "" : jsonObjectBody.get("PinYin_Code").toString());
@ -3599,12 +3599,12 @@ public class EntranceService {
                                    if (StringUtils.isNotBlank(idCard)) {
                                        baseDoctorDO.setSalt(PwdUtil.randomString(5));
                                        try {
                                            baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex(baseDoctorDO.getIdcard().substring(baseDoctorDO.getIdcard().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                                            baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex(baseDoctorDO.getIdcard().substring(baseDoctorDO.getIdcard().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                                        } catch (Exception e) {
                                            logger.error(e.getMessage() + "docotr=" + doctorCode + ";idcard=" + baseDoctorDO.getIdcard());
                                        }
                                    } else {
                                        baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
                                        baseDoctorDO.setPassword(com.yihu.jw.util.encrypt.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
                                    }
                                    baseDoctorDO.setName(doctorName);
                                    baseDoctorDO.setIsFamous(0);

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/HcyyEntranceService.java

@ -44,7 +44,7 @@ import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.WebserviceUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import net.sf.json.xml.XMLSerializer;
import nu.xom.*;
import org.apache.commons.collections.map.HashedMap;

+ 3 - 3
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/TnyyEntranceService.java

@ -25,9 +25,9 @@ import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/XzzxEntranceService.java

@ -50,7 +50,7 @@ import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.WebserviceUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import net.sf.json.xml.XMLSerializer;
import netscape.javascript.JSObject;
import nu.xom.*;

+ 3 - 3
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/YkyyEntranceService.java

@ -42,9 +42,9 @@ import com.yihu.jw.utils.EntityUtils;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.YkyySMSService;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.encrypt.MD5;
import jxl.write.DateTime;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/ykyy/service/YkyyService.java

@ -13,7 +13,7 @@ import com.yihu.jw.util.common.StringUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import com.ylzinfo.ehc.common.utils.DateUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/oauth/OauthSsoService.java

@ -9,7 +9,7 @@ import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.RSAEncrypt;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/order/BusinessOrderService.java

@ -54,8 +54,8 @@ import com.yihu.jw.wechat.dao.WechatDao;
import com.yihu.jw.wechat.dao.WxPayLogDao;
import com.yihu.jw.wechat.enterprise.EnterpriseService;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/patient/service/BasePatientService.java

@ -28,7 +28,7 @@ import com.yihu.jw.sms.dao.HospitalSysDictDao;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/rehabilitation/service/DoctorPatientRelationService.java

@ -15,7 +15,7 @@ import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.CrudRepository;

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/utils/YkyySMSService.java

@ -21,8 +21,8 @@ import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.wechat.dao.WxPushLogDao;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/wechat/service/WxAccessTokenService.java

@ -7,7 +7,7 @@ import com.yihu.jw.hospital.prescription.service.entrance.TnyyEntranceService;
import com.yihu.jw.rm.base.WechatRequestMapping;
import com.yihu.jw.wechat.dao.*;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.network.HttpUtils;
import com.yihu.jw.util.network.HttpUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/wlyy/service/WlyyBusinessService.java

@ -30,7 +30,7 @@ import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.wlyy.wlyyhttp.WlyyHttpService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 3 - 3
business/sms-service/src/main/java/com/yihu/jw/sms/service/BaseSmsGatewayService.java

@ -9,9 +9,9 @@ import com.yihu.jw.sms.dao.BaseSmsDao;
import com.yihu.jw.sms.dao.BaseSmsGatewayDao;
import com.yihu.jw.sms.dao.BaseSmsTemplateDao;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.network.IPInfoUtils;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.network.IPInfoUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

+ 101 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqChannel.java

@ -0,0 +1,101 @@
package com.yihu.jw.entity.ehr.redis;
import com.yihu.jw.entity.BaseIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * redis消息队列 Entity
 *
 * @author 张进军
 * @date 2017/11/10 11:14
 */
@Entity
@Table(name = "redis_mq_channel")
public class RedisMqChannel extends BaseIdentityEntity {
    public String channel; // 消息队列编码
    public String channelName; // 消息队列名称
    public String messageTemplate; // 消息模版
    public String remark; // 备注
    public Integer enqueuedNum; // 入列数
    public Integer dequeuedNum; // 出列数
    public Integer subscriberNum; // 订阅者数
    public Integer publisherNum; // 发布者数
    @Column(name = "channel")
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    @Column(name = "channel_name")
    public String getChannelName() {
        return channelName;
    }
    public void setChannelName(String channelName) {
        this.channelName = channelName;
    }
    @Column(name = "message_template")
    public String getMessageTemplate() {
        return messageTemplate;
    }
    public void setMessageTemplate(String messageTemplate) {
        this.messageTemplate = messageTemplate;
    }
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Column(name = "enqueued_num")
    public Integer getEnqueuedNum() {
        return enqueuedNum;
    }
    public void setEnqueuedNum(Integer enqueuedNum) {
        this.enqueuedNum = enqueuedNum;
    }
    @Column(name = "dequeued_num")
    public Integer getDequeuedNum() {
        return dequeuedNum;
    }
    public void setDequeuedNum(Integer dequeuedNum) {
        this.dequeuedNum = dequeuedNum;
    }
    @Column(name = "subscriber_num")
    public Integer getSubscriberNum() {
        return subscriberNum;
    }
    public void setSubscriberNum(Integer subscriberNum) {
        this.subscriberNum = subscriberNum;
    }
    @Column(name = "publisher_num")
    public Integer getPublisherNum() {
        return publisherNum;
    }
    public void setPublisherNum(Integer publisherNum) {
        this.publisherNum = publisherNum;
    }
}

+ 81 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqMessageLog.java

@ -0,0 +1,81 @@
package com.yihu.jw.entity.ehr.redis;
import com.yihu.jw.entity.BaseAssignedEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 消费失败的消息记录 Entity
 *
 * @author 张进军
 * @date 2017/11/10 11:14
 */
@Entity
@Table(name = "redis_mq_message_log")
public class RedisMqMessageLog extends BaseAssignedEntity {
    public String message; // 消息
    public String channel; // 消息队列编码
    public String publisherAppId; // 发布者应用ID
    public Integer status; // 消费状态,1:已消费,未消费
    public String errorMsg; // 异常消息
    public Integer failedNum; // 订阅失败次数
    @Column(name = "message")
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    @Column(name = "channel")
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    @Column(name = "publisher_app_id")
    public String getPublisherAppId() {
        return publisherAppId;
    }
    public void setPublisherAppId(String publisherAppId) {
        this.publisherAppId = publisherAppId;
    }
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Column(name = "error_msg")
    public String getErrorMsg() {
        return errorMsg;
    }
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
    @Column(name = "failed_num")
    public Integer getFailedNum() {
        return failedNum;
    }
    public void setFailedNum(Integer failedNum) {
        this.failedNum = failedNum;
    }
}

+ 61 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqPublisher.java

@ -0,0 +1,61 @@
package com.yihu.jw.entity.ehr.redis;
import com.yihu.jw.entity.BaseIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * redis消息发布者 Entity
 *
 * @author 张进军
 * @date 2017/11/20 09:35
 */
@Entity
@Table(name = "redis_mq_publisher")
public class RedisMqPublisher extends BaseIdentityEntity {
    public String appId; // 应用ID
    public String authorizedCode; // 授权码
    public String channel; // 消息队列编码
    public String remark; // 备注
    @Column(name = "app_id")
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    @Column(name = "authorized_code")
    public String getAuthorizedCode() {
        return authorizedCode;
    }
    public void setAuthorizedCode(String authorizedCode) {
        this.authorizedCode = authorizedCode;
    }
    @Column(name = "channel")
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
}

+ 61 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/ehr/redis/RedisMqSubscriber.java

@ -0,0 +1,61 @@
package com.yihu.jw.entity.ehr.redis;
import com.yihu.jw.entity.BaseIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * redis消息订阅者 Entity
 *
 * @author 张进军
 * @date 2017/11/10 11:14
 */
@Entity
@Table(name = "redis_mq_subscriber")
public class RedisMqSubscriber extends BaseIdentityEntity {
    public String appId; // 应用ID
    public String subscribedUrl; // 订阅者服务地址
    public String channel; // 消息队列编码
    public String remark; // 备注
    @Column(name = "app_id")
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    @Column(name = "subscribed_url")
    public String getSubscribedUrl() {
        return subscribedUrl;
    }
    public void setSubscribedUrl(String subscribedUrl) {
        this.subscribedUrl = subscribedUrl;
    }
    @Column(name = "channel")
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
}

+ 107 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisCacheAuthorization.java

@ -0,0 +1,107 @@
package com.yihu.jw.restmodel.ehr.redis;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * 缓存授权
 *
 * @author 张进军
 * @date 2017/11/23 11:28
 */
public class MRedisCacheAuthorization implements Serializable{
    public Integer id; // 主键
    private String categoryCode; // 缓存分类编码
    private String appId; // 应用ID
    private String authorizedCode; // 授权码
    private String remark; // 备注
    private Date createDate; // 创建时间
    private String creator; // 创建者
    private Date modifyDate; // 修改时间
    private String modifier; // 修改者
    public MRedisCacheAuthorization() {
    }
    public MRedisCacheAuthorization(String categoryCode) {
        this.categoryCode = categoryCode;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCategoryCode() {
        return categoryCode;
    }
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getAuthorizedCode() {
        return authorizedCode;
    }
    public void setAuthorizedCode(String authorizedCode) {
        this.authorizedCode = authorizedCode;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getModifyDate() {
        return modifyDate;
    }
    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
}

+ 91 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisCacheCategory.java

@ -0,0 +1,91 @@
package com.yihu.jw.restmodel.ehr.redis;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * 缓存分类
 *
 * @author 张进军
 * @date 2017/11/23 11:28
 */
public class MRedisCacheCategory implements Serializable{
    public Integer id; // 主键
    private String name; // 缓存分类名称
    private String code; // 缓存分类编码
    private String remark; // 备注
    private Date createDate; // 创建时间
    private String creator; // 创建者
    private Date modifyDate; // 修改时间
    private String modifier; // 修改者
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getModifyDate() {
        return modifyDate;
    }
    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
}

+ 127 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisCacheKeyRule.java

@ -0,0 +1,127 @@
package com.yihu.jw.restmodel.ehr.redis;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * 缓存Key规则
 *
 * @author 张进军
 * @date 2017/11/23 11:28
 */
public class MRedisCacheKeyRule implements Serializable{
    public Integer id; // 主键
    private String name; // 规则名称
    private String code; // 规则编码
    private String categoryCode; // 缓存分类编码
    private String expression; // 规则表达式
    private String expireTime; // 过期时间,单位秒
    private String remark; // 备注
    private Date createDate; // 创建时间
    private String creator; // 创建者
    private Date modifyDate; // 修改时间
    private String modifier; // 修改者
    private String categoryName; // 缓存分类名称
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getCategoryCode() {
        return categoryCode;
    }
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }
    public String getExpression() {
        return expression;
    }
    public void setExpression(String expression) {
        this.expression = expression;
    }
    public String getExpireTime() {
        return expireTime;
    }
    public void setExpireTime(String expireTime) {
        this.expireTime = expireTime;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getModifyDate() {
        return modifyDate;
    }
    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
    public String getCategoryName() {
        return categoryName;
    }
    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }
}

+ 136 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisMqChannel.java

@ -0,0 +1,136 @@
package com.yihu.jw.restmodel.ehr.redis;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * redis消息队列
 *
 * @author 张进军
 * @date 2017/11/10 11:14
 */
public class MRedisMqChannel implements Serializable{
    public Integer id; // 主键
    public String channel; // 消息队列编码
    public String channelName; // 消息队列名称
    public String messageTemplate; // 消息模版
    public String remark; // 备注
    public Date createDate; // 创建时间
    public String creator; // 创建者
    public Date modifyDate; // 修改时间
    public String modifier; // 修改者
    public Integer enqueuedNum; // 入列数
    public Integer dequeuedNum; // 出列数
    public Integer subscriberNum; // 订阅者数
    public Integer publisherNum; // 发布者数
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    public String getChannelName() {
        return channelName;
    }
    public void setChannelName(String channelName) {
        this.channelName = channelName;
    }
    public String getMessageTemplate() {
        return messageTemplate;
    }
    public void setMessageTemplate(String messageTemplate) {
        this.messageTemplate = messageTemplate;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getModifyDate() {
        return modifyDate;
    }
    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
    public Integer getEnqueuedNum() {
        return enqueuedNum;
    }
    public void setEnqueuedNum(Integer enqueuedNum) {
        this.enqueuedNum = enqueuedNum;
    }
    public Integer getDequeuedNum() {
        return dequeuedNum;
    }
    public void setDequeuedNum(Integer dequeuedNum) {
        this.dequeuedNum = dequeuedNum;
    }
    public Integer getSubscriberNum() {
        return subscriberNum;
    }
    public void setSubscriberNum(Integer subscriberNum) {
        this.subscriberNum = subscriberNum;
    }
    public Integer getPublisherNum() {
        return publisherNum;
    }
    public void setPublisherNum(Integer publisherNum) {
        this.publisherNum = publisherNum;
    }
}

+ 107 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisMqPublisher.java

@ -0,0 +1,107 @@
package com.yihu.jw.restmodel.ehr.redis;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * redis消息发布者
 *
 * @author 张进军
 * @date 2017/11/20 09:35
 */
public class MRedisMqPublisher implements Serializable {
    public Integer id; // 主键
    public String appId; // 应用ID
    public String authorizedCode; // 授权码
    public String channel; // 消息队列编码
    public String remark; // 备注
    public Date createDate; // 创建时间
    public String creator; // 创建者
    public Date modifyDate; // 修改时间
    public String modifier; // 修改者
    public MRedisMqPublisher() {
    }
    public MRedisMqPublisher(String channel) {
        this.channel = channel;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getAuthorizedCode() {
        return authorizedCode;
    }
    public void setAuthorizedCode(String authorizedCode) {
        this.authorizedCode = authorizedCode;
    }
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getModifyDate() {
        return modifyDate;
    }
    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
}

+ 107 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/redis/MRedisMqSubscriber.java

@ -0,0 +1,107 @@
package com.yihu.jw.restmodel.ehr.redis;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * redis消息订阅者
 *
 * @author 张进军
 * @date 2017/11/13 15:14
 */
public class MRedisMqSubscriber implements Serializable {
    public Integer id; // 主键
    public String appId; // 应用ID
    public String subscribedUrl; // 订阅者服务地址
    public String channel; // 消息队列编码
    public String remark; // 备注
    public Date createDate; // 创建时间
    public String creator; // 创建者
    public Date modifyDate; // 修改时间
    public String modifier; // 修改者
    public MRedisMqSubscriber() {
    }
    public MRedisMqSubscriber(String channel) {
        this.channel = channel;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getSubscribedUrl() {
        return subscribedUrl;
    }
    public void setSubscribedUrl(String subscribedUrl) {
        this.subscribedUrl = subscribedUrl;
    }
    public String getChannel() {
        return channel;
    }
    public void setChannel(String channel) {
        this.channel = channel;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getModifyDate() {
        return modifyDate;
    }
    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
}

+ 140 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/ehr/standard/MStdDatasetRelation.java

@ -0,0 +1,140 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.yihu.jw.restmodel.ehr.standard;
import java.io.Serializable;
public class MStdDatasetRelation implements Serializable {
    private Integer id;
    private Long parentDatasetId;
    private String parentDatasetCode;
    private String parentDatasetName;
    private Long parentMetadataId;
    private String parentMetadataCode;
    private String parentMetadataName;
    private String relation;
    private Long childDatasetId;
    private String childDatasetCode;
    private String childDatasetName;
    private Long childMetadataId;
    private String childMetadataCode;
    private String childMetadataName;
    public MStdDatasetRelation() {
    }
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Long getParentDatasetId() {
        return this.parentDatasetId;
    }
    public void setParentDatasetId(Long parentDatasetId) {
        this.parentDatasetId = parentDatasetId;
    }
    public String getParentDatasetCode() {
        return this.parentDatasetCode;
    }
    public void setParentDatasetCode(String parentDatasetCode) {
        this.parentDatasetCode = parentDatasetCode;
    }
    public String getParentDatasetName() {
        return this.parentDatasetName;
    }
    public void setParentDatasetName(String parentDatasetName) {
        this.parentDatasetName = parentDatasetName;
    }
    public Long getParentMetadataId() {
        return this.parentMetadataId;
    }
    public void setParentMetadataId(Long parentMetadataId) {
        this.parentMetadataId = parentMetadataId;
    }
    public String getParentMetadataCode() {
        return this.parentMetadataCode;
    }
    public void setParentMetadataCode(String parentMetadataCode) {
        this.parentMetadataCode = parentMetadataCode;
    }
    public String getParentMetadataName() {
        return this.parentMetadataName;
    }
    public void setParentMetadataName(String parentMetadataName) {
        this.parentMetadataName = parentMetadataName;
    }
    public String getRelation() {
        return this.relation;
    }
    public void setRelation(String relation) {
        this.relation = relation;
    }
    public Long getChildDatasetId() {
        return this.childDatasetId;
    }
    public void setChildDatasetId(Long childDatasetId) {
        this.childDatasetId = childDatasetId;
    }
    public String getChildDatasetCode() {
        return this.childDatasetCode;
    }
    public void setChildDatasetCode(String childDatasetCode) {
        this.childDatasetCode = childDatasetCode;
    }
    public String getChildDatasetName() {
        return this.childDatasetName;
    }
    public void setChildDatasetName(String childDatasetName) {
        this.childDatasetName = childDatasetName;
    }
    public Long getChildMetadataId() {
        return this.childMetadataId;
    }
    public void setChildMetadataId(Long childMetadataId) {
        this.childMetadataId = childMetadataId;
    }
    public String getChildMetadataCode() {
        return this.childMetadataCode;
    }
    public void setChildMetadataCode(String childMetadataCode) {
        this.childMetadataCode = childMetadataCode;
    }
    public String getChildMetadataName() {
        return this.childMetadataName;
    }
    public void setChildMetadataName(String childMetadataName) {
        this.childMetadataName = childMetadataName;
    }
}

+ 29 - 2
common/common-util/pom.xml

@ -64,8 +64,35 @@
            <artifactId>common-exception</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>utils</artifactId> <!-- 此依赖包含大部分常用工具类 -->
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>${version.commons.collections}</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>${version.bcprov-jdk15on}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>

+ 14 - 0
common/common-util/src/main/java/com/yihu/jw/util/common/RSAUtils.java

@ -4,6 +4,7 @@ import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import javax.crypto.Cipher;
@ -37,6 +38,19 @@ public class RSAUtils {
        }
    }
    public static HashMap<String, Object> generateKeys() throws NoSuchAlgorithmException {
        HashMap<String, Object> map = new HashMap();
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", new BouncyCastleProvider());
        keyPairGen.initialize(1024, new SecureRandom());
        KeyPair keyPair = keyPairGen.generateKeyPair();
        RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
        map.put("public", publicKey);
        map.put("private", privateKey);
        return map;
    }
    /**
     * 生成public key
     * @return

+ 109 - 49
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -6,6 +6,7 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
@ -1423,55 +1424,114 @@ public class DateUtil {
        return weekDays[getWeekByString(date)];
    }
    public static void main(String[] args) {
        // date与instant的相互转化 -- start
        Instant now = Instant.now();
        System.out.println("时间戳与北京时间相差8个时区:"+now);
// 我们去查看源码: 272行
// 发现是采用的UTC,如果你需要使用北京时间,则需要增加8个小时
        Instant nowUTC = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
        System.out.println("nowUTC :"+nowUTC );
        Date date = Date.from(now);
        System.out.println(date);
        Instant instant = date.toInstant();
// LocalDate、LocalDateTime 的now()方法使用的是系统默认时区 不存在Instant.now()的时间问题。
// date与instant的相互转化 -- end
// LocalDateTime代替Calendar -- start
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
        int year = localDateTime.getYear();// 年
        int month = localDateTime.getMonthValue();// 月
        int dayOfMonth = localDateTime.getDayOfMonth();// 日
        int hour = localDateTime.getHour();// 小时
        int minute = localDateTime.getMinute();// 分钟
        int second = localDateTime.getSecond();// 秒
        System.out.println(year);
        System.out.println(month);
        System.out.println(dayOfMonth);
        System.out.println(hour);
        System.out.println(minute);
        System.out.println(second);
// LocalDateTime代替Calendar -- end
// DateTimeFormatter代替SimpleDateFormat
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 24小时制
// Date格式化成String -- start
        String format = dateTimeFormatter.format(localDateTime);
        System.out.println("Date格式化成String:" + format);
// Date格式化成String -- end
// String获得Date -- start
        LocalDateTime parse = LocalDateTime.parse(format, dateTimeFormatter);
        ZoneOffset offset = OffsetDateTime.now().getOffset();
        Instant instant2 = parse.toInstant(offset);
        Date date1 = Date.from(instant2);
        System.out.println("String获得Date:" + date1);
    public static String getNowDateTime() {
        return dateToStringLong(new Date(),YYYYMMDDHHMMSS);
    }
    public static Timestamp getSysDateTime() {
        return new Timestamp(new Date().getTime());
    }
    public static Time getSysTime() {
        return new Time(new Date().getTime());
    }
    /**
     * 时间转字符串 yyyy-MM-dd HH:mm:ss
     */
    public static String toStringLong(Date date)
    {
        return toString(date,YYYY_MM_DD_HH_MM_SS);
    }
    public static String toString(Date date) {
        return toString(date, YYYY_MM_DD);
    }
    public static String toString(Date date, String format) {
        if (date == null) {
            return null;
        }
        if (format == null) {
            throw new IllegalArgumentException("The value of an argument is inaccurate.");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return dateToStr(date,format);
    }
    public static Date parseDate(String value, String pattern) {
        return strToDate(value,pattern);
    }
    public static Timestamp formatYMDToYMDHMS(String str) {
        if (str == null || str.trim().length() == 0) {
            return null;
        }
        str += " 00:00:00";
        java.util.Date date = strToDateLong(str);
        if (date == null) {
            return null;
        }
        Timestamp ts = fromatDateToTimestamp(new Date(date.getTime()));
        return ts;
    }
    public static Timestamp fromatDateToTimestamp(Date date) {
        Timestamp ts = null;
        try {
            ts = new Timestamp(date.getTime());
        } catch (Exception e) {
            return null;
        }
        return ts;
    }
    public static Date formatCharDateYMD(String str) {
        return formatCharDateYMD(str, YYYY_MM_DD);
    }
    public static Date formatCharDateYMD(String str, String format) {
        if (str == null || str.trim().length() == 0) {
            return null;
        }
        if (format == null) {
            throw new IllegalArgumentException("The value of an argument is inaccurate.");
        }
        return strToDate(str,format);
    }
    public static Date formatCharDateYMD(String yy, String mm, String dd) {
        if (yy == null || mm == null || dd == null || yy.trim().length() == 0 ||
                mm.trim().length() == 0 || dd.trim().length() == 0) {
            return null;
        }
        return formatCharDateYMD(yy + "-" + (mm != null && mm.length() == 1 ? "0" + mm : mm) + "-" +
                (dd != null && dd.length() == 1 ? "0" + dd : dd));
    }
    public static int getDifferenceOfDays(Date dateFrom, Date dateTo) {
        return new Long((dateTo.getTime() - dateFrom.getTime()) / 1000 / 60 / 60 / 24).intValue();
    }
    public static int getDifferenceOfDays(String dateFromStr, String dateToStr, String dateFormat) {
        Date dateFrom = parseDate(dateFromStr, dateFormat);
        Date dateTo = parseDate(dateToStr, dateFormat);
        return getDifferenceOfDays(dateFrom, dateTo);
    }
    public static String formatDate(Date value, String pattern) {
        return dateToStr(value,pattern);
    }
}

+ 3 - 2
common/common-util/src/main/java/com/yihu/jw/util/encrypt/AES.java

@ -2,7 +2,8 @@ package com.yihu.jw.util.encrypt;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
@ -53,7 +54,7 @@ public class AES {
     * @return 长度为16倍数的密钥
     */
    public static String genAesPass(String content) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.DEFAULT_CHAR_DATE_YMD_FORMAT);
        SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.YYYYMMDD);
        StringBuffer passWordBuffer = new StringBuffer();
        passWordBuffer = passWordBuffer.append(content).append(sdf.format(new Date()));
        Integer remainder = passWordBuffer.length() % 16;

+ 14 - 0
common/common-util/src/main/java/com/yihu/jw/util/encrypt/MD5.java

@ -1,5 +1,7 @@
package com.yihu.jw.util.encrypt;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.*;
import java.lang.reflect.Method;
import java.nio.MappedByteBuffer;
@ -14,6 +16,18 @@ import java.security.PrivilegedAction;
 */
public class MD5 {
    public static String md5Hex(String data) {
        return DigestUtils.md5Hex(data);
    }
    public static String md5Hex(byte[] data) {
        return DigestUtils.md5Hex(data);
    }
    public static String md5Hex(InputStream data) throws IOException {
        return DigestUtils.md5Hex(data);
    }
    public static String hash(String str) throws Exception {
        MessageDigest messageDigest = null;
        messageDigest = MessageDigest.getInstance("MD5");

+ 15 - 0
common/common-util/src/main/java/com/yihu/jw/util/id/UuidUtil.java

@ -0,0 +1,15 @@
package com.yihu.jw.util.id;
import java.util.UUID;
/**
 * @author 张进军
 * @date 2017/11/16 08:58
 */
public class UuidUtil {
    public static String randomUUID () {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

+ 41 - 0
common/common-util/src/main/java/com/yihu/jw/util/network/HttpResponse.java

@ -0,0 +1,41 @@
package com.yihu.jw.util.network;
/**
 * Utils - Http请求辅助类,简化页面页面判断逻辑
 * Created by progr1mmer on 2018/1/16.
 */
public class HttpResponse {
    private int status;
    private String content;
    public HttpResponse(int status, String content) {
        this.status = status;
        this.content = content;
    }
    public int getStatus() {
        return status;
    }
    public void setStatus(int status) {
        this.status = status;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public boolean isSuccessFlg() {
        return status == 200;
    }
    public String getErrorMsg() {
        return content;
    }
}

+ 497 - 0
common/common-util/src/main/java/com/yihu/jw/util/network/HttpUtils.java

@ -0,0 +1,497 @@
package com.yihu.jw.util.network;
import com.yihu.jw.util.common.LogService;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.util.StringUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Utils - HTTP请求辅助工具类
 * Created by progr1mmer on 2017/9/27.
 */
public class HttpUtils {
    public static HttpResponse doGet(String url, Map<String, Object> params) throws Exception {
        return doGet(url, params, null);
    }
    public static HttpResponse doGet(String url, Map<String, Object> params, Map<String, String> headers) throws Exception {
        return doGet(url, params, headers, null, null);
    }
    public static HttpResponse doGet(String url, Map<String, Object> params, Map<String, String> headers, String username, String password) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                if (value != null) {
                    nameValuePairList.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
                }
            }
        }
        String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairList, "UTF-8"));
        HttpGet httpGet = new HttpGet(url + "?" + paramStr);
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpGet.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpGet);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" GET: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static HttpResponse doPost(String url, Map<String, Object> params) throws Exception {
        return doPost(url, params, null);
    }
    public static HttpResponse doPost(String url, Map<String, Object> params, Map<String, String> headers) throws Exception{
        return doPost(url, params, headers, null, null);
    }
    public static HttpResponse doPost(String url, Map<String, Object> params, Map<String, String> headers, String username, String password) throws Exception{
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                if (value != null) {
                    nameValuePairList.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
                }
            }
        }
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, "UTF-8"));
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpPost.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpPost);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" POST: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static HttpResponse doJsonPost(String url, String jsonData, Map<String, String> headers, String username, String password) throws Exception{
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
        httpPost.setEntity(new StringEntity(jsonData, "UTF-8"));
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpPost.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpPost);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" POST: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static HttpResponse doPut(String url, Map<String, Object> params) throws Exception {
        return doPut(url, params, null);
    }
    public static HttpResponse doPut(String url, Map<String, Object> params, Map<String, String> headers) throws Exception {
        return doPut(url, params, headers, null, null);
    }
    public static HttpResponse doPut(String url, Map<String, Object> params, Map<String, String> headers, String username, String password) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        HttpPut httpPut = new HttpPut(url);
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                if (value != null) {
                    nameValuePairList.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
                }
            }
        }
        httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairList, "UTF-8"));
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpPut.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpPut);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" PUT: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static HttpResponse doJsonPut(String url, String jsonData, Map<String, String> headers, String username, String password) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        HttpPut httpPut = new HttpPut(url);
        httpPut.setHeader("Content-Type", "application/json;charset=UTF-8");
        httpPut.setEntity(new StringEntity(jsonData, "UTF-8"));
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpPut.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpPut);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" PUT: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static HttpResponse doDelete(String url, Map<String, Object> params) throws Exception {
        return doDelete(url, params, null);
    }
    public static HttpResponse doDelete(String url, Map<String, Object> params, Map<String, String> headers) throws Exception {
        return doDelete(url, params, headers, null, null);
    }
    public static HttpResponse doDelete(String url, Map<String, Object> params, Map<String, String> headers, String username, String password) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                if (value != null) {
                    nameValuePairList.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
                }
            }
        }
        String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairList, "UTF-8"));
        HttpDelete httpDelete = new HttpDelete(url + "?" + paramStr);
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpDelete.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpDelete);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" DELETE: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, File file) throws Exception {
        return doUpload(url, params, null, file);
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, Map<String, String> headers, File file) throws Exception {
        return doUpload(url, params, headers, "file", file);
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, Map<String, String> headers, String fileKey, File file) throws Exception {
        return doUpload(url, params, headers, fileKey, file, null, null);
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, Map<String, String> headers, String fileKey, File file, String username, String password) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        HttpPost httpPost = new HttpPost(url);
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        FileBody fileBody = new FileBody(file);
        multipartEntityBuilder.addPart(fileKey, fileBody);
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                if (value != null) {
                    multipartEntityBuilder.addTextBody(key, String.valueOf(params.get(key)), ContentType.TEXT_PLAIN);
                }
            }
        }
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpPost.addHeader(key, headers.get(key));
            }
        }
        HttpEntity reqEntity = multipartEntityBuilder.build();
        httpPost.setEntity(reqEntity);
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpPost);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" POST UPLOAD: " + url + " " + status);
            }
            return getResp(status, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static File download(String url, String filePath, Map<String, Object> params, Map<String, String> headers) throws Exception {
        return download(url, filePath, params, headers, null, null);
    }
    public static File download(String url, String filePath, Map<String, Object> params, Map<String, String> headers, String username, String password) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                if (value != null) {
                    nameValuePairList.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
                }
            }
        }
        String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairList, "UTF-8"));
        HttpGet httpGet = new HttpGet(url + "?" + paramStr);
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpGet.addHeader(key, headers.get(key));
            }
        }
        try {
            if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
                UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials(username, password);
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, usernamePasswordCredentials);
                httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
            } else {
                httpClient = HttpClients.createDefault();
            }
            closeableHttpResponse = httpClient.execute(httpGet);
            HttpEntity resEntity = closeableHttpResponse.getEntity();
            int status = closeableHttpResponse.getStatusLine().getStatusCode();
            if (status != HttpStatus.SC_OK) {
                LogService.getLogger().error(" DOWNLOAD: " + url + " " + status);
            }
            return getRespFile(filePath, resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    private static HttpResponse getResp(int status, HttpEntity entity) throws Exception {
        if (null == entity) {
            return new HttpResponse(status, null);
        }
        InputStream is = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
        }
        return new HttpResponse(status, stringBuilder.toString());
    }
    private static File getRespFile(String filePath, HttpEntity entity) throws Exception {
        if (entity == null) {
            return null;
        }
        FileOutputStream outputStream = null;
        try {
            InputStream inputStream = entity.getContent();
            File file = new File(filePath);
            outputStream = new FileOutputStream(file);
            byte [] buff = new byte[1024];
            int j;
            while ((j = inputStream.read(buff)) != -1) {
                outputStream.write(buff, 0, j);
            }
            outputStream.flush();
            return file;
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}

+ 56 - 0
common/common-util/src/main/java/com/yihu/jw/util/network/IPInfoUtils.java

@ -0,0 +1,56 @@
package com.yihu.jw.util.network;
import javax.servlet.http.HttpServletRequest;
/**
 * Utils - ip信息辅助工具类
 * Created by progr1mmer on 2018/1/18.
 */
public class IPInfoUtils {
    private static final long A1 = getIpNum("10.0.0.0");
    private static final long A2 = getIpNum("10.255.255.255");
    private static final long B1 = getIpNum("172.16.0.0");
    private static final long B2 = getIpNum("172.31.255.255");
    private static final long C1 = getIpNum("192.168.0.0");
    private static final long C2 = getIpNum("192.168.255.255");
    private static final long D1 = getIpNum("10.44.0.0");
    private static final long D2 = getIpNum("10.69.0.255");
    private static final long E1 = getIpNum("1.0.0.0");
    private static final long E2 = getIpNum("1.255.255.255");
    private static long getIpNum(String ipAddress) {
        String [] ip = ipAddress.split("\\.");
        long a = Integer.parseInt(ip[0]);
        long b = Integer.parseInt(ip[1]);
        long c = Integer.parseInt(ip[2]);
        long d = Integer.parseInt(ip[3]);
        return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
    }
    public static boolean isInnerIP(String ip){
        long n = getIpNum(ip);
        return (n >= A1 && n <= A2) || (n >= B1 && n <= B2) || (n >= C1 && n <= C2) || (n >= D1 && n <= D2) || (n >= E1 && n<=E2);
    }
    public static String getIPAddress(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.getHeader("http_client_ip");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("http_x_forwarded_for");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
}

+ 96 - 113
common/common-util/src/main/java/com/yihu/jw/util/sql/BeanTransformer.java

@ -1,8 +1,6 @@
package com.yihu.jw.util.sql;
import org.hibernate.transform.ResultTransformer;
import javax.persistence.Column;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
@ -11,19 +9,21 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;
import org.hibernate.transform.ResultTransformer;
/**
 * @created Airhead 2015/12/26.
 */
public class BeanTransformer<T> implements ResultTransformer {
    private final Class<T> mapClass;
    public Map<String, String> columnToProperty;
    public Map<String, String> propertyToColumn;
    public BeanTransformer(Class<T> mapClass) {
        this.mapClass = mapClass;
        this.initColumnsToProperties();
@ -34,17 +34,13 @@ public class BeanTransformer<T> implements ResultTransformer {
        try {
            PropertyDescriptor[] props = this.propertyDescriptors();
            int[] col2Pro = this.mapColumnsToProperties(aliases, props);
            return this.createBean(tuple, mapClass, props, col2Pro);
        } catch (Exception e) {
            e.printStackTrace();
            return this.createBean(tuple, this.mapClass, props, col2Pro);
        } catch (Exception var5) {
            var5.printStackTrace();
            return null;
        }
        return null;
    }
    @Override
    public List transformList(List list) {
        return list;
    }
@ -52,21 +48,21 @@ public class BeanTransformer<T> implements ResultTransformer {
    protected T newInstance(Class<T> c) throws Exception {
        try {
            return c.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new Exception("Cannot create " + c.getName() + ": " + e.getMessage());
        } catch (IllegalAccessException | InstantiationException var3) {
            throw new Exception("Cannot create " + c.getName() + ": " + var3.getMessage());
        }
    }
    protected int[] mapColumnsToProperties(String[] aliases, PropertyDescriptor[] props) throws SQLException {
        int[] col2Pro = new int[aliases.length];
        Arrays.fill(col2Pro, -1);
        for (int col = 0; col < aliases.length; ++col) {
        for(int col = 0; col < aliases.length; ++col) {
            String columnName = aliases[col];
            String propertyName = this.columnToProperty.get(columnName.toUpperCase());
            for (int i = 0; i < props.length; ++i) {
                if (propertyName.equals(props[i].getName())) {
            String propertyName = (String)this.columnToProperty.get(columnName.toUpperCase());
            for(int i = 0; i < props.length; ++i) {
                if (propertyName != null & props[i] != null && propertyName.equals(props[i].getName())) {
                    col2Pro[col] = i;
                    break;
                }
@ -76,11 +72,10 @@ public class BeanTransformer<T> implements ResultTransformer {
        return col2Pro;
    }
    private T createBean(Object[] tuple, Class<T> type, PropertyDescriptor[] props, int[] col2Pro) throws Exception {
        T bean = this.newInstance(type);
        for (int i = 0; i < col2Pro.length; ++i) {
        for(int i = 0; i < col2Pro.length; ++i) {
            int realIndex = col2Pro[i];
            if (realIndex != -1) {
                Object value = tuple[i];
@ -94,125 +89,113 @@ public class BeanTransformer<T> implements ResultTransformer {
    private void callSetter(Object target, PropertyDescriptor prop, Object value) throws Exception {
        Method setter = prop.getWriteMethod();
        if (setter != null) {
            Class[] params = setter.getParameterTypes();
            try {
                if (value instanceof Date) {
                    String targetType = params[0].getName();
                    if ("java.sql.Date".equals(targetType)) {
                        value = new java.sql.Date(((Date)value).getTime());
                    } else if ("java.sql.Time".equals(targetType)) {
                        value = new Time(((Date)value).getTime());
                    } else if ("java.sql.Timestamp".equals(targetType)) {
                        Timestamp tsValue = (Timestamp)value;
                        int nanos = tsValue.getNanos();
                        value = new Timestamp(tsValue.getTime());
                        ((Timestamp)value).setNanos(nanos);
                    }
                }
        if (setter == null) {
            return;
        }
                if (this.isCompatibleType(value, params[0])) {
                    setter.invoke(target, value);
                } else if (params[0].equals(Long.TYPE) && value instanceof Integer) {
                    setter.invoke(target, value);
                } else {
                    if (!params[0].equals(Long.class) || !(value instanceof Integer)) {
                        throw new Exception("Cannot set " + prop.getName() + ": incompatible types, cannot convert " + value.getClass().getName() + " to " + params[0].getName());
                    }
        Class<?>[] params = setter.getParameterTypes();
        try {
            // convert types for some popular ones
            if (value instanceof java.util.Date) {
                final String targetType = params[0].getName();
                if ("java.sql.Date".equals(targetType)) {
                    value = new java.sql.Date(((java.util.Date) value).getTime());
                } else if ("java.sql.Time".equals(targetType)) {
                    value = new java.sql.Time(((java.util.Date) value).getTime());
                } else if ("java.sql.Timestamp".equals(targetType)) {
                    Timestamp tsValue = (Timestamp) value;
                    int nanos = tsValue.getNanos();
                    value = new Timestamp(tsValue.getTime());
                    ((Timestamp) value).setNanos(nanos);
                    setter.invoke(target, Long.valueOf(value.toString()));
                }
            } else {
//                if (value instanceof String && params[0].isEnum()) {
//                    value = Enum.valueOf(params[0].asSubclass(Enum.class), (String) value);
//                }
            }
            // Don't call setter if the value object isn't the right type
            if (this.isCompatibleType(value, params[0])) {
                setter.invoke(target, new Object[]{value});
            } else {
                throw new Exception(
                        "Cannot set " + prop.getName() + ": incompatible types, cannot convert "
                                + value.getClass().getName() + " to " + params[0].getName());
                // value cannot be null here because isCompatibleType allows null
            } catch (IllegalAccessException | InvocationTargetException | IllegalArgumentException var9) {
                throw new SQLException("Cannot set " + prop.getName() + ": " + var9.getMessage());
            }
        } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
            throw new SQLException(
                    "Cannot set " + prop.getName() + ": " + e.getMessage());
        }
    }
    private void initColumnsToProperties() {
        columnToProperty = new HashMap<>();
        Field[] fields = mapClass.getDeclaredFields();
        for (Field f : fields) {
            Column column = f.getAnnotation(Column.class);
            if (column == null) {
                continue;
        this.columnToProperty = new HashMap();
        Field[] fields = this.mapClass.getDeclaredFields();
        Field[] var2 = fields;
        int var3 = fields.length;
        for(int var4 = 0; var4 < var3; ++var4) {
            Field f = var2[var4];
            Column column = (Column)f.getAnnotation(Column.class);
            if (column != null) {
                String columnName = column.name();
                String propertyName = f.getName();
                this.columnToProperty.put(columnName.toUpperCase(), propertyName);
            }
            String columnName = column.name();
            String propertyName = f.getName();
            columnToProperty.put(columnName.toUpperCase(), propertyName);
        }
    }
    private void initPropertiesToColumns() {
        propertyToColumn = new HashMap<>();
        Field[] fields = mapClass.getDeclaredFields();
        for (Field f : fields) {
            Column column = f.getAnnotation(Column.class);
            if (column == null) {
                continue;
        this.propertyToColumn = new HashMap();
        Field[] fields = this.mapClass.getDeclaredFields();
        Field[] var2 = fields;
        int var3 = fields.length;
        for(int var4 = 0; var4 < var3; ++var4) {
            Field f = var2[var4];
            Column column = (Column)f.getAnnotation(Column.class);
            if (column != null) {
                String columnName = column.name();
                String propertyName = f.getName();
                this.propertyToColumn.put(propertyName, columnName.toUpperCase());
            }
            String columnName = column.name();
            String propertyName = f.getName();
            propertyToColumn.put(propertyName,columnName.toUpperCase());
        }
    }
    private PropertyDescriptor[] propertyDescriptors() throws Exception {
        BeanInfo beanInfo = null;
        try {
            beanInfo = Introspector.getBeanInfo(mapClass);
        } catch (IntrospectionException e) {
            throw new Exception("Bean introspection failed: " + e.getMessage());
            beanInfo = Introspector.getBeanInfo(this.mapClass);
        } catch (IntrospectionException var3) {
            throw new Exception("Bean introspection failed: " + var3.getMessage());
        }
        return beanInfo.getPropertyDescriptors();
    }
    private boolean isCompatibleType(Object value, Class<?> type) {
        // Do object check first, then primitives
        if (value == null || type.isInstance(value)) {
            return true;
        } else if (type.equals(Integer.TYPE) && value instanceof Integer) {
            return true;
        } else if (type.equals(Integer.TYPE) && value instanceof Long) {
            return true;
        } else if (type.equals(Long.TYPE) && value instanceof Long) {
            return true;
        } else if (type.equals(Double.TYPE) && value instanceof Double) {
            return true;
        } else if (type.equals(Float.TYPE) && value instanceof Float) {
            return true;
        } else if (type.equals(Short.TYPE) && value instanceof Short) {
            return true;
        } else if (type.equals(Byte.TYPE) && value instanceof Byte) {
            return true;
        } else if (type.equals(Character.TYPE) && value instanceof Character) {
            return true;
        } else if (type.equals(Boolean.TYPE) && value instanceof Boolean) {
        if (value != null && !type.isInstance(value)) {
            if (type.equals(Integer.TYPE) && value instanceof Integer) {
                return true;
            } else if (type.equals(Integer.TYPE) && value instanceof Long) {
                return true;
            } else if (type.equals(Long.TYPE) && value instanceof Long) {
                return true;
            } else if (type.equals(Double.TYPE) && value instanceof Double) {
                return true;
            } else if (type.equals(Float.TYPE) && value instanceof Float) {
                return true;
            } else if (type.equals(Short.TYPE) && value instanceof Short) {
                return true;
            } else if (type.equals(Byte.TYPE) && value instanceof Byte) {
                return true;
            } else if (type.equals(Character.TYPE) && value instanceof Character) {
                return true;
            } else {
                return type.equals(Boolean.TYPE) && value instanceof Boolean;
            }
        } else {
            return true;
        }
        return false;
    }
}
}

+ 88 - 29
common/common-util/src/main/java/com/yihu/jw/util/sql/SqlCreator.java

@ -5,10 +5,7 @@ import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.yihu.jw.util.common.StringUtil;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * Created by lingfeng on 2015/6/23.
@ -31,6 +28,55 @@ public class SqlCreator {
        transformer = new BeanTransformer(tClass);
    }
    public String insertDataToSQL(String tabelName, JsonNode jsonNode) {
        this.setTableName(tabelName);
        Iterator var3 = this.transformer.columnToProperty.keySet().iterator();
        while(var3.hasNext()) {
            Object key = var3.next();
            String property = StringUtil.toString(this.transformer.columnToProperty.get(key));
            JsonNode propertyJsonNode = jsonNode.get(property);
            if (propertyJsonNode != null) {
                this.itemList.add(StringUtil.toString(key));
                this.itemValueList.add(":" + property);
                this.setKeyValueMapByType(property, propertyJsonNode, this.keyValueMap);
            }
        }
        return this.insertDataToSql();
    }
    public String insertDataToSql() {
        StringBuilder sqlBuffer = new StringBuilder();
        sqlBuffer.append(" INSERT INTO " + this.tableName + "(");
        Iterator var2 = this.itemList.iterator();
        while(var2.hasNext()) {
            String item = (String)var2.next();
            sqlBuffer.append(item + ",");
        }
        sqlBuffer.deleteCharAt(sqlBuffer.length() - 1);
        sqlBuffer.append(") VALUES (");
        for (String item : itemValueList) {
            String tem = item.substring(1);
            Object value = keyValueMap.get(tem);
            if(value==null){
                sqlBuffer.append("null,");
            }else if ((value instanceof Integer) || (value instanceof Long) ||(value instanceof Double) ||(value instanceof Float) ||(value instanceof Short) ||(value instanceof Byte)) {
                 sqlBuffer.append(value + ",");
            }else if (value instanceof Character || value instanceof String) {
                sqlBuffer.append("'" + value + "',");
            }else {
                sqlBuffer.append("'" + value + "',");
            }
        }
        sqlBuffer.deleteCharAt(sqlBuffer.length() - 1);
        sqlBuffer.append(SqlConstants.RIGHT_BRACKET + SqlConstants.SEMICOLON);
        return sqlBuffer.toString();
    }
    public String insertData() {
        StringBuilder sqlBuffer = new StringBuilder();
@ -67,29 +113,41 @@ public class SqlCreator {
    public void setKeyValueMapByType(String property, JsonNode propertyJsonNode, Map<String, Object> keyValueMap) {
        JsonNodeType jsonNodeType = propertyJsonNode.getNodeType();
        if (jsonNodeType.equals(JsonNodeType.STRING)) {
            keyValueMap.put(property, propertyJsonNode.asText());
            String text = propertyJsonNode.asText();
            if (text != null && text.contains("'")) {
                text = text.replaceAll("'", "\\\\'");
            }
            keyValueMap.put(property, text);
        } else if (jsonNodeType.equals(JsonNodeType.NUMBER)) {
            keyValueMap.put(property, propertyJsonNode.asInt());
        } else if (jsonNodeType.equals(JsonNodeType.BOOLEAN)) {
            keyValueMap.put(property, propertyJsonNode.asInt());
        } else {
            keyValueMap.put(property, null);
            keyValueMap.put(property, (Object)null);
        }
    }
    public String countData(String tabelName) {
        StringBuilder sqlBuffer = new StringBuilder();
        setTableName(tabelName);
        sqlBuffer.append(SqlConstants.SELECT);
        sqlBuffer.append(SqlConstants.COUNT);
        sqlBuffer.append(SqlConstants.FROM + tableName);
        if (!CollectionUtils.isEmpty(conditionList)) {
            sqlBuffer.append(SqlConstants.WHERE);
            sqlBuffer.append("1=1" + SqlConstants.AND);
            for (String condition : conditionList) {
                sqlBuffer.append(condition + SqlConstants.AND);
        this.setTableName(tabelName);
        sqlBuffer.append(" SELECT ");
        sqlBuffer.append(" COUNT(*) ");
        sqlBuffer.append(" FROM " + this.tableName);
        if (!CollectionUtils.isEmpty(this.conditionList)) {
            sqlBuffer.append(" WHERE ");
            sqlBuffer.append("1=1 AND ");
            Iterator var3 = this.conditionList.iterator();
            while(var3.hasNext()) {
                String condition = (String)var3.next();
                sqlBuffer.append(condition + " AND ");
            }
            sqlBuffer.delete(sqlBuffer.length() - 4, sqlBuffer.length() - 1);
        }
        return sqlBuffer.toString();
    }
@ -153,7 +211,7 @@ public class SqlCreator {
    public String betweenCondition(String item, Object value1, Object value2) {
        String condition = item + SqlConstants.BETWEEN + SqlConstants.BEGIN + item + SqlConstants.AND + SqlConstants.END + item;
        String condition = item + SqlConstants.BETWEEN + SqlConstants.BEGIN + " '"+ value1 +"' " + SqlConstants.AND + SqlConstants.END + " '"+ value2 +"' ";
        keyValueMap.put(SqlConstants.BEGIN + item, value1);
        keyValueMap.put(SqlConstants.END + item, value2);
        conditionList.add(condition);
@ -161,28 +219,28 @@ public class SqlCreator {
    }
    public String greaterAndEqualCondition(String item, Object value) {
        String condition = item + SqlConstants.GREATER_EQUAL_MARK + SqlConstants.COLON + item;
        String condition = item + SqlConstants.GREATER_EQUAL_MARK + " '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
    }
    public String greaterCondition(String item, Object value) {
        String condition = item + SqlConstants.GREATER_MARK + SqlConstants.COLON + item;
        String condition = item + SqlConstants.GREATER_MARK + " '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
    }
    public String lessAndEqualCondition(String item, Object value) {
        String condition = item + SqlConstants.LESS_EQUAL_MARK + SqlConstants.COLON + item;
        String condition = item + SqlConstants.LESS_EQUAL_MARK + " '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
    }
    public String lessCondition(String item, Object value) {
        String condition = item + SqlConstants.LESS_MARK + SqlConstants.COLON + item;
        String condition = item + SqlConstants.LESS_MARK +" '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
@ -190,7 +248,7 @@ public class SqlCreator {
    public String equalCondition(String item, Object value) {
        String column = StringUtil.toString(transformer.propertyToColumn.get(item));
        String condition = column + SqlConstants.EQUAL_MARK + SqlConstants.COLON + item;
        String condition = column + SqlConstants.EQUAL_MARK + " '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
@ -198,7 +256,7 @@ public class SqlCreator {
    public String inCondition(String item, Object value) {
        String column = StringUtil.toString(transformer.propertyToColumn.get(item));
        String condition = column + SqlConstants.IN + SqlConstants.LEFT_BRACKET + SqlConstants.COLON + item + SqlConstants.RIGHT_BRACKET;
        String condition = column + SqlConstants.IN + SqlConstants.LEFT_BRACKET + " '"+ value +"' " + SqlConstants.RIGHT_BRACKET;
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
@ -206,7 +264,7 @@ public class SqlCreator {
    public String equalConditionQue(String item, Object value) {
        String column = StringUtil.toString(transformer.propertyToColumn.get(item));
        String condition = column + SqlConstants.EQUAL_MARK + SqlConstants.QUESTION_MARK;
        String condition = column + SqlConstants.EQUAL_MARK +" '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
@ -216,9 +274,10 @@ public class SqlCreator {
        if (!StringUtil.isEmpty(value)) {
            String column1 = StringUtil.toString(transformer.propertyToColumn.get(item1));
            String column2 = StringUtil.toString(transformer.propertyToColumn.get(item2));
            String condition = SqlConstants.LEFT_BRACKET + column1 + SqlConstants.LIKE + SqlConstants.COLON + item1
                    + SqlConstants.OR + column2 + SqlConstants.LIKE + SqlConstants.COLON + item2 + SqlConstants.RIGHT_BRACKET;
            value = SqlConstants.PERCENT + value + SqlConstants.PERCENT;
            value = " '"+ SqlConstants.PERCENT + value + SqlConstants.PERCENT+"' ";
            String condition = SqlConstants.LEFT_BRACKET + column1 + SqlConstants.LIKE + value
                    + SqlConstants.OR + column2 + SqlConstants.LIKE + value + SqlConstants.RIGHT_BRACKET;
            keyValueMap.put(item1, value);
            keyValueMap.put(item2, value);
            conditionList.add(condition);
@ -231,8 +290,8 @@ public class SqlCreator {
    public String likeCondition(String item, Object value) {
        String column = StringUtil.toString(transformer.propertyToColumn.get(item));
        String condition = column + SqlConstants.LIKE + SqlConstants.COLON + item;
        value = SqlConstants.PERCENT + value + SqlConstants.PERCENT;
        String condition = column + SqlConstants.LIKE + " '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;
@ -240,7 +299,7 @@ public class SqlCreator {
    public String neCondition(String item, Object value) {
        String column = StringUtil.toString(transformer.propertyToColumn.get(item));
        String condition = column + SqlConstants.NE_MARK + SqlConstants.COLON + item;
        String condition = column + SqlConstants.NE_MARK + " '"+ value +"' ";
        keyValueMap.put(item, value);
        conditionList.add(condition);
        return condition;

+ 10 - 0
common/commons-ehr-constants/src/main/java/com/yihu/ehr/constants/ServiceApi.java

@ -1787,4 +1787,14 @@ public class ServiceApi {
    }
    public static class StdRelation {
        public static final String Modify = "/stdRelation";
        public static final String DeleteById = "/stdRelation/{ids}";
        public static final String List = "stdRelation/list";
        public static final String ListNoPage = "stdRelation/listNoPage";
        public static final String IsUnique = "stdRelation/isUnique";
        public StdRelation() {
        }
    }
}

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java

@ -21,7 +21,7 @@ import com.yihu.jw.security.utils.IdCardUtil;
import com.yihu.jw.security.utils.ImUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.http.NameValuePair;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java

@ -5,7 +5,7 @@ import com.yihu.jw.entity.util.AesEncryptUtils;
import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
import com.yihu.jw.security.utils.AES;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.springframework.security.authentication.*;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/client/WlyyJdbcClientRedirectUriService.java

@ -1,6 +1,6 @@
package com.yihu.jw.security.oauth2.provider.client;
import com.yihu.utils.network.IPInfoUtils;
import com.yihu.jw.util.network.IPInfoUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyAuthorizationEndpoint.java

@ -2,7 +2,7 @@ package com.yihu.jw.security.oauth2.provider.endpoint;
import com.yihu.jw.security.core.userdetails.jdbc.WlyyUserDetailsService;
import com.yihu.jw.security.oauth2.provider.client.WlyyJdbcClientRedirectUriService;
import com.yihu.utils.network.IPInfoUtils;
import com.yihu.jw.util.network.IPInfoUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

+ 4 - 4
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java

@ -38,11 +38,11 @@ import com.yihu.jw.sms.service.ZBSmsService;
import com.yihu.jw.sms.service.ZhongShanSMSService;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
import com.yihu.jw.util.common.NetworkUtil;
import com.yihu.jw.util.common.RSAUtils;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.security.MD5;
import com.yihu.utils.security.RSAUtils;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.encrypt.MD5;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyYkyyEndpoint.java

@ -14,7 +14,7 @@ import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter;
import com.yihu.jw.security.service.YkyyService;
import com.yihu.jw.security.utils.DateUtil;
import com.yihu.jw.security.utils.IdCardUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import io.swagger.annotations.Api;
import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/HcyyService.java

@ -15,7 +15,7 @@ import com.yihu.jw.security.utils.AesUtilsByDigitalCloudSign;
import com.yihu.jw.security.utils.DateUtil;
import com.yihu.jw.security.utils.RSAEncrypt;
import com.yihu.jw.security.utils.WebserviceUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import net.sf.json.xml.XMLSerializer;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringEscapeUtils;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthSsoService.java

@ -12,7 +12,7 @@ import com.yihu.jw.security.dao.patient.BasePatientWechatDao;
import com.yihu.jw.security.dao.patient.WlyyPatientFamilyMemberDao;
import com.yihu.jw.security.utils.IdCardUtil;
import com.yihu.jw.security.utils.RSAEncrypt;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthWjwConfigService.java

@ -11,7 +11,7 @@ import com.yihu.jw.security.dao.patient.WlyyPatientFamilyMemberDao;
import com.yihu.jw.security.model.PatientWechat;
import com.yihu.jw.security.utils.AES;
import com.yihu.jw.security.utils.IdCardUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthWlyyConfigService.java

@ -21,7 +21,7 @@ import com.yihu.jw.security.dao.user.RoleDao;
import com.yihu.jw.security.dao.user.WlyyUserAreaDao;
import com.yihu.jw.security.dao.user.WlyyUserEquipmentDao;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthYlzConfigService.java

@ -13,7 +13,7 @@ import com.yihu.jw.security.utils.ByteToInputStream;
import com.yihu.jw.security.utils.DateUtil;
import com.yihu.jw.security.utils.QrcodeUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import com.ylzinfo.ehc.EhcHandler;
import com.ylzinfo.ehc.common.utils.DateUtils;
import com.ylzinfo.ehc.trans.TransRequest;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/RegisterService.java

@ -11,7 +11,7 @@ import com.yihu.jw.security.dao.patient.BasePatientMedicareCardDao;
import com.yihu.jw.security.dao.patient.BasePatientWechatDao;
import com.yihu.jw.security.dao.patient.WlyyPatientFamilyMemberDao;
import com.yihu.jw.security.utils.IdCardUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/service/UserService.java

@ -7,7 +7,7 @@ import com.yihu.jw.entity.base.org.BaseOrgUserDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.jw.patient.util.ConstantUtils;
import com.yihu.jw.security.dao.iot.UserDao;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

+ 3 - 3
server/svr-authentication/src/main/java/com/yihu/jw/security/service/YkyyService.java

@ -20,9 +20,9 @@ import com.yihu.jw.security.dao.patient.BasePatientDao;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/utils/AesUtilsByDigitalCloudSign.java

@ -7,7 +7,7 @@ import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.codec.binary.Base64;

+ 3 - 3
starter/mysql-starter/src/main/java/com/yihu/jw/mysql/query/BaseJpaService.java

@ -1,6 +1,6 @@
package com.yihu.jw.mysql.query;
import com.yihu.utils.context.SpringContextUtils;
import com.yihu.jw.lang.SpringContext;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.BeanUtils;
@ -216,11 +216,11 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    }
    public JpaRepository getJpaRepository(){
        return (JpaRepository) SpringContextUtils.getService(repoClass);
        return (JpaRepository) SpringContext.getService(repoClass);
    }
    public R getRepository() {
        return SpringContextUtils.getService(repoClass);
        return SpringContext.getService(repoClass);
    }
    public Session currentSession() {

+ 1 - 1
starter/mysql-starter/src/main/java/com/yihu/jw/mysql/query/URLQueryParser.java

@ -1,6 +1,6 @@
package com.yihu.jw.mysql.query;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import javafx.util.Pair;
import org.springframework.util.StringUtils;

+ 3 - 3
svr/svr-base/src/main/java/com/yihu/jw/base/activemq/ConsumerRunner.java

@ -1,6 +1,6 @@
package com.yihu.jw.base.activemq;
import com.yihu.utils.context.SpringContextUtils;
import com.yihu.jw.lang.SpringContext;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -37,7 +37,7 @@ public class ConsumerRunner implements Runnable, ExceptionListener {
    private void init() {
        try {
            ActiveMQConnectionFactory connectionFactory = SpringContextUtils.getService(ActiveMQConnectionFactory.class);
            ActiveMQConnectionFactory connectionFactory = SpringContext.getService(ActiveMQConnectionFactory.class);
            // Create a Connection
            connection = connectionFactory.createQueueConnection();
            connection.start();
@ -55,7 +55,7 @@ public class ConsumerRunner implements Runnable, ExceptionListener {
    }
    private void recover() throws JMSException {
        ActiveMQConnectionFactory connectionFactory = SpringContextUtils.getService(ActiveMQConnectionFactory.class);
        ActiveMQConnectionFactory connectionFactory = SpringContext.getService(ActiveMQConnectionFactory.class);
        // Create a Connection
        connection = connectionFactory.createQueueConnection();
        connection.start();

+ 2 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/patient/BasePatientEndpoint.java

@ -24,8 +24,8 @@ import com.yihu.jw.restmodel.base.patient.BasePatientVO;
import com.yihu.jw.restmodel.web.*;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import com.yihu.utils.date.DateUtil;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.encrypt.MD5;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEntryEndpoint.java

@ -2,6 +2,7 @@ package com.yihu.jw.base.endpoint.system;
import com.yihu.jw.base.service.system.SystemDictEntryService;
import com.yihu.jw.entity.base.system.SystemDictEntryDO;
import com.yihu.jw.phonics.PinyinUtil;
import com.yihu.jw.restmodel.base.system.SystemDictEntryVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
@ -9,7 +10,6 @@ import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import com.yihu.utils.pinyin.PinyinUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/BaseDoctorService.java

@ -47,7 +47,7 @@ import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java

@ -26,7 +26,7 @@ import com.yihu.jw.entity.base.system.SystemDictEntryDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/system/SystemDictService.java

@ -11,7 +11,7 @@ import com.yihu.jw.entity.base.dict.*;
import com.yihu.jw.entity.base.system.SystemDictDO;
import com.yihu.jw.entity.base.system.SystemDictEntryDO;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.pinyin.PinyinUtil;
import com.yihu.jw.phonics.PinyinUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/user/UserService.java

@ -24,7 +24,7 @@ import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

+ 3 - 3
svr/svr-base/src/main/java/com/yihu/jw/base/service/util/YkyyBaseService.java

@ -16,9 +16,9 @@ import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.utils.network.HttpResponse;
import com.yihu.utils.network.HttpUtils;
import com.yihu.utils.security.MD5;
import com.yihu.jw.util.network.HttpResponse;
import com.yihu.jw.util.network.HttpUtils;
import com.yihu.jw.util.encrypt.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WxAccessTokenService.java

@ -8,7 +8,7 @@
//import com.yihu.jw.wechat.dict.WechatDao;
//import com.yihu.jw.wechat.dict.WxAccessTokenDao;
//import com.yihu.mysql.query.BaseJpaService;
//import com.yihu.utils.network.HttpUtils;
//import com.yihu.jw.util.network.HttpUtils;
//import org.json.JSONObject;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;

+ 22 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/config/Config.java

@ -0,0 +1,22 @@
package com.yihu.jw.basic.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
/**
 * @author Sand
 * @version 1.0
 * @created 2016.03.31 12:42
 */
@Configuration
public class Config {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

+ 1 - 1
svr/svr-basic/src/main/java/com/yihu/jw/basic/patient/controller/PatientEndPoint.java

@ -23,7 +23,7 @@ import com.yihu.jw.util.date.DateTimeUtil;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.util.common.LogService;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

+ 4 - 10
svr/svr-basic/src/main/java/com/yihu/jw/basic/patient/service/ArchiveRelationService.java

@ -151,21 +151,15 @@ public class ArchiveRelationService extends BaseJpaService<ArchiveRelation, XArc
        return archiveRelationDao.findInAndOutPatientCount();
    }
    public int getTodayInWarehouseCount() {
        Session session = entityManager.unwrap(Session.class);
    public Integer getTodayInWarehouseCount() {
        String sql = "select count(id) from Archive_Relation WHERE DATE_FORMAT(create_date,'%Y-%m-%d') = CURDATE()";
        SQLQuery query = session.createSQLQuery(sql);
        Object ob  = (query.list().get(0));
        int result = Integer.parseInt(ob.toString());
        Integer result = jdbcTemplate.queryForObject(sql,Integer.class);
        return result;
    }
    public int getDailyAdd() {
        Session session = entityManager.unwrap(Session.class);
    public Integer getDailyAdd() {
        String sql = "select count(id) from Archive_Relation WHERE identify_flag = 1 AND DATE_FORMAT(event_date,'%Y-%m-%d') = CURDATE()";
        SQLQuery query = session.createSQLQuery(sql);
        Object ob  = (query.list().get(0));
        int result = Integer.parseInt(ob.toString());
        Integer result = jdbcTemplate.queryForObject(sql,Integer.class);
        return result;
    }

+ 1 - 1
svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/controller/PortalFeedbackEndPoint.java

@ -8,7 +8,7 @@ import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.restmodel.ehr.portal.MPortalFeedback;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

+ 2 - 12
svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/controller/PortalSurveyQuestionAdminController.java

@ -18,17 +18,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
 * Created by zhangdan on 2018/4/17.
 */
@Controller
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "admin/surveyQuestion", description = "问题题库数据接口", tags = {"云门户-问卷调查"})
public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
@ -39,7 +36,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    private SurveyQuestionOptionService surveyQuestionOptionService;
    @RequestMapping(value = ServiceApi.SurveyAdminManage.GetSurveyQuestionList, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "问题列表数据")
    public Envelop searchQuestionList(
            @ApiParam(name = "title", value = "标题",defaultValue = "")
@ -56,7 +52,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.SurveyAdminManage.SaveSurveyQuestion, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "新增问题(可批量新增)")
    public Envelop addQuestions(@ApiParam(name = "jsonData", value = "新增json",defaultValue = "")
                                @RequestParam(value = "jsonData", required = true) String jsonData)throws Exception {
@ -66,7 +61,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    }
    @RequestMapping(value =ServiceApi.SurveyAdminManage.GetQuestionById, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "根据id获取单个问题")
    public Envelop getQuestion(@ApiParam(name = "id", value = "问题id",defaultValue = "1")
                               @RequestParam(value = "id", required = true) String id)throws Exception {
@ -83,7 +77,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.SurveyAdminManage.GetQuestionsByIds, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "根据ids获取多个问题")
    public ObjEnvelop getQuestions(@ApiParam(name = "ids", value = "问题ids",defaultValue = "1")
                              @RequestParam(value = "ids", required = true) String  ids)throws Exception {
@ -92,7 +85,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    }
    @RequestMapping(value = ServiceApi.SurveyAdminManage.DelQuestion, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "根据id删除单个问题")
    public Envelop delQuestion(@ApiParam(name = "id", value = "问题id",defaultValue = "1")
                              @RequestParam(value = "id", required = true) String id)throws Exception {
@ -101,7 +93,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    }
    @RequestMapping(value = ServiceApi.SurveyAdminManage.DelQuestions, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "批量删除")
    public Envelop delQuestions(@ApiParam(name = "ids", value = "问题ids",defaultValue = "1;2;3")
                              @RequestParam(value = "ids", required = true) String ids)throws Exception {
@ -113,7 +104,6 @@ public class PortalSurveyQuestionAdminController extends EnvelopRestEndpoint {
    }
    /*@RequestMapping(value = ServiceApi.SurveyAdminManage.updateQuestion, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "更新问题")
    public Result updQuestion(@ApiParam(name = "questionData", value = "问题json",defaultValue = "{}")
                               @RequestParam(value = "questionData", required = true) String questionData) {

+ 1 - 28
svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/controller/PortalSurveyTemplateAdminController.java

@ -3,7 +3,6 @@ package com.yihu.jw.basic.portal.controller;
import com.yihu.jw.basic.dict.service.SystemDictEntryService;
import com.yihu.jw.basic.dict.service.SystemDictService;
import com.yihu.jw.basic.portal.service.SurveyTemplateService;
import com.yihu.jw.entity.ehr.user.User;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.jw.restmodel.web.ListEnvelop;
@ -17,10 +16,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@ -31,7 +28,7 @@ import java.util.Map;
/**
 * Created by zhangdan on 2018/4/13.
 */
@Controller
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "survey", description = "问卷/满意度调查后台配置问题和答案", tags = {"云门户-问卷调查后台配置"})
public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
@ -44,25 +41,8 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    @Autowired
    private SystemDictEntryService systemDictEntryService;
    private HttpServletRequest request;
    /*//---问卷模板管理列表---
    @RequestMapping(value = "initial", method = RequestMethod.GET)
    public String initTeamList(){
        return "questionnaire/template/template_list";
    }
    //跳转到问题查看页
    @RequestMapping(value = "importQuestion", method = RequestMethod.GET)
    @ApiIgnore
    @ApiOperation(value = "跳转到问题查看页")
    public String importQuestion() {
        return "questionnaire/template/import_question";
    }*/
    @RequestMapping(value = ServiceApi.SurveyAdminManage.GetSurveyTemplateList, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "获取所有问卷模板列表", notes = "管理界面展示所有的模板问卷")
    public PageEnvelop list(
            @ApiParam(name = "title", value = "标题",defaultValue = "")
@ -99,7 +79,6 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.SurveyAdminManage.GetSurveyTemplateOptionsList, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "获取所有问题选项列表", notes = "管理界面展示所有的问题的选项")
    public PageEnvelop listOption(
            @ApiParam(name = "q", value = "标题",defaultValue = "")
@ -147,7 +126,6 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.SurveyAdminManage.GetTemplateLabel, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "获取问卷类型", notes = "获取所有问卷类型")
    public Envelop getTemplateLabel(@ApiParam(name = "phoneticCode", value = "拼音编码", required = true)
                                         @PathVariable(value = "phoneticCode") String phoneticCode){
@ -172,7 +150,6 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    //---保存标签---
    @RequestMapping(value = ServiceApi.SurveyAdminManage.SaveLabelInfo, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "保存标签", notes = "保存标签")
    public Envelop editLabel(@ApiParam(name = "模板id", value = "模板id",defaultValue = "0") @RequestParam(value = "templateId", required = true) String templateId,
                            @ApiParam(name = "标签JSON", value = "标签JSON",defaultValue = "") @RequestParam(value = "jsonData", required = true) String jsonData)throws Exception{
@ -181,7 +158,6 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    }
    @RequestMapping(value = ServiceApi.SurveyAdminManage.SaveTemplate, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "保存问卷模板", notes = "保存问卷模板")
    public Envelop saveTemplate(@ApiParam(name = "jsonData", value = "新增json",defaultValue = "") @RequestParam(value = "jsonData", required = true) String jsonData,
                               @ApiParam(name = "userId", value = "用户id",defaultValue = "") @RequestParam(value = "userId", required = false) String userId,
@ -192,7 +168,6 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.SurveyAdminManage.GetTemplateById, method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "根据id获取模板详情", notes = "根据id获取模板详情")
    public Envelop getTemplate(@ApiParam(name = "id", value = "模板id",defaultValue = "0") @RequestParam(value = "id", required = true) String id,
                              @ApiParam(name = "question", value = "是否加载问题",defaultValue = "0") @RequestParam(value = "question", required = false) String question,
@ -202,14 +177,12 @@ public class PortalSurveyTemplateAdminController extends EnvelopRestEndpoint {
    }
    @RequestMapping(value = "/template/title", method = RequestMethod.GET)
    @ResponseBody
    public Envelop getTemplate(@ApiParam(name = "title", value = "模板title",defaultValue = "")
                              @RequestParam(value = "title", required = true) String  title){
        return success(surveyTemplateService.findByTitle(title));
    }
    @RequestMapping(value = ServiceApi.SurveyAdminManage.DelTemplate, method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "根据id删除模板", notes = "根据id删除模板")
    public Envelop delete(@ApiParam(name = "模板ID", value = "模板ID",defaultValue = "0") @RequestParam(value = "templateId", required = true) String templateId)throws Exception{
        surveyTemplateService.deleteTemplate(Long.valueOf(templateId));

+ 2 - 2
svr/svr-basic/src/main/java/com/yihu/jw/basic/portal/service/PortalMessageRemindService.java

@ -6,7 +6,7 @@ import com.yihu.jw.entity.ehr.portal.ProtalMessageRemind;
import com.yihu.jw.mysql.model.DataList;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.mysql.service.DBQuery;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -96,7 +96,7 @@ public class PortalMessageRemindService extends BaseJpaService<ProtalMessageRemi
     * @return
     */
    public DataList listMessageRemindValue(String appId, String toUserId, String typeId, String type, int page, int size, String notifie) throws Exception {
        String date = DateUtil.getNowDate(DateUtil.DEFAULT_DATE_YMD_FORMAT);
        String date = DateUtil.getStringDateShort();
        String notifieSql = "";
        if (StringUtils.isNotEmpty(notifie)) {
            notifieSql = " AND p.notifie_flag = '" + notifie + "' ";

+ 1 - 1
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/controller/TjQuotaEndPoint.java

@ -15,7 +15,7 @@ import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.svrBasic.ApiVersion;
import com.yihu.jw.rm.svrBasic.ServiceApi;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

+ 1 - 1
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/service/TjQuotaLogService.java

@ -4,7 +4,7 @@ import com.yihu.jw.basic.hibernate.HibenateUtils;
import com.yihu.jw.basic.quota.dao.XTjQuotaLogRepository;
import com.yihu.jw.entity.ehr.quota.TjQuotaLog;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/service/TjQuotaService.java

@ -5,7 +5,7 @@ import com.yihu.jw.entity.ehr.quota.TjQuota;
import com.yihu.jw.entity.ehr.quota.TjQuotaDataSave;
import com.yihu.jw.entity.ehr.quota.TjQuotaDataSource;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.utils.date.DateUtil;
import com.yihu.jw.util.date.DateUtil;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

+ 215 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqChannelEndPoint.java

@ -0,0 +1,215 @@
package com.yihu.jw.basic.redis.controler;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.jw.basic.redis.pubsub.CustomMessageListenerAdapter;
import com.yihu.jw.basic.redis.pubsub.MessageCommonBiz;
import com.yihu.jw.basic.redis.service.RedisMqChannelService;
import com.yihu.jw.basic.redis.service.RedisMqMessageLogService;
import com.yihu.jw.basic.redis.service.RedisMqPublisherService;
import com.yihu.jw.basic.redis.service.RedisMqSubscriberService;
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
import com.yihu.jw.entity.ehr.redis.RedisMqMessageLog;
import com.yihu.jw.entity.ehr.redis.RedisMqPublisher;
import com.yihu.jw.entity.ehr.redis.RedisMqSubscriber;
import com.yihu.jw.restmodel.ehr.redis.MRedisCacheCategory;
import com.yihu.jw.restmodel.ehr.redis.MRedisMqChannel;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis消息队列 接口
 *
 * @author 张进军
 * @date 2017/11/10 11:45
 */
@RestController
@RequestMapping(value = ApiVersion.Version1_0)
@Api(description = "消息队列接口", tags = {"Redis消息发布订阅--消息队列接口"})
public class RedisMqChannelEndPoint extends EnvelopRestEndpoint {
    @Autowired
    private RedisMqChannelService redisMqChannelService;
    @Autowired
    private RedisMqMessageLogService redisMqMessageLogService;
    @Autowired
    private RedisMqSubscriberService redisMqSubscriberService;
    @Autowired
    private RedisMqPublisherService redisMqPublisherService;
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private RedisMessageListenerContainer redisMessageListenerContainer;
    @ApiOperation("根据ID获取消息队列")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.GetById, method = RequestMethod.GET)
    public Envelop getById(
            @ApiParam(name = "id", value = "主键", required = true)
            @PathVariable(value = "id") Integer id) {
        try {
            MRedisMqChannel mRedisMqChannel = convertToModel(redisMqChannelService.getById(id), MRedisMqChannel.class);
            return ObjEnvelop.getSuccess("成功获取消息队列",mRedisMqChannel);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("获取消息队列发生异常");
    }
    @ApiOperation(value = "根据条件获取消息队列")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.Search, method = RequestMethod.GET)
    public Envelop search(
            @ApiParam(name = "fields", value = "返回的字段,为空则返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "筛选条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size) {
        try {
            List<RedisMqChannel> redisMqChannelList = redisMqChannelService.search(fields, filters, sorts, page, size);
            long count = redisMqChannelService.getCount(filters);
            List<MRedisMqChannel> mRedisMqChannelList = (List<MRedisMqChannel>) convertToModels(redisMqChannelList, new ArrayList<MRedisMqChannel>(), MRedisMqChannel.class, fields);
            return PageEnvelop.getSuccessListWithPage("成功获取消息队列列表",mRedisMqChannelList,page,size,count);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("获取消息队列发生异常");
    }
    @ApiOperation("新增消息队列")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.Save, method = RequestMethod.POST)
    public Envelop add(
            @ApiParam(value = "消息队列JSON", required = true)
            @RequestBody String entityJson) {
        try {
            RedisMqChannel newEntity = objectMapper.readValue(entityJson, RedisMqChannel.class);
            newEntity.setDequeuedNum(0);
            newEntity.setEnqueuedNum(0);
            newEntity.setPublisherNum(0);
            newEntity.setSubscriberNum(0);
            newEntity = redisMqChannelService.save(newEntity);
            // 开启该订阅者的消息队列的消息监听
            String channel = newEntity.getChannel();
            CustomMessageListenerAdapter messageListener = MessageCommonBiz.newCustomMessageListenerAdapter(channel);
            redisMessageListenerContainer.addMessageListener(messageListener, new ChannelTopic(channel));
            MRedisCacheCategory mRedisCacheCategory = convertToModel(newEntity, MRedisCacheCategory.class);
            return ObjEnvelop.getSuccess("成功新增消息队列",mRedisCacheCategory);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("新增消息队列发生异常");
    }
    @ApiOperation("更新消息队列")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.Save, method = RequestMethod.PUT)
    public Envelop update(
            @ApiParam(value = "消息队列JSON", required = true)
            @RequestBody String entityJson) {
        try {
            RedisMqChannel updateEntity = objectMapper.readValue(entityJson, RedisMqChannel.class);
            updateEntity = redisMqChannelService.save(updateEntity);
            MRedisMqChannel mRedisMqChannel = convertToModel(updateEntity, MRedisMqChannel.class);
            return ObjEnvelop.getSuccess("成功更新消息队列",mRedisMqChannel);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("更新消息队列发生异常");
    }
    @ApiOperation("删除消息队列")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.Delete, method = RequestMethod.DELETE)
    public Envelop delete(
            @ApiParam(name = "id", value = "消息队列ID", required = true)
            @RequestParam(value = "id") Integer id) {
        RedisMqChannel redisMqChannel = redisMqChannelService.getById(id);
        String channel = redisMqChannel.getChannel();
        List<RedisMqMessageLog> messageLogList = redisMqMessageLogService.findByChannel(channel);
        if (messageLogList.size() != 0) {
            return failed("该消息队列存在订阅失败的消息,不能删除。");
        }
        List<RedisMqSubscriber> subscriberList = redisMqSubscriberService.findByChannel(channel);
        if (subscriberList.size() != 0) {
            return failed("该消息队列存在订阅者,不能删除。");
        }
        List<RedisMqPublisher> publisherList = redisMqPublisherService.findByChannel(channel);
        if (publisherList.size() != 0) {
            return failed("该消息队列存在发布者,不能删除。");
        }
        redisMqChannelService.delete(id);
        // 删除该消息队列的消息监听
        CustomMessageListenerAdapter messageListener = MessageCommonBiz.newCustomMessageListenerAdapter(channel);
        redisMessageListenerContainer.removeMessageListener(messageListener, new ChannelTopic(channel));
        return Envelop.getSuccess("删除成功");
    }
    @ApiOperation("验证消息队列编码是否唯一")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.IsUniqueChannel, method = RequestMethod.GET)
    public Envelop isUniqueChannel(
            @ApiParam(name = "id", value = "消息队列ID", required = true)
            @RequestParam(value = "id") Integer id,
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel) {
        try {
            boolean result = redisMqChannelService.isUniqueChannel(id, channel);
            if (!result) {
                return failed("该消息队列编码已被使用,请重新填写!");
            }
            return Envelop.getSuccess("编码是唯一");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("发生异常");
    }
    @ApiOperation("验证消息队列名称是否唯一")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.IsUniqueChannelName, method = RequestMethod.GET)
    public Envelop isUniqueChannelName(
            @ApiParam(name = "id", value = "消息队列ID", required = true)
            @RequestParam(value = "id") Integer id,
            @ApiParam(name = "channelName", value = "消息队列名称", required = true)
            @RequestParam(value = "channelName") String channelName) {
        try {
            boolean result = redisMqChannelService.isUniqueChannelName(id, channelName);
            if (!result) {
                return failed("该消息队列名称已被使用,请重新填写!");
            }
            return Envelop.getSuccess("队列名称是唯一");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("发生异常");
    }
    @ApiOperation("验证消息队列是否已存在")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.IsExist, method = RequestMethod.GET)
    public Envelop isExist(
            @ApiParam(name = "channel", value = "消息队列", required = true)
            @RequestParam(value = "channel") String channel) {
        return ObjEnvelop.getSuccess("验证成功",redisMqChannelService.isExist(channel));
    }
}

+ 43 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqOperationEndPoint.java

@ -0,0 +1,43 @@
package com.yihu.jw.basic.redis.controler;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.jw.basic.redis.service.RedisMqChannelService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Redis消息队列操作 接口
 *
 * @author 张进军
 * @date 2017/12/27 16:09
 */
@RestController
@RequestMapping(value = ApiVersion.Version1_0)
@Api(description = "消息队列操作接口", tags = {"Redis消息发布订阅--消息队列操作接口"})
public class RedisMqOperationEndPoint extends EnvelopRestEndpoint {
    @Autowired
    private RedisMqChannelService redisMqChannelService;
    @ApiOperation("发布消息")
    @RequestMapping(value = ServiceApi.Redis.MqChannel.SendMessage, method = RequestMethod.POST)
    public Envelop sendMessage(
            @ApiParam(name = "publisherAppId", value = "发布者应用ID", required = true)
            @RequestParam(value = "publisherAppId") String publisherAppId,
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel,
            @ApiParam(name = "message", value = "消息", required = true)
            @RequestParam(value = "message") String message) {
        return redisMqChannelService.sendMessage(publisherAppId, channel, message);
    }
}

+ 158 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqPublisherEndPoint.java

@ -0,0 +1,158 @@
package com.yihu.jw.basic.redis.controler;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.jw.basic.redis.service.RedisMqChannelService;
import com.yihu.jw.basic.redis.service.RedisMqPublisherService;
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
import com.yihu.jw.entity.ehr.redis.RedisMqPublisher;
import com.yihu.jw.restmodel.ehr.redis.MRedisMqPublisher;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis消息发布者 接口
 *
 * @author 张进军
 * @date 2017/11/20 09:35
 */
@RestController
@RequestMapping(value = ApiVersion.Version1_0)
@Api(description = "消息发布者接口", tags = {"Redis消息发布订阅--消息发布者接口"})
public class RedisMqPublisherEndPoint extends EnvelopRestEndpoint {
    @Autowired
    private RedisMqPublisherService redisMqPublisherService;
    @Autowired
    private RedisMqChannelService redisMqChannelService;
    @ApiOperation("根据ID获取消息发布者")
    @RequestMapping(value = ServiceApi.Redis.MqPublisher.GetById, method = RequestMethod.GET)
    public Envelop getById(
            @ApiParam(name = "id", value = "主键", required = true)
            @PathVariable(value = "id") Integer id) {
        try {
            MRedisMqPublisher mRedisMqPublisher = convertToModel(redisMqPublisherService.getById(id), MRedisMqPublisher.class);
            return ObjEnvelop.getSuccess("成功获取消息发布者",mRedisMqPublisher);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("获取消息发布者发生异常");
    }
    @ApiOperation(value = "根据条件获取消息发布者")
    @RequestMapping(value = ServiceApi.Redis.MqPublisher.Search, method = RequestMethod.GET)
    public Envelop search(
            @ApiParam(name = "fields", value = "返回的字段,为空则返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "筛选条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size) {
        try {
            List<RedisMqPublisher> list = redisMqPublisherService.search(fields, filters, sorts, page, size);
            long count = redisMqPublisherService.getCount(filters);
            List<MRedisMqPublisher> mList = (List<MRedisMqPublisher>) convertToModels(list, new ArrayList<MRedisMqPublisher>(), MRedisMqPublisher.class, fields);
            return PageEnvelop.getSuccessListWithPage("成功获取消息发布者列表",mList,page,size,count);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("获取消息发布者发生异常");
    }
    @ApiOperation("新增消息发布者")
    @RequestMapping(value = ServiceApi.Redis.MqPublisher.Save, method = RequestMethod.POST)
    public Envelop add(
            @ApiParam(value = "消息发布者JSON", required = true)
            @RequestBody String entityJson) {
        try {
            RedisMqPublisher newEntity = objectMapper.readValue(entityJson, RedisMqPublisher.class);
            newEntity = redisMqPublisherService.save(newEntity);
            // 累计发布者数
            RedisMqChannel channel = redisMqChannelService.findByChannel(newEntity.getChannel());
            channel.setPublisherNum(channel.getPublisherNum() + 1);
            redisMqChannelService.save(channel);
            MRedisMqPublisher mRedisMqPublisher = convertToModel(newEntity, MRedisMqPublisher.class);
            return ObjEnvelop.getSuccess("成功新增消息发布者",mRedisMqPublisher);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("新增消息发布者发生异常");
    }
    @ApiOperation("更新消息发布者")
    @RequestMapping(value = ServiceApi.Redis.MqPublisher.Save, method = RequestMethod.PUT)
    public Envelop update(
            @ApiParam(value = "消息发布者JSON", required = true)
            @RequestBody String entityJson) {
        try {
            RedisMqPublisher updateEntity = objectMapper.readValue(entityJson, RedisMqPublisher.class);
            updateEntity = redisMqPublisherService.save(updateEntity);
            MRedisMqPublisher mRedisMqPublisher = convertToModel(updateEntity, MRedisMqPublisher.class);
            return ObjEnvelop.getSuccess("成功更新消息发布者",mRedisMqPublisher);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("更新消息发布者发生异常");
    }
    @ApiOperation("删除消息发布者")
    @RequestMapping(value = ServiceApi.Redis.MqPublisher.Delete, method = RequestMethod.DELETE)
    public Envelop delete(
            @ApiParam(name = "id", value = "消息发布者ID", required = true)
            @RequestParam(value = "id") Integer id) {
        try {
            RedisMqPublisher publisher = redisMqPublisherService.getById(id);
            redisMqPublisherService.delete(id);
            // 扣减发布者数
            RedisMqChannel channel = redisMqChannelService.findByChannel(publisher.getChannel());
            channel.setPublisherNum(channel.getPublisherNum() - 1);
            redisMqChannelService.save(channel);
            return Envelop.getSuccess("成功删除消息发布者");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("删除消息发布者发生异常");
    }
    @ApiOperation("验证指定队列中发布者应用ID是否唯一")
    @RequestMapping(value = ServiceApi.Redis.MqPublisher.IsUniqueAppId, method = RequestMethod.GET)
    public Envelop isUniqueAppId(
            @ApiParam(name = "id", value = "消息订阅者ID", required = true)
            @RequestParam(value = "id") Integer id,
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel,
            @ApiParam(name = "appId", value = "发布者应用ID", required = true)
            @RequestParam(value = "appId") String appId) {
        try {
            boolean result = redisMqPublisherService.isUniqueAppId(id, channel, appId);
            if (!result) {
                return failed("该指定消息队列中订阅者应用ID已被使用,请重新填写!");
            }
            return Envelop.getSuccess("应用ID是唯一");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("发生异常");
    }
}

+ 215 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/RedisMqSubscriberEndPoint.java

@ -0,0 +1,215 @@
package com.yihu.jw.basic.redis.controler;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.jw.basic.redis.service.RedisMqChannelService;
import com.yihu.jw.basic.redis.service.RedisMqSubscriberService;
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
import com.yihu.jw.entity.ehr.redis.RedisMqSubscriber;
import com.yihu.jw.restmodel.ehr.redis.MRedisMqSubscriber;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
 * Redis消息订阅者 接口
 *
 * @author 张进军
 * @date 2017/11/13 15:14
 */
@RestController
@RequestMapping(value = ApiVersion.Version1_0)
@Api(description = "消息订阅者接口", tags = {"Redis消息发布订阅--消息订阅者接口"})
public class RedisMqSubscriberEndPoint extends EnvelopRestEndpoint {
    @Autowired
    private RedisMqSubscriberService redisMqSubscriberService;
    @Autowired
    private RedisMqChannelService redisMqChannelService;
    @Autowired
    private RedisMessageListenerContainer redisMessageListenerContainer;
    @ApiOperation("根据ID获取消息订阅者")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.GetById, method = RequestMethod.GET)
    public Envelop getById(
            @ApiParam(name = "id", value = "主键", required = true)
            @PathVariable(value = "id") Integer id) {
        try {
            MRedisMqSubscriber mRedisMqSubscriber = convertToModel(redisMqSubscriberService.getById(id), MRedisMqSubscriber.class);
            return ObjEnvelop.getSuccess("成功获取消息订阅者",mRedisMqSubscriber);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("获取消息订阅者发生异常");
    }
    @ApiOperation(value = "根据条件获取消息订阅者")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.Search, method = RequestMethod.GET)
    public Envelop search(
            @ApiParam(name = "fields", value = "返回的字段,为空则返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "筛选条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size) {
        try {
            List<RedisMqSubscriber> list = redisMqSubscriberService.search(fields, filters, sorts, page, size);
            long count = redisMqSubscriberService.getCount(filters);
            List<MRedisMqSubscriber> mList = (List<MRedisMqSubscriber>) convertToModels(list, new ArrayList<MRedisMqSubscriber>(), MRedisMqSubscriber.class, fields);
            return PageEnvelop.getSuccessListWithPage("成功获取消息订阅者列表",mList,page,size,count);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("获取消息订阅者发生异常");
    }
    @ApiOperation(value = "获取消息订阅者列表,不分页")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.Prefix, method = RequestMethod.GET)
    public Envelop getSubscriberList(
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件", defaultValue = "")
            @RequestParam(value = "filters") String filters) throws Exception {
        List<RedisMqSubscriber> subscriberList = redisMqSubscriberService.search(filters);
        List<MRedisMqSubscriber> list = convertToModels(subscriberList, new ArrayList<>(subscriberList.size()), MRedisMqSubscriber.class, "");
        return ListEnvelop.getSuccess("查询成功",list);
    }
    @ApiOperation("新增消息订阅者")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.Save, method = RequestMethod.POST)
    public Envelop add(
            @ApiParam(value = "消息订阅者JSON", required = true)
            @RequestBody String entityJson) {
        try {
            RedisMqSubscriber newEntity = objectMapper.readValue(entityJson, RedisMqSubscriber.class);
            newEntity = redisMqSubscriberService.save(newEntity);
            // 累计订阅者数
            RedisMqChannel channel = redisMqChannelService.findByChannel(newEntity.getChannel());
            channel.setSubscriberNum(channel.getSubscriberNum() + 1);
            redisMqChannelService.save(channel);
            MRedisMqSubscriber mRedisMqSubscriber = convertToModel(newEntity, MRedisMqSubscriber.class);
            return ObjEnvelop.getSuccess("成功新增消息订阅者",mRedisMqSubscriber);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("新增消息订阅者发生异常");
    }
    @ApiOperation("更新消息订阅者")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.Save, method = RequestMethod.PUT)
    public Envelop update(
            @ApiParam(value = "消息订阅者JSON", required = true)
            @RequestBody String entityJson) {
        try {
            RedisMqSubscriber updateEntity = objectMapper.readValue(entityJson, RedisMqSubscriber.class);
            updateEntity = redisMqSubscriberService.save(updateEntity);
            MRedisMqSubscriber mRedisMqSubscriber = convertToModel(updateEntity, MRedisMqSubscriber.class);
            return ObjEnvelop.getSuccess("成功更新消息订阅者",mRedisMqSubscriber);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("更新消息订阅者发生异常");
    }
    @ApiOperation("删除消息订阅者")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.Delete, method = RequestMethod.DELETE)
    public Envelop delete(
            @ApiParam(name = "id", value = "消息订阅者ID", required = true)
            @RequestParam(value = "id") Integer id) {
        try {
            RedisMqSubscriber subscriber = redisMqSubscriberService.getById(id);
            redisMqSubscriberService.delete(id);
            // 扣减订阅者数
            RedisMqChannel channel = redisMqChannelService.findByChannel(subscriber.getChannel());
            channel.setSubscriberNum(channel.getSubscriberNum() - 1);
            redisMqChannelService.save(channel);
            return Envelop.getSuccess("成功删除消息订阅者");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("删除消息订阅者发生异常");
    }
    @ApiOperation("验证指定消息队列中订阅者应用ID是否唯一")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.IsUniqueAppId, method = RequestMethod.GET)
    public Envelop isUniqueAppId(
            @ApiParam(name = "id", value = "消息订阅者ID", required = true)
            @RequestParam(value = "id") Integer id,
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel,
            @ApiParam(name = "appId", value = "消息订阅者应用ID", required = true)
            @RequestParam(value = "appId") String appId) {
        try {
            boolean result = redisMqSubscriberService.isUniqueAppId(id, channel, appId);
            if (!result) {
                return failed("该指定消息队列中订阅者应用ID已被使用,请重新填写!");
            }
            return Envelop.getSuccess("应用ID是唯一");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("发生异常:");
    }
    @ApiOperation("验证指定消息队列中订阅者服务地址是否唯一")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.IsUniqueSubscribedUrl, method = RequestMethod.GET)
    public Envelop isUniqueSubscribedUrl(
            @ApiParam(name = "id", value = "消息订阅者ID", required = true)
            @RequestParam(value = "id") Integer id,
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel,
            @ApiParam(name = "subscriberUrl", value = "消息订阅者服务地址", required = true)
            @RequestParam(value = "subscriberUrl") String subscriberUrl) {
        try {
            boolean result = redisMqSubscriberService.isUniqueSubscribedUrl(id, channel, subscriberUrl);
            if (!result) {
                return failed("该指定消息队列中订阅者服务地址已被使用,请重新填写!");
            }
            return Envelop.getSuccess("服务地址是唯一");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("发生异常:");
    }
    @ApiOperation("验证消息队列的订阅者服务地址是否存在")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.IsExist, method = RequestMethod.GET)
    public Envelop isExist(
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel,
            @ApiParam(name = "subscriber", value = "消息订阅者服务地址", required = true)
            @RequestParam(value = "subscriber") String subscriber) {
        return ObjEnvelop.getSuccess("验证成功",redisMqSubscriberService.isExist(channel, subscriber));
    }
    @ApiOperation("取消队列的订阅者")
    @RequestMapping(value = ServiceApi.Redis.MqSubscriber.Unsubscribe, method = RequestMethod.POST)
    public Envelop unsubscribe(
            @ApiParam(name = "channel", value = "消息队列编码", required = true)
            @RequestParam(value = "channel") String channel,
            @ApiParam(name = "subscriber", value = "消息订阅者服务地址", required = false)
            @RequestParam(value = "subscriber", required = false) String subscriber) {
        redisMqSubscriberService.unsubscribe(channel, subscriber);
        return Envelop.getSuccess("取消成功");
    }
}

+ 24 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqChannelDao.java

@ -0,0 +1,24 @@
package com.yihu.jw.basic.redis.dao;
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
/**
 * redis消息队列 DAO
 *
 * @author 张进军
 * @date 2017/11/10 11:45
 */
public interface RedisMqChannelDao extends JpaRepository<RedisMqChannel, Integer> {
    RedisMqChannel findByChannel(@Param("channel") String channel);
    @Query(" FROM RedisMqChannel rmc WHERE rmc.id <> :id AND rmc.channel = :channel ")
    RedisMqChannel isUniqueChannel(@Param("id") Integer id, @Param("channel") String channel);
    @Query(" FROM RedisMqChannel rmc WHERE rmc.id <> :id AND rmc.channelName = :channelName ")
    RedisMqChannel isUniqueChannelName(@Param("id") Integer id, @Param("channelName") String channelName);
}

+ 25 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqMessageLogDao.java

@ -0,0 +1,25 @@
package com.yihu.jw.basic.redis.dao;
import com.yihu.jw.entity.ehr.redis.RedisMqMessageLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * redis消息记录 DAO
 *
 * @author 张进军
 * @date 2017/11/10 11:45
 */
public interface RedisMqMessageLogDao extends JpaRepository<RedisMqMessageLog, String> {
    List<RedisMqMessageLog> findByChannel(@Param("channel") String channel);
    @Modifying
    @Query("update RedisMqMessageLog set status=:status where id=:id")
    void updateStatus(@Param("id") String id, @Param("status") Integer status);
}

+ 25 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqPublisherDao.java

@ -0,0 +1,25 @@
package com.yihu.jw.basic.redis.dao;
import com.yihu.jw.entity.ehr.redis.RedisMqPublisher;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * redis消息发布者 DAO
 *
 * @author 张进军
 * @date 2017/11/20 09:35
 */
public interface RedisMqPublisherDao extends JpaRepository<RedisMqPublisher, Integer> {
    List<RedisMqPublisher> findByChannel(@Param("channel") String channel);
    RedisMqPublisher findByChannelAndAppId(@Param("channel") String channel, @Param("appId") String appId);
    @Query(" FROM RedisMqPublisher rmp WHERE rmp.id <> :id AND rmp.channel = :channel AND rmp.appId = :appId ")
    RedisMqPublisher isUniqueAppId(@Param("id") Integer id, @Param("channel") String channel, @Param("appId") String appId);
}

+ 28 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/dao/RedisMqSubscriberDao.java

@ -0,0 +1,28 @@
package com.yihu.jw.basic.redis.dao;
import com.yihu.jw.entity.ehr.redis.RedisMqSubscriber;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * redis消息订阅者 DAO
 *
 * @author 张进军
 * @date 2017/11/10 11:45
 */
public interface RedisMqSubscriberDao extends JpaRepository<RedisMqSubscriber, Integer> {
    List<RedisMqSubscriber> findByChannel(@Param("channel") String channel);
    RedisMqSubscriber findByChannelAndAndSubscribedUrl(String channel, String subscribedUrl);
    @Query(" FROM RedisMqSubscriber rms WHERE rms.id <> :id AND rms.channel = :channel AND rms.appId = :appId ")
    RedisMqSubscriber isUniqueAppId(@Param("id") Integer id, @Param("channel") String channel, @Param("appId") String appId);
    @Query(" FROM RedisMqSubscriber rms WHERE rms.id <> :id AND rms.channel = :channel AND rms.subscribedUrl = :subscribedUrl ")
    RedisMqSubscriber isUniqueSubscribedUrl(@Param("id") Integer id, @Param("channel") String channel, @Param("subscribedUrl") String subscribedUrl);
}

+ 46 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/CustomMessageListenerAdapter.java

@ -0,0 +1,46 @@
package com.yihu.jw.basic.redis.pubsub;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
/**
 * 重写父类 MessageListenerAdapter 的 equals() 方法
 *
 * @author 张进军
 * @date 2017/11/16 17:33
 */
public class CustomMessageListenerAdapter extends MessageListenerAdapter {
    // 消息队列编码
    private String channel;
    public CustomMessageListenerAdapter(DefaultMessageDelegate delegate) {
        super.setDelegate(delegate);
        this.channel = super.getDelegate().toString();
    }
    public int hashCode() {
        return this.channel.hashCode();
    }
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (obj == null) {
            return false;
        } else if (!(obj instanceof CustomMessageListenerAdapter)) {
            return false;
        } else {
            CustomMessageListenerAdapter other = (CustomMessageListenerAdapter) obj;
            if (this.channel == null) {
                if (other.channel != null) {
                    return false;
                }
            } else if (!this.channel.equals(other.channel)) {
                return false;
            }
            return true;
        }
    }
}

+ 129 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/DefaultMessageDelegate.java

@ -0,0 +1,129 @@
package com.yihu.jw.basic.redis.pubsub;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.basic.redis.service.RedisMqSubscriberService;
import com.yihu.jw.entity.ehr.redis.RedisMqMessageLog;
import com.yihu.jw.entity.ehr.redis.RedisMqSubscriber;
import com.yihu.jw.profile.queue.RedisCollection;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * Redis 订阅发布的消息代理
 *
 * @author 张进军
 * @date 2017/11/3 10:51
 */
public class DefaultMessageDelegate implements MessageDelegate {
    private static final Logger logger = Logger.getLogger(DefaultMessageDelegate.class);
    @Resource
    RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private RedisMqSubscriberService redisMqSubscriberService;
    @Override
    public void handleMessage(String message, String channel) {
        try {
            Map<String, Object> messageMap = objectMapper.readValue(message, Map.class);
            String messageId = messageMap.get("messageId").toString();
            String publisherAppId = messageMap.get("publisherAppId").toString();
            String messageContent = messageMap.get("messageContent").toString();
            List<RedisMqSubscriber> subscriberList = redisMqSubscriberService.findByChannel(channel);
            if (subscriberList.size() == 0) {
                // 收集订阅成功的消息,定时任务里累计出列数
                RedisMqMessageLog messageLog = MessageCommonBiz.newMessageLog(channel, publisherAppId, messageContent);
                redisTemplate.opsForList().leftPush(RedisCollection.SUB_SUCCESSFUL_MESSAGES, objectMapper.writeValueAsString(messageLog));
            } else {
                // 遍历消息队列的订阅者,并推送消息
                for (RedisMqSubscriber subscriber : subscriberList) {
                    String subscribedUrl = subscriber.getSubscribedUrl();
                    try {
                        // 推送消息到指定服务地址
                        HttpHeaders headers = new HttpHeaders();
                        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
                        HttpEntity<String> entity = new HttpEntity<>(messageContent, headers);
                        restTemplate.postForObject(subscribedUrl, entity, String.class);
                        // 收集订阅成功的消息,定时任务里累计出列数
                        RedisMqMessageLog messageLog = MessageCommonBiz.newMessageLog(channel, publisherAppId, messageContent);
                        if (!StringUtils.isEmpty(messageId)) {
                            // 首次订阅失败,但重试订阅成功场合
                            messageLog.setId(messageId);
                        }
                        redisTemplate.opsForList().leftPush(RedisCollection.SUB_SUCCESSFUL_MESSAGES, objectMapper.writeValueAsString(messageLog));
                    } catch (Exception e) {
                        e.printStackTrace();
                        // 收集订阅失败的消息
                        RedisMqMessageLog messageLog = MessageCommonBiz.newMessageLog(channel, publisherAppId, messageContent);
                        messageLog.setErrorMsg(e.toString());
                        if (!StringUtils.isEmpty(messageId)) {
                            // 非头次订阅失败
                            messageLog.setId(messageId);
                            // 通过 -1 标记为非头次订阅失败,定时任务里累计更新失败次数。
                            messageLog.setFailedNum(-1);
                        }
                        redisTemplate.opsForList().leftPush(RedisCollection.SUB_FAILED_MESSAGES, objectMapper.writeValueAsString(messageLog));
                        break;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 消息队列编码
    private String channel;
    public DefaultMessageDelegate(String channel) {
        this.channel = channel;
    }
    public int hashCode() {
        return this.channel.hashCode();
    }
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (obj == null) {
            return false;
        } else if (!(obj instanceof DefaultMessageDelegate)) {
            return false;
        } else {
            DefaultMessageDelegate other = (DefaultMessageDelegate) obj;
            if (this.channel == null) {
                if (other.channel != null) {
                    return false;
                }
            } else if (!this.channel.equals(other.channel)) {
                return false;
            }
            return true;
        }
    }
    public String toString() {
        return this.channel;
    }
}

+ 46 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/MessageCommonBiz.java

@ -0,0 +1,46 @@
package com.yihu.jw.basic.redis.pubsub;
import com.yihu.jw.entity.ehr.redis.RedisMqMessageLog;
import com.yihu.jw.lang.SpringContext;
import com.yihu.jw.util.id.UuidUtil;
/**
 * 消息发布订阅共通业务方法
 *
 * @author 张进军
 * @date 2017/11/20 17:03
 */
public class MessageCommonBiz {
    /**
     *  实例化一个 RedisMqMessageLog
     * @param channel 消息队列编码
     * @param publisherAppId 发布者应用ID
     * @param message 要发布的消息
     * @return RedisMqMessageLog
     */
    public static RedisMqMessageLog newMessageLog(String channel, String publisherAppId, String message) {
        RedisMqMessageLog redisMqMessageLog = new RedisMqMessageLog();
        redisMqMessageLog.setId(UuidUtil.randomUUID());
        redisMqMessageLog.setChannel(channel);
        redisMqMessageLog.setPublisherAppId(publisherAppId);
        redisMqMessageLog.setMessage(message);
        redisMqMessageLog.setStatus(0);
        redisMqMessageLog.setFailedNum(0);
        return redisMqMessageLog;
    }
    /**
     *  实例化一个 CustomMessageListenerAdapter
     * @param channel 消息队列编码
     * @return CustomMessageListenerAdapter
     */
    public static CustomMessageListenerAdapter newCustomMessageListenerAdapter(String channel) {
        DefaultMessageDelegate defaultMessageDelegate = new DefaultMessageDelegate(channel);
        SpringContext.autowiredBean(defaultMessageDelegate);
        CustomMessageListenerAdapter messageListener = new CustomMessageListenerAdapter(defaultMessageDelegate);
        SpringContext.autowiredBean(messageListener);
        return messageListener;
    }
}

+ 13 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/MessageDelegate.java

@ -0,0 +1,13 @@
package com.yihu.jw.basic.redis.pubsub;
/**
 * Redis 订阅发布的消息代理接口
 *
 * @author 张进军
 * @date 2017/11/2 13:43
 */
public interface MessageDelegate {
    void handleMessage(String message, String channel);
}

+ 182 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/pubsub/PubSubMessageJob.java

@ -0,0 +1,182 @@
package com.yihu.jw.basic.redis.pubsub;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.basic.redis.service.RedisMqChannelService;
import com.yihu.jw.basic.redis.service.RedisMqMessageLogService;
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
import com.yihu.jw.entity.ehr.redis.RedisMqMessageLog;
import com.yihu.jw.profile.queue.RedisCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Map;
/**
 * 定时定量处理消息,包括:
 * - 发送消息。
 * - 重试订阅失败的消息。
 * - 处理订阅成功的消息。
 *
 * @author 张进军
 * @date 2018/5/7 14:01
 */
@Component
public class PubSubMessageJob {
    private Logger logger = LoggerFactory.getLogger(PubSubMessageJob.class);
    // 最大次数尝试重发订阅失败消息
    private final int maxFailedNum = 3;
    // 每次定时最多操作的消息数量
    private final int onceNum = 1000;
    @Autowired
    RedisMqChannelService redisMqChannelService;
    @Autowired
    RedisMqMessageLogService redisMqMessageLogService;
    @Resource
    RedisTemplate<String, Object> redisTemplate;
    @Autowired
    ObjectMapper objectMapper;
    /*
     * 发送消息
     */
    @Scheduled(initialDelay = 1000, fixedDelay = 5000)
    public void send() {
        try {
            int num = 0;
            while (true) {
                Object msgObj = redisTemplate.opsForList().rightPop(RedisCollection.PUB_WAITING_MESSAGES);
                if (msgObj == null) {
                    break;
                }
                Map<String, Object> messageMap = objectMapper.readValue(String.valueOf(msgObj), Map.class);
                String channel = messageMap.get("channel").toString();
                // 发布消息
                redisTemplate.convertAndSend(channel, objectMapper.writeValueAsString(messageMap));
                // 累计入列数
                RedisMqChannel afterChannel = updateChannelQueueNumber(channel, "Enqueued");
                num++;
                if (num == onceNum) {
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*
     * 重试订阅失败的消息
     */
    @Scheduled(initialDelay = 1000, fixedDelay = 5000)
    public void resend() {
        try {
            int num = 0;
            while (true) {
                Object msgObj = redisTemplate.opsForList().rightPop(RedisCollection.SUB_FAILED_MESSAGES);
                if (msgObj == null) {
                    break;
                }
                boolean valid = true;
                RedisMqMessageLog cacheMessageLog = objectMapper.readValue(String.valueOf(msgObj), RedisMqMessageLog.class);
                if (cacheMessageLog.getFailedNum() == 0) {
                    // 头次订阅失败,则保存到数据库中
                    cacheMessageLog.setFailedNum(1);
                    redisMqMessageLogService.save(cacheMessageLog);
                } else if (cacheMessageLog.getFailedNum() == -1) {
                    // 累计订阅失败次数
                    RedisMqMessageLog dbMessageLog = redisMqMessageLogService.getById(cacheMessageLog.getId());
                    if (dbMessageLog.getFailedNum() >= maxFailedNum) {
                        // 大于等于最大尝试失败数,则不再重试。
                        valid = false;
                    } else {
                        dbMessageLog.setFailedNum(dbMessageLog.getFailedNum() + 1);
                        dbMessageLog.setErrorMsg(cacheMessageLog.getErrorMsg());
                        redisMqMessageLogService.save(dbMessageLog);
                    }
                }
                if (valid) {
                    // 将消息加入到待发缓存集合中
                    redisMqChannelService.addToPubWaitingMessage(cacheMessageLog.getPublisherAppId(),
                            cacheMessageLog.getChannel(), cacheMessageLog.getMessage(), cacheMessageLog.getId());
                    num++;
                    if (num == onceNum) {
                        break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*
     * 处理订阅成功的消息。
     * 累计出列数、更新重试成功的订阅失败消息的状态。
     */
    @Scheduled(initialDelay = 1000, fixedDelay = 5000)
    public void update() {
        try {
            int num = 0;
            while (true) {
                Object msgObj = redisTemplate.opsForList().rightPop(RedisCollection.SUB_SUCCESSFUL_MESSAGES);
                if (msgObj == null) {
                    break;
                }
                RedisMqMessageLog cacheMessageLog = objectMapper.readValue(String.valueOf(msgObj), RedisMqMessageLog.class);
                RedisMqMessageLog dbMessageLog = redisMqMessageLogService.getById(cacheMessageLog.getId());
                if (dbMessageLog != null && dbMessageLog.getStatus() == 0) {
                    // 更新重试成功的订阅失败消息的状态
                    redisMqMessageLogService.updateStatus(cacheMessageLog.getId(), 1);
                }
                // 累计出列数
                RedisMqChannel afterChannel = updateChannelQueueNumber(cacheMessageLog.getChannel(), "Dequeued");
                num++;
                if (num == onceNum) {
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 累计 channel 的出入列数
     *
     * @param channel 队列编码
     * @param type    出入列类型标识符
     * @return RedisMqChannel
     */
    private synchronized RedisMqChannel updateChannelQueueNumber(String channel, String type) {
        RedisMqChannel mqChannelAfter = null;
        RedisMqChannel mqChannel = redisMqChannelService.findByChannel(channel);
        if ("Dequeued".equals(type)) {
            // 累计出列数
            mqChannel.setDequeuedNum(mqChannel.getDequeuedNum() + 1);
            mqChannelAfter = redisMqChannelService.save(mqChannel);
        } else if ("Enqueued".equals(type)) {
            // 累计入列数
            mqChannel.setEnqueuedNum(mqChannel.getEnqueuedNum() + 1);
            mqChannelAfter = redisMqChannelService.save(mqChannel);
        }
        return mqChannelAfter;
    }
}

+ 145 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqChannelService.java

@ -0,0 +1,145 @@
package com.yihu.jw.basic.redis.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.basic.redis.dao.RedisMqChannelDao;
import com.yihu.jw.basic.redis.dao.RedisMqPublisherDao;
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
import com.yihu.jw.entity.ehr.redis.RedisMqPublisher;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.profile.queue.RedisCollection;
import com.yihu.jw.restmodel.web.Envelop;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * redis消息队列 Service
 *
 * @author 张进军
 * @date 2017/11/10 11:45
 */
@Service
public class RedisMqChannelService extends BaseJpaService<RedisMqChannel, RedisMqChannelDao> {
    private static final Logger logger = Logger.getLogger(RedisMqChannelService.class);
    @Autowired
    RedisMqChannelDao redisMqChannelDao;
    @Autowired
    RedisMqPublisherDao redisMqPublisherDao;
    @Autowired
    RedisMqMessageLogService redisMqMessageLogService;
    @Autowired
    RedisMqChannelService redisMqChannelService;
    @Resource
    RedisTemplate<String, Object> redisTemplate;
    @Autowired
    ObjectMapper objectMapper;
    public RedisMqChannel getById(Integer id) {
        return redisMqChannelDao.getOne(id);
    }
    public RedisMqChannel findByChannel(String channel) {
        return redisMqChannelDao.findByChannel(channel);
    }
    @Transactional(readOnly = false)
    public RedisMqChannel save(RedisMqChannel redisMqChannel) {
        return redisMqChannelDao.save(redisMqChannel);
    }
    @Transactional(readOnly = false)
    public void delete(Integer id) {
        redisMqChannelDao.deleteById(id);
    }
    public Boolean isUniqueChannel(Integer id, String channel) {
        RedisMqChannel redisMqChannel = redisMqChannelDao.isUniqueChannel(id, channel);
        if (redisMqChannel == null) {
            return true;
        } else {
            return false;
        }
    }
    public Boolean isUniqueChannelName(Integer id, String channelName) {
        RedisMqChannel redisMqChannel = redisMqChannelDao.isUniqueChannelName(id, channelName);
        if (redisMqChannel == null) {
            return true;
        } else {
            return false;
        }
    }
    public Boolean isExist(String channel) {
        RedisMqChannel channels = redisMqChannelDao.findByChannel(channel);
        return channels != null;
    }
    /**
     * 发布消息
     *
     * @param publisherAppId 发布者应用ID
     * @param channel        消息队列编码
     * @param message        消息
     * @return Envelop
     */
    public Envelop sendMessage(String publisherAppId, String channel, String message) {
        Envelop envelop = new Envelop();
        try {
            // 判断消息队列是否注册
            RedisMqChannel redisMqChannel = redisMqChannelDao.findByChannel(channel);
            if (redisMqChannel == null) {
                envelop.setStatus(-1);
                envelop.setMessage("消息队列 " + channel + " 还未注册,需要先注册才能往队列发布消息。");
                return envelop;
            }
            // 判断队列是否绑定发布者
            RedisMqPublisher redisMqPublisher = redisMqPublisherDao.findByChannelAndAppId(channel, publisherAppId);
            if (redisMqPublisher == null) {
                envelop.setStatus(-1);
                envelop.setMessage("消息队列 " + channel + " 中没绑定过应用ID为 " + publisherAppId + " 的发布者,需要先绑定才能发布消息。");
                return envelop;
            }
            // 将消息加入到待发缓存集合中
            addToPubWaitingMessage(publisherAppId, channel, message, "");
        } catch (Exception e) {
            e.printStackTrace();
            envelop.setStatus(-1);
            envelop.setMessage("发布消息发生异常:" + e.getMessage());
        }
        return Envelop.getSuccess("发布成功");
    }
    /**
     * 将消息加入到待发缓存集合中
     *
     * @param publisherAppId 发布者应用ID
     * @param channel        消息队列编码
     * @param message        消息
     * @param messageId      消息ID,订阅失败重发时才有值,不然为空字符串,即首次发送必为空字符串。
     * @throws JsonProcessingException
     */
    public void addToPubWaitingMessage(String publisherAppId, String channel, String message, String messageId)
            throws JsonProcessingException {
        Map<String, Object> messageMap = new HashMap<>();
        messageMap.put("messageId", messageId);
        messageMap.put("channel", channel);
        messageMap.put("publisherAppId", publisherAppId);
        messageMap.put("messageContent", message);
        redisTemplate.opsForList().leftPush(RedisCollection.PUB_WAITING_MESSAGES, objectMapper.writeValueAsString(messageMap));
    }
}

+ 43 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqMessageLogService.java

@ -0,0 +1,43 @@
package com.yihu.jw.basic.redis.service;
import com.yihu.jw.basic.redis.dao.RedisMqMessageLogDao;
import com.yihu.jw.entity.ehr.redis.RedisMqMessageLog;
import com.yihu.jw.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * redis消息记录 Service
 *
 * @author 张进军
 * @date 2017/11/10 11:45
 */
@Service
@Transactional
public class RedisMqMessageLogService extends BaseJpaService<RedisMqMessageLog, RedisMqMessageLogDao> {
    @Autowired
    RedisMqMessageLogDao redisMqMessageLogDao;
    public RedisMqMessageLog getById(String id) {
        return redisMqMessageLogDao.getOne(id);
    }
    public List<RedisMqMessageLog> findByChannel(String channel) {
        return redisMqMessageLogDao.findByChannel(channel);
    }
    @Transactional(readOnly = false)
    public RedisMqMessageLog save(RedisMqMessageLog redisMqMessageLog) {
        return redisMqMessageLogDao.save(redisMqMessageLog);
    }
    @Transactional(readOnly = false)
    public void updateStatus(String id, Integer status) {
        redisMqMessageLogDao.updateStatus(id, status);
    }
}

+ 56 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqPublisherService.java

@ -0,0 +1,56 @@
package com.yihu.jw.basic.redis.service;
import com.yihu.jw.basic.redis.dao.RedisMqPublisherDao;
import com.yihu.jw.entity.ehr.redis.RedisMqPublisher;
import com.yihu.jw.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * redis消息发布者 Service
 *
 * @author 张进军
 * @date 2017/11/20 09:35
 */
@Service
@Transactional
public class RedisMqPublisherService extends BaseJpaService<RedisMqPublisher, RedisMqPublisherDao> {
    @Autowired
    RedisMqPublisherDao redisMqPublisherDao;
    public RedisMqPublisher getById(Integer id) {
        return redisMqPublisherDao.getOne(id);
    }
    public List<RedisMqPublisher> findByChannel(String channel) {
        return redisMqPublisherDao.findByChannel(channel);
    }
    public RedisMqPublisher findByChannelAndAppId(String channel, String appId) {
        return redisMqPublisherDao.findByChannelAndAppId(channel, appId);
    }
    @Transactional(readOnly = false)
    public RedisMqPublisher save(RedisMqPublisher redisMqChannel) {
        return redisMqPublisherDao.save(redisMqChannel);
    }
    @Transactional(readOnly = false)
    public void delete(Integer id) {
        redisMqPublisherDao.deleteById(id);
    }
    public Boolean isUniqueAppId(Integer id, String channel, String appId) {
        RedisMqPublisher redisMqPublisher = redisMqPublisherDao.isUniqueAppId(id, channel, appId);
        if (redisMqPublisher == null) {
            return true;
        } else {
            return false;
        }
    }
}

+ 0 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/service/RedisMqSubscriberService.java


Some files were not shown because too many files changed in this diff