Browse Source

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

humingfen 5 years ago
parent
commit
7c3ad8d8ce
97 changed files with 3115 additions and 5142 deletions
  1. 15 0
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/WlyyHospitalWorkRuleDao.java
  2. 179 94
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java
  3. 71 0
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/WorkTimeService.java
  4. 2 2
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java
  5. 598 0
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/XzzxEntranceService.java
  6. 36 36
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/YkyyEntranceService.java
  7. 62 27
      business/base-service/src/main/java/com/yihu/jw/internet/service/ykyy/YkyyInternetService.java
  8. 2 5
      business/base-service/src/main/java/com/yihu/jw/utils/ImgUtils.java
  9. 1 1
      business/es-service/src/main/java/com/yihu/jw/es/service/StatisticsEsService.java
  10. 24 2
      business/im-service/src/main/java/com/yihu/jw/im/service/ImService.java
  11. 29 0
      business/sms-service/src/main/java/com/yihu/jw/sms/service/YkyySMSService.java
  12. 378 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/client/SmsClient.java
  13. 53 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/GetMo.java
  14. 45 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/GetReport.java
  15. 41 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/QueryAccount.java
  16. 96 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/SendSms.java
  17. 109 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/SendVariantSms.java
  18. 57 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/util/HttpClient.java
  19. 29 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/util/MD5.java
  20. 30 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/GetTokenResp.java
  21. 44 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/QueryReq.java
  22. 64 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/ResultMsg.java
  23. 66 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/SmsReq.java
  24. 25 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/VariantParams.java
  25. 78 0
      business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/VariantSmsReq.java
  26. 5 4
      common/common-entity/src/main/java/com/yihu/jw/entity/IntegerIdentityEntity.java
  27. 4 3
      common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/BasePatientWechatDo.java
  28. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/doctor/WlyyDoctorWorkTimeDO.java
  29. 141 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyHospitalWorkRuleDO.java
  30. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/specialist/RehabilitationServiceItemDO.java
  31. 11 0
      common/common-entity/src/main/java/com/yihu/jw/entity/specialist/rehabilitation/RehabilitationDetailDO.java
  32. 3 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java
  33. 10 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/doctor/WlyyDoctorWorkTimeVO.java
  34. 10 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/specialist/PatientLabelVO.java
  35. 10 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/specialist/PatientRelationVO.java
  36. 20 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/specialist/PatientSignInfoVO.java
  37. 44 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/dao/patient/BasePatientMedicareCardDao.java
  38. 17 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/dao/patient/BasePatientWechatDao.java
  39. 152 6
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  40. 98 36
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthSsoService.java
  41. 119 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/RegisterService.java
  42. 52 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/service/TEST.java
  43. 1 1
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/http/HttpResponse.java
  44. 68 1
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/http/HttpUtils.java
  45. 30 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/XzzxCotroller.java
  46. 33 1
      svr/svr-internet-hospital-entrance/src/main/resources/application.yml
  47. 4 4
      svr/svr-internet-hospital-job/pom.xml
  48. 0 24
      svr/svr-internet-hospital-job/src/main/java/com/yihu/Application.java
  49. 0 58
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/ActiveMQConfig.java
  50. 0 11
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/MvcConfig.java
  51. 0 123
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/SwaggerConfig.java
  52. 0 54
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/async/AsyncConfig.java
  53. 0 104
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/es/ElasticFactory.java
  54. 0 54
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/es/ElastricSearchSave.java
  55. 0 25
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/quartz/JobFactory.java
  56. 0 56
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/quartz/SchedulerConfig.java
  57. 0 15
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/war/ServletInitializer.java
  58. 0 67
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/event/ApplicationEvent.java
  59. 0 253
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/Constant.java
  60. 0 125
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/DataUploadJob.java
  61. 0 106
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/InternetUpdateJob.java
  62. 0 30
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/PrescriptionOverdueJob.java
  63. 0 36
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/PrescriptionStatusUpdateJob.java
  64. 0 124
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/QuartzHelper.java
  65. 0 44
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload210Job.java
  66. 0 43
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload211Job.java
  67. 0 43
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload23Job.java
  68. 0 43
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload25Job.java
  69. 0 44
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload26Job.java
  70. 0 45
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload27Job.java
  71. 0 45
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload28Job.java
  72. 0 44
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload29Job.java
  73. 0 127
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/ykyy/YkyyDataUploadJob.java
  74. 0 17
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/job/JobConfigDao.java
  75. 0 26
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/job/QuartzJobConfigDao.java
  76. 0 11
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/job/QuartzJobLogDao.java
  77. 0 11
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/statistics/QuotaDao.java
  78. 0 13
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/statistics/WlyyQuotaResultDao.java
  79. 0 307
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/channel/PrescriptionStatusUpdateService.java
  80. 0 253
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/quota/JobService.java
  81. 0 927
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/DateUtil.java
  82. 0 208
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/SystemConf.java
  83. 0 54
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/http/IPInfoUtils.java
  84. 0 571
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/BaseController.java
  85. 0 63
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/UpPrescription.java
  86. 0 470
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/JobController.java
  87. 0 110
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/WlyyJobConfigVO.java
  88. 0 107
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/WlyyQuotaVO.java
  89. 22 3
      svr/svr-internet-hospital-job/src/main/resources/application.yml
  90. 1 1
      svr/svr-internet-hospital-job/src/main/resources/bootstrap.yml
  91. 2 1
      svr/svr-internet-hospital-job/src/main/resources/quartz.properties
  92. 49 1
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java
  93. 4 3
      svr/svr-internet-hospital/src/main/resources/application.yml
  94. 3 2
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/rehabilitation/RehabilitationManageController.java
  95. 4 0
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/dao/rehabilitation/RehabilitationDetailDao.java
  96. 25 2
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistService.java
  97. 21 15
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/rehabilitation/RehabilitationManageService.java

+ 15 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/WlyyHospitalWorkRuleDao.java

@ -0,0 +1,15 @@
package com.yihu.jw.hospital.prescription.dao;
import com.yihu.jw.entity.hospital.prescription.WlyyHospitalWorkRuleDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Trick on 2020/3/24.
 */
public interface WlyyHospitalWorkRuleDao extends PagingAndSortingRepository<WlyyHospitalWorkRuleDO, String>, JpaSpecificationExecutor<WlyyHospitalWorkRuleDO> {
    List<WlyyHospitalWorkRuleDO> findByHospital(String hospital);
}

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

@ -1250,7 +1250,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                outpatientDao.save(outpatientDO);
                //调用电子病历注册
                manageType =2;
                registDianziBingli(outPatientId,basePatientDO,manageType);
//                registDianziBingli(outpatientDO,basePatientDO,manageType,registerDO.getRegisterNo(),registerDO.getConNo());
                return res;
            }
        }
@ -1288,7 +1288,10 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            registerDO.setCreateTime(new Date());
            registerDO.setDate(DateUtil.dateToStr(new Date(),"yyyy-MM-dd"));
            patientRegisterDao.save(registerDO);
            
    
            //调用电子病历注册
            manageType = 1;//处理类型(1-新增 2-修改 3-删除) 必填
//            registDianziBingli(outpatientDO,basePatientDO,manageType,registerDO.getRegisterNo(),registerDO.getConNo());
            
        }else if("-2".equals(rsCode)){
@ -1316,11 +1319,12 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            registerDO.setDate(DateUtil.dateToStr(new Date(),"yyyy-MM-dd"));
            patientRegisterDao.save(registerDO);
        }
    
        manageType = 1;//处理类型(1-新增 2-修改 3-删除) 必填
            //调用电子病历注册
            manageType = 1;//处理类型(1-新增 2-修改 3-删除) 必填
//            registDianziBingli(outpatientDO,basePatientDO,manageType,registerDO.getRegisterNo(),registerDO.getConNo());
        }
    
        registDianziBingli(outPatientId,basePatientDO,manageType);
        
            //保存日志
@ -1337,93 +1341,168 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        return res;
    }
    
    public String registDianziBingli(String outPatientId,BasePatientDO basePatientDO,Integer manageType) throws Exception {
    public String registDianziBingli(WlyyOutpatientDO outpatientDO,BasePatientDO basePatientDO,Integer manageType,String RegisterSN,String registerCon) throws Exception {
    
        //调用电子病历接口注册居民信息
            String patientMappingCode =  patientMappingService.findHisPatNoByIdCard(basePatientDO.getIdcard());
            DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(outpatientDO.getDoctor(),outpatientDO.getHospital());
            Map<String,String> params = new HashedMap();
            params.put("type","PatientInfo");
            String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                    "<HtRequest >" +
                    "<PatientInfo>" +
                    "<RecordFlow>"+outPatientId+"</RecordFlow >" +
                    "<PID>"+patientMappingCode+"</PID>" +
                    "<InsuranceNo>"+basePatientDO.getIdcard()+"</InsuranceNo>" +
                    "<PatientName>"+basePatientDO.getName()+"</PatientName>" +
                    "<TmpFlag>正式</TmpFlag>" +
                    "<LastName>"+basePatientDO.getName().substring(1,basePatientDO.getName().length())+"</LastName>" +
                    "<FirstName>"+basePatientDO.getName().substring(0,1)+"</FirstName>" +
                    "<PY>"+ PinYinUtils.getUpEname(basePatientDO.getName())+"</PY>" +
                    "<WB></WB>" +
            
            String _xmlStr="<?xml version='1.0' encoding='UTF-8'?>" +
                    "<HtRequest>" +
                    "<OutRegister>" +
                    "<RecordFlow>"+outpatientDO.getId()+"</RecordFlow>" +
                    "<RegisterSN>"+RegisterSN+"</RegisterSN>" +
                    "<TreatDate>"+DateUtil.getStringDate("yyyyMMdd")+"</TreatDate>" +
                    "<RegisterDeptCode>"+outpatientDO.getDept()+"</RegisterDeptCode>" +
                    "<RegisterDeptName>"+outpatientDO.getDeptName()+"</RegisterDeptName>" +
                    "<RegisterDoctorID>"+doctorMappingDO.getMappingCode()+"</RegisterDoctorID>" +
                    "<RegisterDoctorName>"+doctorMappingDO.getDoctorName()+"</RegisterDoctorName>" +
                    "<DutyID></DutyID>" +
                    "<DutyName></DutyName>" +
                    "<OutPatientTime></OutPatientTime>" +
                    "<NumClassCode></NumClassCode>" +
                    "<NumClassName></NumClassName>" +
                    "<JoinGroupCode></JoinGroupCode>" +
                    "<JoinGroupName></JoinGroupName>" +
                    "<NumClassNO></NumClassNO>" +
                    "<AppointmentDateTime></AppointmentDateTime>" +
                    "<AppointSN></AppointSN>" +
                    "<Pid>"+patientMappingCode+"</Pid>" +
                    "<CardNO>"+outpatientDO.getCardNo()+"</CardNO>\n" +
                    "<PatientName>"+basePatientDO.getName()+"</PatientName>"+
                    "<SexCode>"+basePatientDO.getSex()+"</SexCode>";
            if(1 == basePatientDO.getSex()){
                xmlStr = xmlStr + "<Sex>男</Sex>";
            }else{
                xmlStr = xmlStr +  "<Sex>女</Sex>";
            }
        
            xmlStr = xmlStr +    "<DateOfBirth>"+DateUtil.dateToStrShort(IdCardUtil.getBirthdayForIdcard(basePatientDO.getIdcard()))+"</DateOfBirth>" +
                    "<TimeOfBirth></TimeOfBirth>" +
                    "<MarriageStatusCode></MarriageStatusCode>" +
                    "<MarriageStatus></MarriageStatus>" +
                    "<OccupationCode></OccupationCode>" +
                    "<Occupation></Occupation>" +
                    "<NationalityCode></NationalityCode>" +
                    "<Nationality></Nationality>" +
                    "<CountryCode>CN</CountryCode>" +
                    "<Country>中国</Country>" +
                    "<FormalSchoolingCode></FormalSchoolingCode>" +
                    "<FormalSchooling></FormalSchooling>" +
                    "<Religion></Religion>" +
                    "<BirthPlaceCode></BirthPlaceCode>" +
                    "<BirthPlace></BirthPlace>" +
                    "<NativePlaceCode></NativePlaceCode>" +
                    "<NativePlace></NativePlace>" +
                    "<BloodType></BloodType>" +
                    "<CertTypeCode>111</CertTypeCode>" +
                    "<CertType>身份证</CertType>" +
                    "<CertNo>"+basePatientDO.getIdcard()+"</CertNo>" +
                    "<PatientClassCode></PatientClassCode>" +
                    if(1 == basePatientDO.getSex()){
                        _xmlStr = _xmlStr + "<Sex>男</Sex>";
                    }else{
                        _xmlStr = _xmlStr +  "<Sex>女</Sex>";
                    }
                    _xmlStr = _xmlStr + "<Age>"+IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard())+"</Age>" +
                    "<AgeDesc>"+IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard())+"岁</AgeDesc>" +
                    "<PatientClass></PatientClass>" +
                    "<FeeTypeCode></FeeTypeCode>" +
                    "<FeeType></FeeType>" +
                    "<Company></Company>" +
                    "<PublicExpenseNo></PublicExpenseNo>" +
                    "<ContractUnitCode></ContractUnitCode> " +
                    "<ContractUnit></ContractUnit>" +
                    "<BusinessAddressCode></BusinessAddressCode>" +
                    "<BusinessAddress></BusinessAddress>" +
                    "<BusinessPostCode></BusinessPostCode>" +
                    "<BusinessPhone></BusinessPhone>" +
                    "<HomeAddressCode></HomeAddressCode>" +
                    "<HomeAddress></HomeAddress>" +
                    "<HomePostCode></HomePostCode>" +
                    "<MobilePhone></MobilePhone>" +
                    "<Contact></Contact>" +
                    "<RelationCode></RelationCode>" +
                    "<Relation></Relation>" +
                    "<ContactEmail></ContactEmail>" +
                    "<ContactMethod></ContactMethod>" +
                    "<VIPType></VIPType>" +
                    "<OperatorID></OperatorID>" +
                    "<Operator></Operator>" +
                    "<OperatorTime>0</OperatorTime>" +
                    "<Available></Available>" +
                    "<FeeTypeName></FeeTypeName>" +
                    "<MedicalInsuranceType></MedicalInsuranceType>" +
                    "<IsFirst>N</IsFirst>" +
                    "<RegisterDateTime>20200121</RegisterDateTime>" +
                    "<RegisterUserID>"+patientMappingCode+"</RegisterUserID>" +
                    "<RegisterUserName></RegisterUserName>" +
                    "<OutStatus>20</OutStatus>" +
                    "<ModifierID></ModifierID>" +
                    "<Modifier></Modifier>" +
                    "<ModifyTime></ModifyTime>" +
                    "<RetreatDateTime></RetreatDateTime>" +
                    "<RetreatUserID></RetreatUserID>" +
                    "<RetreatUserName></RetreatUserName>" +
                    "<PaymentMethodCode></PaymentMethodCode>" +
                    "<PaymentMethod></PaymentMethod>" +
                    "<RegisterFee></RegisterFee>" +
                    "<MedicalFee></MedicalFee>" +
                    "<OtherFee></OtherFee>" +
                    "<TotalFee></TotalFee>" +
                    "<MedicalFloor>N</MedicalFloor>" +
                    "<MedicalAddress></MedicalAddress>" +
                    "<LastDeptCode></LastDeptCode>" +
                    "<LastDeptName></LastDeptName>" +
                    "<LastDoctorID></LastDoctorID>" +
                    "<LastDoctorName></LastDoctorName>" +
                    "<LastTreatDateTime></LastTreatDateTime>" +
                    "<LastOpid></LastOpid>" +
                    "<NumTypeCode>0</NumTypeCode>" +
                    "<NumTypeName></NumTypeName>" +
                    "<RegisterSource>1</RegisterSource>" +
                    "<AcctNO></AcctNO>" +
                    "<IsAcct>N</IsAcct>" +
                    "<ManageType>"+manageType+"</ManageType>" +
                    "<InsuranceTypeCode></InsuranceTypeCode>" +
                    "<InsuranceType></InsuranceType>" +
                    "<RegisteredAddressCode></RegisteredAddressCode>" +
                    "<RegisteredAddress></RegisteredAddress>" +
                    "<ContactAddressCode></ContactAddressCode>" +
                    "<ContactAddress></ContactAddress>" +
                    "<RegisteredPostCode></RegisteredPostCode>" +
                    "<ContactPostcode></ContactPostcode>" +
                    "<BloodType></BloodType>" +
                    "<RhBloodType></RhBloodType>" +
                    "</PatientInfo>" +
                    "</HtRequest>";
                    "<Times>"+registerCon+"</Times>" +
                    "</OutRegister>" +
                    "<PatientInfo>" +
                    "<RecordFlow>"+outpatientDO.getId()+"</RecordFlow>" +
                    "<PID>"+patientMappingCode+"</PID></PatientInfo></HtRequest>";
            
            
//            String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
//                    "<HtRequest >" +
//                    "<PatientInfo>" +
//                    "<RecordFlow>"+outPatientId+"</RecordFlow >" +
//                    "<PID>"+patientMappingCode+"</PID>" +
//                    "<InsuranceNo>"+basePatientDO.getIdcard()+"</InsuranceNo>" +
//                    "<PatientName>"+basePatientDO.getName()+"</PatientName>" +
//                    "<TmpFlag>正式</TmpFlag>" +
//                    "<LastName>"+basePatientDO.getName().substring(1,basePatientDO.getName().length())+"</LastName>" +
//                    "<FirstName>"+basePatientDO.getName().substring(0,1)+"</FirstName>" +
//                    "<PY>"+ PinYinUtils.getUpEname(basePatientDO.getName())+"</PY>" +
//                    "<WB></WB>" +
//                    "<SexCode>"+basePatientDO.getSex()+"</SexCode>";
//            if(1 == basePatientDO.getSex()){
//                xmlStr = xmlStr + "<Sex>男</Sex>";
//            }else{
//                xmlStr = xmlStr +  "<Sex>女</Sex>";
//            }
//
//            xmlStr = xmlStr +    "<DateOfBirth>"+DateUtil.dateToStrShort(IdCardUtil.getBirthdayForIdcard(basePatientDO.getIdcard()))+"</DateOfBirth>" +
//                    "<TimeOfBirth></TimeOfBirth>" +
//                    "<MarriageStatusCode></MarriageStatusCode>" +
//                    "<MarriageStatus></MarriageStatus>" +
//                    "<OccupationCode></OccupationCode>" +
//                    "<Occupation></Occupation>" +
//                    "<NationalityCode></NationalityCode>" +
//                    "<Nationality></Nationality>" +
//                    "<CountryCode>CN</CountryCode>" +
//                    "<Country>中国</Country>" +
//                    "<FormalSchoolingCode></FormalSchoolingCode>" +
//                    "<FormalSchooling></FormalSchooling>" +
//                    "<Religion></Religion>" +
//                    "<BirthPlaceCode></BirthPlaceCode>" +
//                    "<BirthPlace></BirthPlace>" +
//                    "<NativePlaceCode></NativePlaceCode>" +
//                    "<NativePlace></NativePlace>" +
//                    "<BloodType></BloodType>" +
//                    "<CertTypeCode>111</CertTypeCode>" +
//                    "<CertType>身份证</CertType>" +
//                    "<CertNo>"+basePatientDO.getIdcard()+"</CertNo>" +
//                    "<PatientClassCode></PatientClassCode>" +
//                    "<PatientClass></PatientClass>" +
//                    "<FeeTypeCode></FeeTypeCode>" +
//                    "<FeeType></FeeType>" +
//                    "<Company></Company>" +
//                    "<PublicExpenseNo></PublicExpenseNo>" +
//                    "<ContractUnitCode></ContractUnitCode> " +
//                    "<ContractUnit></ContractUnit>" +
//                    "<BusinessAddressCode></BusinessAddressCode>" +
//                    "<BusinessAddress></BusinessAddress>" +
//                    "<BusinessPostCode></BusinessPostCode>" +
//                    "<BusinessPhone></BusinessPhone>" +
//                    "<HomeAddressCode></HomeAddressCode>" +
//                    "<HomeAddress></HomeAddress>" +
//                    "<HomePostCode></HomePostCode>" +
//                    "<MobilePhone></MobilePhone>" +
//                    "<Contact></Contact>" +
//                    "<RelationCode></RelationCode>" +
//                    "<Relation></Relation>" +
//                    "<ContactEmail></ContactEmail>" +
//                    "<ContactMethod></ContactMethod>" +
//                    "<VIPType></VIPType>" +
//                    "<OperatorID></OperatorID>" +
//                    "<Operator></Operator>" +
//                    "<OperatorTime>0</OperatorTime>" +
//                    "<Available></Available>" +
//                    "<ManageType>"+manageType+"</ManageType>" +
//                    "<InsuranceTypeCode></InsuranceTypeCode>" +
//                    "<InsuranceType></InsuranceType>" +
//                    "<RegisteredAddressCode></RegisteredAddressCode>" +
//                    "<RegisteredAddress></RegisteredAddress>" +
//                    "<ContactAddressCode></ContactAddressCode>" +
//                    "<ContactAddress></ContactAddress>" +
//                    "<RegisteredPostCode></RegisteredPostCode>" +
//                    "<ContactPostcode></ContactPostcode>" +
//                    "<BloodType></BloodType>" +
//                    "<RhBloodType></RhBloodType>" +
//                    "</PatientInfo>" +
//                    "</HtRequest>";
            String returnValue = "";
            params.put("xmlStr",xmlStr);
            params.put("xmlStr",_xmlStr);
        
            returnValue = WebserviceUtil.post("http://192.10.33.34:9080/HtMzWebService/services/Manage",
                    "http://business.htemr.haitaiinc.com",
@ -2387,6 +2466,12 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        Map<String,Object> rs = new HashedMap();
        if(doctorDO!=null){
            rs.put("doctor",doctor);
            rs.put("doctorSex",doctorDO.getSex());
            if(StringUtils.isNoneBlank(doctorDO.getIdcard())){
                rs.put("doctorAge",IdCardUtil.getAgeForIdcard(doctorDO.getIdcard()));
            }else{
                rs.put("doctorAge","");
            }
            rs.put("doctor",doctorDO.getName());
            rs.put("jobTitleCode",doctorDO.getJobTitleCode());
            rs.put("jobTitleName",doctorDO.getJobTitleName());
@ -2438,21 +2523,21 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                rs.put("registerCount",0);
            }
            //医生问诊量
            List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByDoctorAndStatus(doctor,"2");
            if(wlyyOutpatientDOs!=null&&wlyyOutpatientDOs.size()>0){
                rs.put("outpatientCount",wlyyOutpatientDOs.size());
            }else{
                rs.put("outpatientCount",0);
            }
//            List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByDoctorAndStatus(doctor,"2");
//            if(wlyyOutpatientDOs!=null&&wlyyOutpatientDOs.size()>0){
//                rs.put("outpatientCount",wlyyOutpatientDOs.size());
//            }else{
//                rs.put("outpatientCount",0);
//            }
            //协同门诊量
            Integer coordinationCout = outpatientDao.countByDoctorAndStatusAndOutpatientType(doctor,"2","2");
            rs.put("coordinationCout",coordinationCout);
//            Integer coordinationCout = outpatientDao.countByDoctorAndStatusAndOutpatientType(doctor,"2","2");
//            rs.put("coordinationCout",coordinationCout);
            if(StringUtils.isNotBlank(withWork)&&"1".equals(withWork)){
                List<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(doctor);
                rs.put("workTime",times);
            }
//            if(StringUtils.isNotBlank(withWork)&&"1".equals(withWork)){
//                List<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(doctor);
//                rs.put("workTime",times);
//            }
    
            //专家咨询
            String zjCountsql = "SELECT id FROM wlyy_consult_team WHERE doctor='"+doctor+"' AND (type=1 OR type=15)";

+ 71 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/WorkTimeService.java

@ -0,0 +1,71 @@
package com.yihu.jw.hospital.prescription.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.entity.hospital.prescription.WlyyHospitalWorkRuleDO;
import com.yihu.jw.hospital.prescription.dao.WlyyHospitalWorkRuleDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * Created by Trick on 2020/3/24.
 */
@Service
@Transactional
public class WorkTimeService {
    private static final Logger logger = LoggerFactory.getLogger(WorkTimeService.class);
    @Autowired
    private WlyyHospitalWorkRuleDao wlyyHospitalWorkRuleDao;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 保存排班规则
     * @param workTimeRuleJson
     * @return
     * @throws Exception
     */
    public WlyyHospitalWorkRuleDO saveWorkTimeRule(String workTimeRuleJson)throws Exception{
        WlyyHospitalWorkRuleDO ruleDO = objectMapper.readValue(workTimeRuleJson,WlyyHospitalWorkRuleDO.class);
        List<WlyyHospitalWorkRuleDO> orgRules = wlyyHospitalWorkRuleDao.findByHospital(ruleDO.getHospital());
        if(orgRules!=null&&orgRules.size()>0){
            wlyyHospitalWorkRuleDao.delete(orgRules);
        }
        wlyyHospitalWorkRuleDao.save(ruleDO);
        return ruleDO;
    }
    /**
     * 获取医院排班规则
     * @param hospital
     * @return
     */
    public WlyyHospitalWorkRuleDO findWorkTimeRule(String hospital){
        List<WlyyHospitalWorkRuleDO> orgRules = wlyyHospitalWorkRuleDao.findByHospital(hospital);
        return orgRules.get(0);
    }
//    public static void main(String ag[]){
//
//        Date start = DateUtil.stringToDate("2020-03-24 08:00:00","yyyy-MM-dd HH:mm:ss");
//
//        Date end = DateUtil.stringToDate("2020-03-24 12:00:00","yyyy-MM-dd HH:mm:ss");
//
//        Long total =end.getTime()-start.getTime();
//
//        Long jg = total/100;
//
//        start.setTime(start.getTime()+jg);
//
//        System.out.println(DateUtil.dateToStr(start,"yyyy-MM-dd HH:mm:ss"));
//    }
}

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

@ -1319,8 +1319,8 @@ public class EntranceService {
//        Object errorCode = ((net.sf.json.JSONObject) json).get("error_code");
        //由于新建档的居民没有银医通,数据没办法同步。调用接口,暂时不判断返回结果,由诊间支付统一推送消息让居民支付
        JSON json2 = xmlSerializer.read(((net.sf.json.JSONObject) json).get("response").toString());
        System.out.println("银医通下载response:" + json2.toString(1));
//        JSON json2 = xmlSerializer.read(((net.sf.json.JSONObject) json).get("response").toString());
//        System.out.println("银医通下载response:" + json2.toString(1));
        jsonObject.element("code", "1");
        jsonObject.element("obj", json);
//        if ("ok".equals(errorCode)) {

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

@ -0,0 +1,598 @@
package com.yihu.jw.hospital.prescription.service.entrance;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.utils.WebserviceUtil;
import net.sf.json.xml.XMLSerializer;
import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
import java.util.Map;
/**
 * 心脏中心内网his对接服务
 * Created by Trick on 2020/3/18.
 */
@Service
@Transactional
public class XzzxEntranceService {
    private static Logger logger = LoggerFactory.getLogger(XzzxEntranceService.class);
    @Autowired
    private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
    public String getXzzxWebServiceInfo(String api, Map<String,String> params)throws Exception{
        List<WlyyHospitalSysDictDO> list =  wlyyHospitalSysDictDao.findByDictName("xzzxWebService");
        String url = list.get(0).getDictCode();
        logger.info("url"+url);
        List<WlyyHospitalSysDictDO> xzzxNamespaces =  wlyyHospitalSysDictDao.findByDictName("xzzxNamespace");
        String xzzxNamespace = xzzxNamespaces.get(0).getDictCode();
        logger.info("xzzxNamespace",xzzxNamespace);
        return WebserviceUtil.post(url,xzzxNamespace,api,params);
    }
    /**
     * 获取部门信息
     * @return
     */
    public String getDeptInfo()throws Exception{
        String api = "GetDeptInfo";
        String key ="bvvsf3JA0mUXMU+mVnMaOQ==";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root></root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getDeptInfo params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params);
        return "";
    }
    public static void main(String ag[]){
        String xml ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>" +
                "    <returnContents>" +
                "        <returnContent>" +
                "            <code>20100</code>" +
                "            <name>后勤部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>20200</code>" +
                "            <name>消毒中转站</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30100</code>" +
                "            <name>心内科门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30200</code>" +
                "            <name>心外科门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30300</code>" +
                "            <name>客户服务部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30400</code>" +
                "            <name>超声科门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>3140000</code>" +
                "            <name>计算机中心</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31500</code>" +
                "            <name>人事部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31600</code>" +
                "            <name>护理部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31700</code>" +
                "            <name>医保办</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31800</code>" +
                "            <name>财务科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>3180001</code>" +
                "            <name>门诊收费处</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>3180002</code>" +
                "            <name>住院收费处</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31900</code>" +
                "            <name>医务科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32000</code>" +
                "            <name>院长室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32100</code>" +
                "            <name>中心办公室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32200</code>" +
                "            <name>院感科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32300</code>" +
                "            <name>保障保卫部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32400</code>" +
                "            <name>全院</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32500</code>" +
                "            <name>综合办公室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32600</code>" +
                "            <name>科教部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010001</code>" +
                "            <name>心内一区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010002</code>" +
                "            <name>心内二区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010003</code>" +
                "            <name>CCU</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010004</code>" +
                "            <name>心内三区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010005</code>" +
                "            <name>心内四区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010006</code>" +
                "            <name>特需病区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40200</code>" +
                "            <name>心内三区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4020001</code>" +
                "            <name>心外病区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4020002</code>" +
                "            <name>ICU</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40300</code>" +
                "            <name>心外手术室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4030001</code>" +
                "            <name>小儿心脏科/综合科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40400</code>" +
                "            <name>心内导管室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4040001</code>" +
                "            <name>急诊科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40500</code>" +
                "            <name>CCU病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40600</code>" +
                "            <name>ICU病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40700</code>" +
                "            <name>心内一区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40800</code>" +
                "            <name>心内二区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40900</code>" +
                "            <name>心外病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41000</code>" +
                "            <name>胸痛中心</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41100</code>" +
                "            <name>起搏器门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41200</code>" +
                "            <name>麻醉科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41300</code>" +
                "            <name>急诊门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41400</code>" +
                "            <name>心内四区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41500</code>" +
                "            <name>小儿心脏科/综合科病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41600</code>" +
                "            <name>急诊科病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41700</code>" +
                "            <name>心脏康复门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41800</code>" +
                "            <name>先天性心脏病门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41900</code>" +
                "            <name>心衰专病门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>42000</code>" +
                "            <name>特需病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>42100</code>" +
                "            <name>体检门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>50100</code>" +
                "            <name>药房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>50200</code>" +
                "            <name>药库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>50300</code>" +
                "            <name>静配药房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60100</code>" +
                "            <name>影像科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60200</code>" +
                "            <name>检验科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60300</code>" +
                "            <name>心脏彩超室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60400</code>" +
                "            <name>心功能室(心脏中心)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60500</code>" +
                "            <name>输血科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60600</code>" +
                "            <name>内窥镜室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60700</code>" +
                "            <name>肺功能室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60800</code>" +
                "            <name>血透室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60900</code>" +
                "            <name>检验科(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61000</code>" +
                "            <name>高压氧室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61100</code>" +
                "            <name>脑电图室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61200</code>" +
                "            <name>核医学科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61300</code>" +
                "            <name>放射科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61400</code>" +
                "            <name>CT室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61500</code>" +
                "            <name>核磁共振科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61600</code>" +
                "            <name>病理科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61700</code>" +
                "            <name>心功能室(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61800</code>" +
                "            <name>B超室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61900</code>" +
                "            <name>药学部(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62000</code>" +
                "            <name>急诊ICU(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62100</code>" +
                "            <name>中心ICU(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62200</code>" +
                "            <name>心电图室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62300</code>" +
                "            <name>心脏彩超室(心脏中心)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62400</code>" +
                "            <name>检验部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62500</code>" +
                "            <name>体检部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62600</code>" +
                "            <name>心功能室(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62700</code>" +
                "            <name>心脏彩超室(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62800</code>" +
                "            <name>输血科(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62900</code>" +
                "            <name>院外诊疗</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63000</code>" +
                "            <name>血透(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63100</code>" +
                "            <name>放射科(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63200</code>" +
                "            <name>运动心肺室(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63300</code>" +
                "            <name>核医学科(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63400</code>" +
                "            <name>CT(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63500</code>" +
                "            <name>MR(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>70100</code>" +
                "            <name>病案室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>70200</code>" +
                "            <name>离职人员</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>80100</code>" +
                "            <name>心内实验室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>80200</code>" +
                "            <name>临床试验组</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90100</code>" +
                "            <name>设备科仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90200</code>" +
                "            <name>总务仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90300</code>" +
                "            <name>高值仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90400</code>" +
                "            <name>科研仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90500</code>" +
                "            <name>软件仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90600</code>" +
                "            <name>五金仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90700</code>" +
                "            <name>信息科仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90800</code>" +
                "            <name>报废仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90900</code>" +
                "            <name>报损仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "    </returnContents>" +
                "</root>";
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        JSONObject jsonObject = JSON.parseObject(json);
    }
}

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

@ -349,42 +349,42 @@ public class YkyyEntranceService {
                " AND c.BRID in  ("+brids+") order by c.BRID DESC";
        Map<String,Object> params = new HashedMap();
        params.put("sql",sql);
//        HttpResponse response = HttpUtils.doGet(url,params);
//        String content = response.getContent();
//        logger.info("response:"+content);
//        JSONObject rs = JSON.parseObject(content);
//        Integer status = rs.getInteger("status");
//        Map<String,String> map = new HashedMap();
//        if(status!=null&&status == 200){
//            JSONArray array = rs.getJSONArray("detailModelList");
//            logger.info("detailModelList size:"+array.size());
//            if(array!=null&&array.size()>0) {
//                for(int i= 0;i<array.size();i++){
//                    JSONObject cfxx = array.getJSONObject(i);
//                    String brid = cfxx.getString("BRID");
//                    BasePatientDO patientDO = findPatientByMapingCode(brid);
//                    if(patientDO!=null){
//                        if(map.get(brid)==null){
//                            map.put(brid,brid);
//                            logger.info("1.创建门诊记录");
//                            //1.创建门诊记录
//                            WlyyOutpatientDO outpatientDO = saveOutPatient(cfxx,hospitalDO,patientDO,doctor,startDate);
//
//                            logger.info("2.生成处方记录");
//                            //2.生成处方记录
//                            savePrescription(outpatientDO,cfxx,startDate);
//
//                            logger.info("3.医生评价");
//                            //3.医生评价
//                            saveDoctorScore(outpatientDO);
//
//                        }
//                    }else{
//                        logger.info("brid:"+brid+" mapping not exist");
//                    }
//                }
//            }
//        }
        HttpResponse response = HttpUtils.doGet(url,params);
        String content = response.getContent();
        logger.info("response:"+content);
        JSONObject rs = JSON.parseObject(content);
        Integer status = rs.getInteger("status");
        Map<String,String> map = new HashedMap();
        if(status!=null&&status == 200){
            JSONArray array = rs.getJSONArray("detailModelList");
            logger.info("detailModelList size:"+array.size());
            if(array!=null&&array.size()>0) {
                for(int i= 0;i<array.size();i++){
                    JSONObject cfxx = array.getJSONObject(i);
                    String brid = cfxx.getString("BRID");
                    BasePatientDO patientDO = findPatientByMapingCode(brid);
                    if(patientDO!=null){
                        if(map.get(brid)==null){
                            map.put(brid,brid);
                            logger.info("1.创建门诊记录");
                            //1.创建门诊记录
                            WlyyOutpatientDO outpatientDO = saveOutPatient(cfxx,hospitalDO,patientDO,doctor,startDate);
                            logger.info("2.生成处方记录");
                            //2.生成处方记录
                            savePrescription(outpatientDO,cfxx,startDate);
                            logger.info("3.医生评价");
                            //3.医生评价
                            saveDoctorScore(outpatientDO);
                        }
                    }else{
                        logger.info("brid:"+brid+" mapping not exist");
                    }
                }
            }
        }
        return "ok";
    }

+ 62 - 27
business/base-service/src/main/java/com/yihu/jw/internet/service/ykyy/YkyyInternetService.java

@ -63,7 +63,6 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
    static String psw = "7j39c7";
    static String appId = "ws022";
    static String AesEncodeKey = "834irjf3jd39rh2m";
    //http://fjhlw.bsoft.com.cn:18081/micc/wsapi/1.0?
    static String urlString = "http://10.120.102.202:18081/micc/wsapi/1.0?wsdl";  // 正式线路径
 //   static String urlString = "http://fjhlw.bsoft.com.cn:18081/micc/wsapi/1.0?wsdl";   // 测试线路径
    static String method = "execute";
@ -91,13 +90,13 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
        proxy.setEndpoint(url);
        Wsapi wsapi = proxy.getWsapi();
        //logger.info(JSONUtils.toString(new String[] {token, params.toString()}));
//        logger.info("postToInter:"+JSONUtils.toString(new String[] {token, params.toString()}));
        String encryptParams = AESUtils.encrypt(JSONUtils.toString(new String[] {token, params.toString()}), AesEncodeKey);
        String result = wsapi.invoke(appId, "", api, method, encryptParams);
        String deResult = AESUtils.decrypt(result, AesEncodeKey);
        logger.info(JSONUtils.toString(deResult));
        logger.info("postToInter:"+JSONUtils.toString(deResult));
        return deResult;
    }
@ -113,9 +112,18 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
        jb.put("cd_user", userName);
        jb.put("pwd_user", psw);
        logger.info("url :"+url);
        logger.info("jb :"+jb.toString());
        String encryptParams = AESUtils.encrypt(JSONUtils.toString(new String[] { jb.toString() }), AesEncodeKey);
        String res = wsapi.invoke(appId, "", api, method, encryptParams);
        logger.info("appId :"+appId);
        logger.info("method :"+method);
        logger.info("encryptParams :"+encryptParams);
        String deResult = AESUtils.decrypt(res, AesEncodeKey);
        logger.info("AesEncodeKey :"+AesEncodeKey);
        JSONObject resJson = (JSONObject) JSONObject.parse(deResult);
        if("200".equals(resJson.get("msg").toString())) {
@ -147,10 +155,15 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
        jb.put("hospital_phone", "0592-2112111");
        jb.put("hospital_img","");
        jb.put("bus_lic", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"yyzz.jpg"));
        jb.put("corp_idcord_head", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"a.jpg"));
        jb.put("corp_idcord_tail", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"b.jpg"));
        jb.put("pra_lic", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"zyxkz.jpg"));
//        jb.put("bus_lic", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"yyzz.jpg"));
//        jb.put("corp_idcord_head", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"a.jpg"));
//        jb.put("corp_idcord_tail", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"b.jpg"));
//        jb.put("pra_lic", ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"zyxkz.jpg"));
        jb.put("bus_lic", null);
        jb.put("corp_idcord_head", null);
        jb.put("corp_idcord_tail", null);
        jb.put("pra_lic", null);
        jb.put("secu_level","3");
        jb.put("secu_level_cert",ImgUtils.getImageStr(imgPath+"hospital"+File.separator+"dbtp.jpg"));
@ -309,7 +322,11 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                "  from base_doctor a " +
                "      ,base_doctor_hospital b" +
                " where a.id = b.doctor_code" +
                "   and b.dept_code is NOT NULL ";
                "   AND b.dept_code is NOT NULL " +
                "   AND a.job_title_code is NOT NULL " +
                "   AND a.fzrq IS NOT NULL " +
                "   AND a.cert_no IS NOT NULL " +
                "   AND a.prac_no IS NOT NULL ";
        if(StringUtils.isNotBlank(keyId)){
            sql =  sql +  "  and a.id = '" + keyId + "' ";
@ -325,7 +342,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
            Boolean errorFlag = false;
            JSONObject jb = new JSONObject();
            try {
                String[] dept = depToSubject(jb.getString("dept_code"));
                String[] dept = depToSubject(info.get("dept_code").toString());
                // 中山医院 监管平台  职务字典强转
                String[] dutyInfo = classToduty(info.get("job_title_code").toString());
@ -341,7 +358,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                jb.put("belong_dept",jb.getString("dept_code"));
                jb.put("belong_dept_name", jb.getString("dept_name"));
                jb.put("doo_tel", info.get("mobile")== null ? "":info.get("mobile"));
                jb.put("title_rec_date", info.get("fzrq"));
                jb.put("title_rec_date", getDateString(info.get("fzrq").toString()));
                jb.put("prac_type", "1");   // 因为上传的是医师的信息,所以该字段全部默认设置为 1 医师
                jb.put("title_code", dutyInfo[0].toString());  // 需要与监管平台的字典进行映射
                jb.put("first_compeny_code", orgCode);
@ -361,7 +378,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                errorFlag = true;
                saveErrorLog(upid,"3",info.get("id").toString(),"数据格式错误",1);
                error++;
//                logger.error(e.toString());
                logger.error(e.toString());
            }
            if(!errorFlag){
                //上传监管平台
@ -454,7 +471,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
            Boolean errorFlag = false;
            try{
                String[] dept = depToSubject(info.get("dept").toString());
                jb.put("id", orgCode + (String)info.get("id"));
                jb.put("id", orgCode +"_"+ (String)info.get("id"));
                jb.put("cd_org", orgCode);
                jb.put("cd_area", orgArea);
                jb.put("cd_orgSub", orgSub);
@ -548,7 +565,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                try {
                    String[] dept = depToSubject(ins.get("dept").toString());
                    String docInterId = achNsDoctorRecord((String)ins.get("doctorIdCard"));
                    jb.put("id",orgCode + (String)ins.get("id"));
                    jb.put("id",orgCode +"_"+ (String)ins.get("id"));
                    jb.put("cd_org", orgCode);
                    jb.put("cd_area", orgArea);
                    jb.put("cd_orgSub", orgSub);
@ -657,7 +674,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
//                String[] dept = depToSubject(info.get("dept_code").toString());
                jb.put("id",orgCode + (String)info.get("id"));
                jb.put("id",orgCode +"_"+ (String)info.get("id"));
                jb.put("id_doctor",interId == null ? "0":interId);
                jb.put("organ_code",orgCode);
                jb.put("organ_name", orgName);
@ -790,7 +807,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                // 获取监管平台唯一标识
                String visitDocCode = achNsDoctorRecord((String)info.get("docIdCard"));
                jb.put("id_online_ask", (String)info.get("id"));
                jb.put("id_online_ask", orgCode+"_"+(String)info.get("id"));
                jb.put("net_service_code", "1");
                jb.put("med_class_code", info.get("type"));
                jb.put("med_pop_code", "1");
@ -842,16 +859,15 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                }
            }
        }
/*
        String resInfo = "此次共上传:" + total + "条数据,其中成功 :" + success + "条,上传失败 : " + error + "条。格式错误:"+dataError+"条。";
*/
/*
        saveUpLog(upid,"8",DateUtil.stringToDate(startDate,"yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(endDate,"yyyy-MM-dd HH:mm:ss"),success,error,dataError,resInfo);
*/
        return null;
    }
    // 9 网络诊疗服务信息 	micc.upNsOnlineMed  ---
    // 9 网络诊疗服务信息 	micc.upNsOnlineMed
    public String upNsOnlineMed(String startDate, String endDate,String keyId) throws Exception {
        String url = getUrl();
        String api = "micc.upNsOnlineMed";
@ -922,7 +938,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                String visitDocCode = achNsDoctorRecord((String)info.get("docIdCard"));
//                String visitDocCode = achNsDoctorRecord("350102198005012428");
                jb.put("id_online_med", orgCode + info.get("register_no"));
                jb.put("id_online_med", orgCode +"_"+ (String)info.get("id"));
                jb.put("net_service_code", "4");
                jb.put("med_class_code", info.get("type")== ""?"1":info.get("type"));
                jb.put("org_name", orgName);
@ -1066,7 +1082,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                // 获取监管平台唯一标识
                String visitDocCode = achNsDoctorRecord(info.get("docIdcard").toString());
                jb.put("id_prescription", orgCode + (String)info.get("id"));
                jb.put("id_prescription", orgCode +"_"+ (String)info.get("id"));
                jb.put("pres_no",info.get("real_order")== null?"0":info.get("real_order"));
                jb.put("pres_class_code", "1");
                jb.put("pres_class_name", "西药");
@ -1195,7 +1211,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
            JSONObject jb = new JSONObject();
            Boolean errorFlag = false;
            try {
                jb.put("id_prescription_drug",orgCode + (String)info.get("id"));
                jb.put("id_prescription_drug",orgCode +"_"+ (String)info.get("id"));
                jb.put("pres_no", info.get("real_order") == null? "0": info.get("real_order"));
                jb.put("org_code",orgCode);
                jb.put("appr_drug_code", info.get("drug_no") == null? "0": info.get("drug_no"));
@ -1291,7 +1307,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                    Boolean errorFlag = false;
                    try {
                        jb.put("id_online_img",getCode());
                        jb.put("id_onlne_base", info.get("id"));
                        jb.put("id_onlne_base", orgCode+"_"+info.get("id"));
                        jb.put("online_type","2");
                        String base64 =getImg(img);
                        jb.put("img_path",base64);
@ -1340,7 +1356,7 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
        JSONObject jb = new JSONObject();
        Boolean errorFlag = false;
        try {
            jb.put("id_organ_protocol",orgCode+upid);
            jb.put("id_organ_protocol",orgCode+"_"+upid);
            jb.put("organ_code", orgCode);
            jb.put("organ_name",orgName);
            jb.put("protocol_type", "1");
@ -1746,8 +1762,8 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
                res[1] = "主治医师";
                break;
            default:
                res[0] = "0";
                res[1] = "未知";
                res[0] = "234";
                res[1] = "医师";
        }
        return  res;
    }
@ -1774,6 +1790,21 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
        return "";
    }
    public String getDateString(String date){
        String dates[] = date.split("-");
        if(dates!=null&&dates.length>0){
            if(dates[1].length()<2){
                dates[1] = "0"+dates[1];
            }
            if(dates[2].length()<2){
                dates[2] = "0"+dates[2];
            }
            return dates[0]+"-"+dates[1]+"-"+dates[2];
        }
        return date;
    }
    private String getBase64FromInputStream(InputStream is) throws Exception {
        // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        byte[] data = null;
@ -1803,4 +1834,8 @@ public class YkyyInternetService extends BaseJpaService<InternetUpErrorLogDO, In
        //转化方法2
//        return new String(Base64.encodeBase64(data));
    }
    public String testImg(String path){
        return ImgUtils.getImageStr(path);
    }
}

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

@ -65,15 +65,12 @@ public class ImgUtils {
        InputStream in = null;
        byte[] data = null;
        //读取图片字节数组
        try
        {
        try {
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        }
        catch (IOException e)
        {
        } catch (IOException e) {
            e.printStackTrace();
        }
        //对字节数组Base64编码

+ 1 - 1
business/es-service/src/main/java/com/yihu/jw/es/service/StatisticsEsService.java

@ -123,7 +123,7 @@ public class StatisticsEsService {
        if (level==4){
            sql += " and o.doctor IN (SELECT doctor_code FROM `base_doctor_hospital` dh where dh.org_code ='"+area+"' and dh.del=1)";
        }if (level==2){
            sql += " 1=1 ";
            sql += " AND 1=1 ";
        }else if (level==5){
            sql += " and o.doctor IN (SELECT doctor_code FROM `base_doctor_hospital` dh where dh.dept_code ='"+area+"' and dh.del=1)";
        }else if (level==6){

File diff suppressed because it is too large
+ 24 - 2
business/im-service/src/main/java/com/yihu/jw/im/service/ImService.java


+ 29 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/service/YkyySMSService.java

@ -0,0 +1,29 @@
package com.yihu.jw.sms.service;
import com.yihu.jw.sms.util.ykyy.client.SmsClient;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
import org.springframework.stereotype.Service;
/**
 * Created by Trick on 2020/3/19.
 */
@Service
public class YkyySMSService {
    private final String usrCode ="300643";
    private final String pw ="T9IHN69DDF";
    private final String url ="https://smsapp.wlwx.com";
    /**
     * 发送短信验证码
     * @param mobile
     * @param content
     * @return
     */
    public ResultMsg ykyySendSMS(String mobile, String content){
        SmsClient smsClient = new SmsClient();
        return smsClient.sendSms("ykyy",usrCode, content,mobile,"yes","","8",url,pw);
    }
}

+ 378 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/client/SmsClient.java

@ -0,0 +1,378 @@
package com.yihu.jw.sms.util.ykyy.client;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.sms.util.ykyy.util.HttpClient;
import com.yihu.jw.sms.util.ykyy.util.MD5;
import com.yihu.jw.sms.util.ykyy.vo.*;
/**
 * 短信服务相关方法
 */
public class SmsClient {
	
	/**
	 * 获取token信息
	 * @param custCode 客户账号
	 * @param serviceBaseUrl http://ip:port
	 * @return ResultMsg
	 */
	private ResultMsg getToken(String custCode, String serviceBaseUrl){
		ResultMsg resultMsg = new ResultMsg();
		try {
			//发送token请求
			QueryReq getTokenReq = new QueryReq();
			
			getTokenReq.setCust_code(custCode);
			
			String postData = JSON.toJSONString(getTokenReq);
			String getTokenResp = HttpClient.post(serviceBaseUrl + "/getToken", postData,
					"application/json", "utf-8");
			
			JSONObject jsonObject = JSON.parseObject(getTokenResp);
			
			if (!"failed".equals(jsonObject.getString("status"))) {//判断是否获取token信息成功
				resultMsg.setSuccess(true);
				resultMsg.setData(getTokenResp);
			} else {
				resultMsg.setSuccess(false);
				resultMsg.setCode(jsonObject.getString("respCode"));
				resultMsg.setMsg(jsonObject.getString("respMsg"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	/**
	 * 发送短信
	 * @param smsReq SmsReq实体类
	 * @param password 客户密码
	 * @param serviceBaseUrl http://ip:port
	 * @return ResultMsg
	 */
	public ResultMsg sendSms(SmsReq smsReq, String password, String serviceBaseUrl){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(smsReq.getCust_code(), serviceBaseUrl);
		
		try {
			String sign = MD5.getMD5((smsReq.getContent() + password).getBytes("utf-8"));
			smsReq.setSign(sign);
			String postData = JSON.toJSONString(smsReq);
			String sendSmsResp = HttpClient.post(serviceBaseUrl + "/sendSms", postData, "application/json", "utf-8");
			
			JSONObject jsonObject = JSON.parseObject(sendSmsResp);
			if (!"failed".equals(jsonObject.getString("status"))) {//判断是否获取token信息成功
				resultMsg.setSuccess(true);
				resultMsg.setData(sendSmsResp);
			} else {
				resultMsg.setSuccess(false);
				resultMsg.setCode(jsonObject.getString("respCode"));
				resultMsg.setMsg(jsonObject.getString("respMsg"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	/**
	 * 发送短信
	 * @param uid 			[选填] 业务标识,由贵司自定义32为数字透传至我司
	 * @param custCode 		[必填] 用户账号
	 * @param content 		[必填] 短信内容
	 * @param destMobiles 	[必填] 接收号码,同时发送给多个号码时,号码之间用英文半角逗号分隔(,)
	 * @param needReport 	[选填] 状态报告需求与否,是 yes 否 no 默认yes
	 * @param spCode 		[选填] 长号码
	 * @param msgFmt 		[选填] 信息格式,0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;默认8
	 * @param serviceBaseUrl 			[必填] http://ip:port
	 * @param password 		[必填] 账号密码
	 * @return ResultMsg
	 */
	public ResultMsg sendSms(String uid, String custCode, String content, String destMobiles,
			String needReport, String spCode, String msgFmt, String serviceBaseUrl,String password){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(custCode, serviceBaseUrl);
		try {
			SmsReq req = new SmsReq();
			req.setUid(uid);
			req.setCust_code(custCode);
			req.setContent(content);
			req.setDestMobiles(destMobiles);
			req.setNeed_report(needReport);
			req.setSp_code(spCode);
			req.setMsgFmt(msgFmt);
			
			String sign = MD5.getMD5((req.getContent() + password).getBytes("utf-8"));
			req.setSign(sign);
			String postData = JSON.toJSONString(req);
			String sendSmsResp = HttpClient.post(serviceBaseUrl + "/sendSms", postData, "application/json", "utf-8");
			
			JSONObject jsonObject = JSON.parseObject(sendSmsResp);
			if (!"failed".equals(jsonObject.getString("status"))) {//判断是否获取token信息成功
				resultMsg.setSuccess(true);
				resultMsg.setData(sendSmsResp);
			} else {
				resultMsg.setSuccess(false);
				resultMsg.setCode(jsonObject.getString("respCode"));
				resultMsg.setMsg(jsonObject.getString("respMsg"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	
	/**
	 * 发送变量短信
	 * @param variantSmsReq VariantSmsReq实体类
	 * @param password 客户密码
	 * @param serviceBaseUrl http://ip:port
	 * @return ResultMsg
	 */
	public ResultMsg sendVariantSms(VariantSmsReq variantSmsReq, String serviceBaseUrl, String password){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(variantSmsReq.getCust_code(), serviceBaseUrl);
		try {
			String sign = MD5.getMD5((variantSmsReq.getContent() + password).getBytes("utf-8"));
			variantSmsReq.setSign(sign);
			String postData = JSON.toJSONString(variantSmsReq);
			String sendSmsResp = HttpClient.post(serviceBaseUrl + "/sendVariantSms", postData, "application/json", "utf-8");
			
			JSONObject jsonObject = JSON.parseObject(sendSmsResp);
			if (!"failed".equals(jsonObject.getString("status"))) {//判断是否获取token信息成功
				resultMsg.setSuccess(true);
				resultMsg.setData(sendSmsResp);
			} else {
				resultMsg.setSuccess(false);
				resultMsg.setCode(jsonObject.getString("respCode"));
				resultMsg.setMsg(jsonObject.getString("respMsg"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	
	/**
	 * 查询账户余额
	 * @param custCode 客户账号
	 * @param password 客户密码
	 * @param serviceBaseUrl http://ip:port
	 * @return ResultMsg
	 */
	public ResultMsg queryAccount(String custCode, String password, String serviceBaseUrl){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(custCode, serviceBaseUrl);
		try {
			if (resultMsg.isSuccess()) {
				GetTokenResp gtResp = JSON.parseObject(resultMsg.getData(), GetTokenResp.class);
				QueryReq queryAccountReq = new QueryReq();
				String sign = MD5.getMD5((gtResp.getToken() + password).getBytes("utf-8"));
				
				queryAccountReq.setToken_id(gtResp.getToken_id());
				queryAccountReq.setCust_code(custCode);
				queryAccountReq.setSign(sign);
				
				String postData = JSON.toJSONString(queryAccountReq);
				String queryAccountResp = HttpClient.post(serviceBaseUrl + "/queryAccount",
						postData, "application/json", "utf-8");
				
				JSONObject jsonObject = JSON.parseObject(queryAccountResp);
				if (!"failed".equals(jsonObject.getString("status"))) {
					resultMsg.setSuccess(true);
					resultMsg.setData(queryAccountResp);
				} else {
					resultMsg.setSuccess(false);
					resultMsg.setCode(jsonObject.getString("respCode"));
					resultMsg.setMsg(jsonObject.getString("respMsg"));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	
	/**
	 * 获取上行记录
	 * @param custCode 客户账号
	 * @param password 客户密码
	 * @param serviceBaseUrl http://ip:port
	 * @return ResultMsg
	 */
	public ResultMsg getMo(String custCode, String password, String serviceBaseUrl){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(custCode, serviceBaseUrl);
		try {
			if (resultMsg.isSuccess()) {
				GetTokenResp gtResp = JSON.parseObject(resultMsg.getData(), GetTokenResp.class);
				QueryReq queryAccountReq = new QueryReq();
				String sign = MD5.getMD5((gtResp.getToken() + password).getBytes("utf-8"));
				
				queryAccountReq.setToken_id(gtResp.getToken_id());
				queryAccountReq.setCust_code(custCode);
				queryAccountReq.setSign(sign);
				
				String postData = JSON.toJSONString(queryAccountReq);
				String getMoResp = HttpClient.post(serviceBaseUrl + "/getMO",
						postData, "application/json", "utf-8");
				
				JSONObject jsonObject;
				try {
					JSON.parseArray(getMoResp);//无异常代表是json数组,即正常返回数据
					resultMsg.setSuccess(true);
					resultMsg.setData(getMoResp);
				} catch (Exception e) {
					jsonObject = JSON.parseObject(getMoResp);
					if (!"failed".equals(jsonObject.getString("status"))) {
						resultMsg.setSuccess(true);
						resultMsg.setData(getMoResp);
					} else {
						resultMsg.setSuccess(false);
						resultMsg.setCode(jsonObject.getString("respCode"));
						resultMsg.setMsg(jsonObject.getString("respMsg"));
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	/**
	 * 获取状态报告
	 * @param custCode 客户账号
	 * @param password 客户密码
	 * @param serviceBaseUrl http://ip:port
	 * @return ResultMsg
	 */
	public ResultMsg getReport(String custCode, String password, String serviceBaseUrl){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(custCode, serviceBaseUrl);
		try {
			if (resultMsg.isSuccess()) {
				GetTokenResp gtResp = JSON.parseObject(resultMsg.getData(), GetTokenResp.class);
				QueryReq queryAccountReq = new QueryReq();
				String sign = MD5.getMD5((gtResp.getToken() + password).getBytes("utf-8"));
				
				queryAccountReq.setToken_id(gtResp.getToken_id());
				queryAccountReq.setCust_code(custCode);
				queryAccountReq.setSign(sign);
				
				String postData = JSON.toJSONString(queryAccountReq);
				String getReportResp = HttpClient.post(serviceBaseUrl + "/getReport",
						postData, "application/json", "utf-8");
				
				JSONObject jsonObject;
				try {
					JSON.parseArray(getReportResp);//无异常代表是json数组,即正常返回数据
					resultMsg.setSuccess(true);
					resultMsg.setData(getReportResp);
				} catch (Exception e) {
					jsonObject = JSON.parseObject(getReportResp);
					if (!"failed".equals(jsonObject.getString("status"))) {
						resultMsg.setSuccess(true);
						resultMsg.setData(getReportResp);
					} else {
						resultMsg.setSuccess(false);
						resultMsg.setCode(jsonObject.getString("respCode"));
						resultMsg.setMsg(jsonObject.getString("respMsg"));
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
	
	/**
	 * 获取某手机号码的黑名单类型
	 * @param custCode 客户账号
	 * @param password 客户密码
	 * @param serviceBaseUrl http://ip:port
	 * @param mobile 手机号码
	 * @return ResultMsg
	 */
	public ResultMsg getBlacklist(String custCode, String password, String serviceBaseUrl, String mobile){
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getToken(custCode, serviceBaseUrl);
		try {
			if (resultMsg.isSuccess()) {
				GetTokenResp gtResp = JSON.parseObject(resultMsg.getData(), GetTokenResp.class);
				QueryReq queryAccountReq = new QueryReq();
				String sign = MD5.getMD5((gtResp.getToken() + password).getBytes("utf-8"));
				
				queryAccountReq.setToken_id(gtResp.getToken_id());
				queryAccountReq.setCust_code(custCode);
				queryAccountReq.setSign(sign);
				queryAccountReq.setMobile(mobile);
				
				String postData = JSON.toJSONString(queryAccountReq);
				String getReportResp = HttpClient.post(serviceBaseUrl + "/getBlacklist",
						postData, "application/json", "utf-8");
				
				JSONObject jsonObject;
				try {
					JSON.parseArray(getReportResp);//无异常代表是json数组,即正常返回数据
					resultMsg.setSuccess(true);
					resultMsg.setData(getReportResp);
				} catch (Exception e) {
					System.out.println(getReportResp);
					jsonObject = JSON.parseObject(getReportResp);
					if (!"failed".equals(jsonObject.getString("status"))) {
						resultMsg.setSuccess(true);
						resultMsg.setData(getReportResp);
					} else {
						resultMsg.setSuccess(false);
						resultMsg.setCode(jsonObject.getString("respCode"));
						resultMsg.setMsg(jsonObject.getString("respMsg"));
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			resultMsg.setSuccess(false);
			resultMsg.setCode("1000");
			resultMsg.setMsg("服务器出现未知异常");
		}
		return resultMsg;
	}
}

+ 53 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/GetMo.java

@ -0,0 +1,53 @@
package com.yihu.jw.sms.util.ykyy.demo;
import com.yihu.jw.sms.util.ykyy.client.SmsClient;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
/**
 * 获取上行记录示例
 */
public class GetMo {
	public static void main(String[] args) {
		String custCode = "xxxxx";							 //[必填] 用户账号
		String password = "xxxxxxxx";						 //[必填] 账号密码
		String serviceBaseUrl = "http://ip:port"; 			 //[必填] http://ip:port
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getMo(custCode, password, serviceBaseUrl);
		if (resultMsg.isSuccess()) { 
			/**
			 * 成功返回json数组字符串,data数据如下:
			 * [
				    {
				        "smsLabel": "",
				        "recv_time": "2017-12-22 09:57:41",
				        "msg_content": "ddcfffffcf",
				        "sp_code": "106903510107281",
				        "src_mobile": "13489080110",
				        "msg_id": "-3807905081491652607"
				    },
				    {
				        "smsLabel": "",
				        "recv_time": "2017-12-22 09:57:44",
				        "msg_content": "sscgvcd",
				        "sp_code": "106903510107281",
				        "src_mobile": "13489080110",
				        "msg_id": "-3807904256858324992"
				    }
				]
			 */
			System.out.println(resultMsg.getData());
		} else {
			/**
			 * 1000:服务器出现未知异常!
			 * 1001 操作不合法,操作前未获取Token,或Token已过时
			 * 1002 签名验证不通过!
			 * 1003Json参数解析出错
			 * 1004 操作不合法,cust_code: xxxxxx不存在
			 */
			System.out.println(resultMsg.getCode());
			System.out.println(resultMsg.getMsg());
		}
	}
}

+ 45 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/GetReport.java

@ -0,0 +1,45 @@
package com.yihu.jw.sms.util.ykyy.demo;
import com.yihu.jw.sms.util.ykyy.client.SmsClient;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
/**
 * 获取状态报告示例
 */
public class GetReport {
	public static void main(String[] args) {
		String custCode = "xxxxx";							 //[必填] 用户账号
		String password = "xxxxxxxx";						 //[必填] 账号密码
		String serviceBaseUrl = "http://ip:port"; 			 //[必填] http://ip:port
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.getReport(custCode, password, serviceBaseUrl);
		if (resultMsg.isSuccess()) {
			/**
			 * 成功返回json数组字符串,data数据如下:
			 * [
				    {
				        "msgid": "59106412211644219176",
				        "mobile": "1348908xxxx",
				        "report_status": "SUCCESS",
				        "report": "DELIVRD",
				        "uid": "1123344567",
				        "recv_time": "2017-12-21 16:44:31"
				    }
				]
			 */
			System.out.println(resultMsg.getData());
		} else {
			/**
			 * 1000:服务器出现未知异常!
			 * 1001 操作不合法,操作前未获取Token,或Token已过时
			 * 1002 签名验证不通过!
			 * 1003Json参数解析出错
			 * 1004 操作不合法,cust_code: xxxxxx不存在
			 */
			System.out.println(resultMsg.getCode());
			System.out.println(resultMsg.getMsg());
		}
	}
}

+ 41 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/QueryAccount.java

@ -0,0 +1,41 @@
package com.yihu.jw.sms.util.ykyy.demo;
import com.yihu.jw.sms.util.ykyy.client.SmsClient;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
/**
 * 查询账户余额示例
 */
public class QueryAccount {
	public static void main(String[] args) {
		String custCode = "xxxxx";							 //[必填] 用户账号
		String password = "xxxxxxxx";						 //[必填] 账号密码
		String serviceBaseUrl = "http://ip:port"; 			 //[必填] http://ip:port
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.queryAccount(custCode, password, serviceBaseUrl);
		if (resultMsg.isSuccess()) {
			/**
			 * 成功返回json对象字符串,data数据如下:
			 * {
				    "cust_code": "096522",
				    "sms_balance": 9950,
				    "status": "1"
				}
			 */
			System.out.println(resultMsg.getData());
		} else {
			/**
			 * 1000:服务器出现未知异常!
			 * 1001 操作不合法,操作前未获取Token,或Token已过时
			 * 1002 签名验证不通过!
			 * 1003Json参数解析出错
			 * 1004 操作不合法,cust_code: xxxxxx不存在
			 */
			System.out.println(resultMsg.getCode());
			System.out.println(resultMsg.getMsg());
		}
	}
}

+ 96 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/SendSms.java

@ -0,0 +1,96 @@
package com.yihu.jw.sms.util.ykyy.demo;
import com.yihu.jw.sms.util.ykyy.client.SmsClient;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
import com.yihu.jw.sms.util.ykyy.vo.SmsReq;
/**
 * 普通短信发送示例
 * 两种方式:
 * 		1.通过SmsReq对象传参
 * 		2.直接传参
 */
public class SendSms {
	public static void main(String[] args) {
		String custCode = "300643";							 //[必填] 用户账号
		String password = "T9IHN69DDF";						 //[必填] 账号密码
		String serviceBaseUrl = "https://smsapp.wlwx.com"; 			 //[必填] http://ip:port
		/**
		 * 1.通过SmsReq对象传参
		 */
		
		SmsReq smsReq = new SmsReq();
		smsReq.setUid("");							//[选填] 业务标识,由贵司自定义32为数字透传至我司
		smsReq.setCust_code(custCode);				//[必填] 用户账号
		smsReq.setContent("您正在登录,登陆验证码为561445,请在15分钟内按照页面提示填写验证码,切勿将验证码泄露给他人。");				//[必填] 短信内容
		smsReq.setDestMobiles("15859693131");		//[必填] 接收号码,同时发送给多个号码时,号码之间用英文半角逗号分隔(,)
		smsReq.setNeed_report("yes");				//[选填] 状态报告需求与否,是 yes 否 no 默认yes
		smsReq.setSp_code("");						//[选填] 长号码
		smsReq.setMsgFmt("8");						//[选填] 信息格式,0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;默认8
		SmsClient smsClient = new SmsClient();
		ResultMsg resultMsg = smsClient.sendSms(smsReq, password, serviceBaseUrl);
		if (resultMsg.isSuccess()) {
			/**
			 * 成功返回json对象字符串,data数据如下:
			 * {
				    "uid": "1123344567",
				    "status": "success",
				    "respCode": "0",
				    "respMsg": "提交成功!",
				    "totalChargeNum": 1,
				    "result": [
				        {
				            "msgid": "59106312221352221524",
				            "mobile": "1348908xxxx",
				            "code": "0",
				            "msg": "提交成功.",
				            "chargeNum": 1
				        }
				    ]
				}
			 */
			System.out.println(resultMsg.getData());
		} else {
			/**
			 *  1000:服务器出现未知异常!
			 *  1001 操作不合法,操作前未获取Token,或Token已过时
			 *	1002 签名验证不通过!
			 *	1003 Json参数解析出错
			 *	1004 操作不合法,cust_code: xxxxxx不存在
			 *	1005 客户端IP鉴权不通过
			 *	1006 客户账号已停用!
			 *	1008 客户提交接口协议HTTP, 与客户参数允许的协议不一致!
			 *	1009 提交的短信内容超过规定的长度!
			 *	1011 客户账户不存在!
			 *	1012 账户没有足够的余额
			 *	1013 扩展号码(sp_code)不符合规范!
			 */
			System.out.println(resultMsg.getCode());
			System.out.println(resultMsg.getMsg());
		}
		
		/**
		 * 2.直接传参
		 */
//		String uid = "1123344567";
//		String content = "短信内容";
//		String destMobiles = "13489080110,13489080111";
//		String needReport = "yes";
//		String spCode = "";
//		String msgFmt = "8";
//
//		SmsClient smsClient1 = new SmsClient();
//		ResultMsg resultMsg1 = smsClient1.sendSms(uid, custCode, content, destMobiles,
//				needReport, spCode, msgFmt, serviceBaseUrl, password);
//		if (resultMsg1.isSuccess()) {
//			System.out.println(resultMsg1.getData());
//		} else {
//			System.out.println(resultMsg1.getCode());
//			System.out.println(resultMsg1.getMsg());
//		}
		
	}
}

File diff suppressed because it is too large
+ 109 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/demo/SendVariantSms.java


+ 57 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/util/HttpClient.java

@ -0,0 +1,57 @@
package com.yihu.jw.sms.util.ykyy.util;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
/**
 * http客户端工具
 */
public class HttpClient {
	
	/**
	 * post方式请求服务器(http协议)
	 * 
	 * @param url
	 *            请求地址
	 * @param content
	 *            参数
	 * @param charset
	 *            编码
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws KeyManagementException
	 * @throws IOException
	 */
	public static String post(String url, String content, String contentType,
			String charset) throws NoSuchAlgorithmException, KeyManagementException,
			IOException {
		HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
		conn.setRequestProperty("Content-Type", contentType);
		conn.setDoOutput(true);
		conn.connect();
		DataOutputStream out = new DataOutputStream(conn.getOutputStream());
		out.write(content.getBytes(charset));
		// 刷新、关闭
		out.flush();
		out.close();
		InputStream is = conn.getInputStream();
		if (is != null) {
			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = is.read(buffer)) != -1) {
				outStream.write(buffer, 0, len);
			}
			is.close();
			String rspStr = outStream.toString(charset);
			return rspStr;
		}
		return null;
	}
}

+ 29 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/util/MD5.java

@ -0,0 +1,29 @@
package com.yihu.jw.sms.util.ykyy.util;
public class MD5 {
	public static String getMD5(byte[] source) {
		String s = null;
		char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符
		'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
		try {
			java.security.MessageDigest md = java.security.MessageDigest
					.getInstance("MD5");
			md.update(source);
			byte tmp[] = md.digest(); // MD5 的计算结果是一个 128 位的长整数,
										// 用字节表示就是 16 个字节
			char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
											// 所以表示成 16 进制需要 32 个字符
			int k = 0; // 表示转换结果中对应的字符位置
			for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
											// 转换成 16 进制字符的转换
				byte byte0 = tmp[i]; // 取第 i 个字节
				str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,>>>为逻辑右移,将符号位一起右移
				str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
			}
			s = new String(str); // 换后的结果转换为字符串
		} catch (Exception e) {
			e.printStackTrace();
		}
		return s;
	}
}

+ 30 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/GetTokenResp.java

@ -0,0 +1,30 @@
package com.yihu.jw.sms.util.ykyy.vo;
/**
 * token对象实体
 */
public class GetTokenResp {
	
	private String token_id;
	private String token;
	
	public GetTokenResp(){}
	
	public GetTokenResp(String token_id, String token){
		this.token_id = token_id;
		this.token = token;
	}
	public String getToken_id() {
		return token_id;
	}
	public void setToken_id(String token_id) {
		this.token_id = token_id;
	}
	public String getToken() {
		return token;
	}
	public void setToken(String token) {
		this.token = token;
	}
	
}

+ 44 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/QueryReq.java

@ -0,0 +1,44 @@
package com.yihu.jw.sms.util.ykyy.vo;
/**
 * 请求对象实体
 */
public class QueryReq {
	
	private String cust_code;//客户账号
	private String sendtime;
	private String token_id;//token编号 10位
	private String mobile;
	private String sign;//数字签名
	public String getCust_code() {
		return cust_code;
	}
	public void setCust_code(String cust_code) {
		this.cust_code = cust_code;
	}
	public String getSendtime() {
		return sendtime;
	}
	public void setSendtime(String sendtime) {
		this.sendtime = sendtime;
	}
	public String getToken_id() {
		return token_id;
	}
	public void setToken_id(String token_id) {
		this.token_id = token_id;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	public String getSign() {
		return sign;
	}
	public void setSign(String sign) {
		this.sign = sign;
	}
	
}

+ 64 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/ResultMsg.java

@ -0,0 +1,64 @@
package com.yihu.jw.sms.util.ykyy.vo;
/**
 * 结果对象
 */
public class ResultMsg {
	private boolean success;//是否成功 true:成功 false:失败
	private String code;//错误码
	private String msg;//异常信息
	private String data;//数据集
	
	/**
	 * true 成功  false 失败
	 * @return boolean
	 */
	public boolean isSuccess() {
		return success;
	}
	public void setSuccess(boolean success) {
		this.success = success;
	}
	/**
	 *  1000 服务器出现未知异常!
	 *  1001 操作不合法,操作前未获取Token,或Token已过时
	 *	1002 签名验证不通过!
	 *	1003Json参数解析出错
	 *	1004 操作不合法,cust_code: xxxxxx不存在
	 *	1005 客户端IP鉴权不通过
	 *	1006 客户账号已停用!
	 *	1008 客户提交接口协议HTTP, 与客户参数允许的协议不一致!
	 *	1009 提交的短信内容超过规定的长度!
	 *	1011 客户账户不存在!
	 *	1012 账户没有足够的余额
	 *	1013 扩展号码(sp_code)不符合规范!
	 */
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	/**
	 * 错误信息描述
	 * @return msg
	 */
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * 数据结果 json字符串
	 * @return String
	 */
	public String getData() {
		return data;
	}
	public void setData(String data) {
		this.data = data;
	}
	
	
}

+ 66 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/SmsReq.java

@ -0,0 +1,66 @@
package com.yihu.jw.sms.util.ykyy.vo;
/**
 * 发送短信对象实体 
 */
public class SmsReq {
	
	private String uid = ""; 			//业务标识[选填],由贵司自定义32为数字透传至我司
	private String content = ""; 		//短信内容[必填]
	private String destMobiles = ""; 	//接收号码[必填],同时发送给多个号码时,号码之间用英文半角逗号分隔(,)
	private String cust_code = ""; 		//用户账号[必填]
	private String sp_code = ""; 		//长号码[选填]
	private String need_report = ""; 	//状态报告需求与否[选填],是 yes 否 no 默认yes
	private String sign = ""; 			//数字签名[必填],签名内容根据 “短信内容+客户密码”进行MD5编码后获得。
	private String msgFmt = "8"; 		//信息格式[选填],0:ASCII串;3:短信写卡操作;4:二进制信息;8:UCS2编码;
	
	public String getUid() {
		return uid;
	}
	public void setUid(String uid) {
		this.uid = uid;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getDestMobiles() {
		return destMobiles;
	}
	public void setDestMobiles(String destMobiles) {
		this.destMobiles = destMobiles;
	}
	public String getCust_code() {
		return cust_code;
	}
	public void setCust_code(String cust_code) {
		this.cust_code = cust_code;
	}
	public String getSp_code() {
		return sp_code;
	}
	public void setSp_code(String sp_code) {
		this.sp_code = sp_code;
	}
	public String getNeed_report() {
		return need_report;
	}
	public void setNeed_report(String need_report) {
		this.need_report = need_report;
	}
	public String getSign() {
		return sign;
	}
	public void setSign(String sign) {
		this.sign = sign;
	}
	public String getMsgFmt() {
		return msgFmt;
	}
	public void setMsgFmt(String msgFmt) {
		this.msgFmt = msgFmt;
	}
	
}

+ 25 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/VariantParams.java

@ -0,0 +1,25 @@
package com.yihu.jw.sms.util.ykyy.vo;
/**
 * 变量短信对象实体
 */
public class VariantParams {
	private String mobile;		//手机号码
	private String[] vars;		//变量内容 
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	public String[] getVars() {
		return vars;
	}
	public void setVars(String[] vars) {
		this.vars = vars;
	}
}

File diff suppressed because it is too large
+ 78 - 0
business/sms-service/src/main/java/com/yihu/jw/sms/util/ykyy/vo/VariantSmsReq.java


+ 5 - 4
common/common-entity/src/main/java/com/yihu/jw/entity/IntegerIdentityEntity.java

@ -7,6 +7,7 @@ import javax.persistence.*;
import java.io.Serializable;
/**
 * 由于ORACEL 与mysql Id策略不一样
 * Integer类型的主键基类,需要根据不同环境打包
 * Created by progr1mmer on 2018/8/13.
 */
@ -18,13 +19,13 @@ public abstract class IntegerIdentityEntity implements Serializable {
    @Id
//==========mysql 环境 id策略======================================================
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "identity")
    @Column(name = "id", unique = true, nullable = false)
//    @GeneratedValue(generator = "generator")
//    @GenericGenerator(name = "generator", strategy = "identity")
//    @Column(name = "id", unique = true, nullable = false)
//==========mysql 环境 id策略 end======================================================
//==========Oracle 环境id策略 =========================================================
//    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_generated")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_generated")
//==========Oracle 环境id策略 =========================================================
    public Integer getId() {
        return id;

+ 4 - 3
common/common-entity/src/main/java/com/yihu/jw/entity/base/wx/BasePatientWechatDo.java

@ -6,6 +6,7 @@ import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @author huangwenjie
@ -20,7 +21,7 @@ public class BasePatientWechatDo extends UuidIdentityEntity {
	private String patientId;
	private String openid;
	private String unionid;
	private String createTime;
	private Date createTime;
	
	@Column(name = "saas_id")
	public String getSaasId() {
@ -66,11 +67,11 @@ public class BasePatientWechatDo extends UuidIdentityEntity {
	}
	
	@Column(name = "create_time")
	public String getCreateTime() {
	public Date getCreateTime() {
		return createTime;
	}
	
	public void setCreateTime(String createTime) {
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/doctor/WlyyDoctorWorkTimeDO.java

@ -29,6 +29,7 @@ public class WlyyDoctorWorkTimeDO extends UuidIdentityEntity {
    private Date endTime;//结束时间',
    private String date;//排班日期',
    private Integer timeInterval;//号源间隔
    private Integer sourceNumber;//号源数目
    private Date createTime;//创建时间',
    public String getDoctor() {
@ -162,4 +163,12 @@ public class WlyyDoctorWorkTimeDO extends UuidIdentityEntity {
    public void setTimeInterval(Integer timeInterval) {
        this.timeInterval = timeInterval;
    }
    public Integer getSourceNumber() {
        return sourceNumber;
    }
    public void setSourceNumber(Integer sourceNumber) {
        this.sourceNumber = sourceNumber;
    }
}

+ 141 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyHospitalWorkRuleDO.java

@ -0,0 +1,141 @@
package com.yihu.jw.entity.hospital.prescription;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by Trick on 2020/3/24.
 */
@Entity
@Table(name = "wlyy_hospital_work_rule")
public class WlyyHospitalWorkRuleDO extends UuidIdentityEntity {
    private String hospital;//医院编码',
    private String openVideo;//1.开放视频预约 ; 0,不开放视频预约',
    private String onlyDuty;//1.仅在班时接受问诊 ; 0 随时可以接受问诊',
    private Integer maxDay;//开放几天号源天数',
    private String maxDayOpenTime;//最后一天号源开放时间',
    private String swStartTime;//上午开始时间',
    private String swEndTime;//上午结束时间',
    private Integer swSourceNum;//上午号源数目',
    private String xwStartTime;//下午开始时间',
    private String xwEndTime;//下午结束时间',
    private Integer xwSourceNum;//下午数目',
    private String wsStartTime;//晚上开始时间',
    private String wsEndTime;//网上结束时间',
    private Integer wsSourceNum;//晚上号源数',
    public String getHospital() {
        return hospital;
    }
    public void setHospital(String hospital) {
        this.hospital = hospital;
    }
    public String getOpenVideo() {
        return openVideo;
    }
    public void setOpenVideo(String openVideo) {
        this.openVideo = openVideo;
    }
    public String getOnlyDuty() {
        return onlyDuty;
    }
    public void setOnlyDuty(String onlyDuty) {
        this.onlyDuty = onlyDuty;
    }
    public Integer getMaxDay() {
        return maxDay;
    }
    public void setMaxDay(Integer maxDay) {
        this.maxDay = maxDay;
    }
    public String getMaxDayOpenTime() {
        return maxDayOpenTime;
    }
    public void setMaxDayOpenTime(String maxDayOpenTime) {
        this.maxDayOpenTime = maxDayOpenTime;
    }
    public String getSwStartTime() {
        return swStartTime;
    }
    public void setSwStartTime(String swStartTime) {
        this.swStartTime = swStartTime;
    }
    public String getSwEndTime() {
        return swEndTime;
    }
    public void setSwEndTime(String swEndTime) {
        this.swEndTime = swEndTime;
    }
    public Integer getSwSourceNum() {
        return swSourceNum;
    }
    public void setSwSourceNum(Integer swSourceNum) {
        this.swSourceNum = swSourceNum;
    }
    public String getXwStartTime() {
        return xwStartTime;
    }
    public void setXwStartTime(String xwStartTime) {
        this.xwStartTime = xwStartTime;
    }
    public String getXwEndTime() {
        return xwEndTime;
    }
    public void setXwEndTime(String xwEndTime) {
        this.xwEndTime = xwEndTime;
    }
    public Integer getXwSourceNum() {
        return xwSourceNum;
    }
    public void setXwSourceNum(Integer xwSourceNum) {
        this.xwSourceNum = xwSourceNum;
    }
    public String getWsStartTime() {
        return wsStartTime;
    }
    public void setWsStartTime(String wsStartTime) {
        this.wsStartTime = wsStartTime;
    }
    public String getWsEndTime() {
        return wsEndTime;
    }
    public void setWsEndTime(String wsEndTime) {
        this.wsEndTime = wsEndTime;
    }
    public Integer getWsSourceNum() {
        return wsSourceNum;
    }
    public void setWsSourceNum(Integer wsSourceNum) {
        this.wsSourceNum = wsSourceNum;
    }
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/specialist/RehabilitationServiceItemDO.java

@ -18,6 +18,7 @@ public class RehabilitationServiceItemDO extends IntegerIdentityEntity {
    private String code;
    private String name;
    private String content;
    private Date createTime;//操作时间
    public String getCode() {
@ -44,4 +45,12 @@ public class RehabilitationServiceItemDO extends IntegerIdentityEntity {
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

+ 11 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/specialist/rehabilitation/RehabilitationDetailDO.java

@ -48,6 +48,8 @@ public class RehabilitationDetailDO extends UuidIdentityEntityWithOperator imple
    private Integer timeType;//时间类型
    @Column(name = "remark")
    private String remark;//备注
    @Column(name = "relation_code")
    private String relationCode;//业务关联code
    @Column(name = "saas_id")
    public String getSaasId() {
@ -184,4 +186,13 @@ public class RehabilitationDetailDO extends UuidIdentityEntityWithOperator imple
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Column(name = "relation_code")
    public String getRelationCode() {
        return relationCode;
    }
    public void setRelationCode(String relationCode) {
        this.relationCode = relationCode;
    }
}

+ 3 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -359,6 +359,9 @@ public class BaseHospitalRequestMapping {
        public static final String findDeptWithDoctorWorkTime = "/findDeptWithDoctorWorkTime";
        public static final String findWorkTimeRule = "/findWorkTimeRule";
        public static final String saveWorkTimeRule = "/saveWorkTimeRule";
    }

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/doctor/WlyyDoctorWorkTimeVO.java

@ -43,6 +43,8 @@ public class WlyyDoctorWorkTimeVO {
    private String date;//排班日期',
    @ApiModelProperty(value = "号源间隔", example = "模块1")
    private Integer timeInterval;//号源间隔
    @ApiModelProperty(value = "号源数目", example = "模块1")
    private Integer sourceNumber;//号源间隔
    @ApiModelProperty(value = "创建时间", example = "模块1")
    private Date createTime;//创建时间',
    @ApiModelProperty(value = "当前号源数目", example = "模块1")
@ -191,4 +193,12 @@ public class WlyyDoctorWorkTimeVO {
    public void setCount(Integer count) {
        this.count = count;
    }
    public Integer getSourceNumber() {
        return sourceNumber;
    }
    public void setSourceNumber(Integer sourceNumber) {
        this.sourceNumber = sourceNumber;
    }
}

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/specialist/PatientLabelVO.java

@ -31,6 +31,8 @@ public class PatientLabelVO {
    private String healthAssistant;
    @ApiModelProperty("计管师姓名")
    private String healthAssistantName;
    @ApiModelProperty("是否被家签管理(1管理,0未管理)")
    private String isManage;
    public String getCode() {
        return code;
@ -127,4 +129,12 @@ public class PatientLabelVO {
    public void setHealthAssistantName(String healthAssistantName) {
        this.healthAssistantName = healthAssistantName;
    }
    
    public String getIsManage() {
        return isManage;
    }
    
    public void setIsManage(String isManage) {
        this.isManage = isManage;
    }
}

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/specialist/PatientRelationVO.java

@ -23,6 +23,8 @@ public class PatientRelationVO {
    private String age;
    @ApiModelProperty("性别")
    private String sex;
    @ApiModelProperty("身份证")
    private String idcard;
    @ApiModelProperty("头像")
    private String photo;
    @ApiModelProperty("出院时间")
@ -111,4 +113,12 @@ public class PatientRelationVO {
    public void setHealthcode(String healthcode) {
        this.healthcode = healthcode;
    }
    
    public String getIdcard() {
        return idcard;
    }
    
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
}

+ 20 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/specialist/PatientSignInfoVO.java

@ -38,6 +38,10 @@ public class PatientSignInfoVO {
    private String dept;
    @ApiModelProperty("科室")
    private String deptName;
    @ApiModelProperty("职称")
    private String job;
    @ApiModelProperty("性别")
    private Integer sex;
    @ApiModelProperty("团队")
    private String teamName;
    @ApiModelProperty("团队code")
@ -215,4 +219,20 @@ public class PatientSignInfoVO {
    public void setSsc(String ssc) {
        this.ssc = ssc;
    }
    
    public String getJob() {
        return job;
    }
    
    public void setJob(String job) {
        this.job = job;
    }
    
    public Integer getSex() {
        return sex;
    }
    
    public void setSex(Integer sex) {
        this.sex = sex;
    }
}

+ 44 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/dao/patient/BasePatientMedicareCardDao.java

@ -0,0 +1,44 @@
package com.yihu.jw.security.dao.patient;
import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
import java.util.Set;
/**
 * Created by Trick on 2018/8/31.
 */
public interface BasePatientMedicareCardDao extends PagingAndSortingRepository<PatientMedicareCardDO, Integer>, JpaSpecificationExecutor<PatientMedicareCardDO> {
    List<PatientMedicareCardDO> findByPatientCode(String patientCode);
    @Query("select id from PatientMedicareCardDO where patientCode = ?1")
    Set<Object> findIdListByPatientCode(String patientCode);
    PatientMedicareCardDO findByCode(String code);
    PatientMedicareCardDO findByTypeAndPatientCodeAndDel(String Type, String patientCode, String del);
    boolean existsByCodeAndDel(String code, String del);
    /**
     * 校验就诊卡号是否存在,就诊卡号有机构code,每个机构的就诊卡相互独立
     * @param code
     * @param orgCode
     * @param del
     * @return
     */
    boolean existsByCodeAndOrgCodeAndDel(String code, String orgCode, String del);
    /**
     * 一个居民在一家医院(机构)只能有一张就诊卡
     * @param patientCode
     * @param orgCode
     * @param del
     * @return
     */
    boolean existsByPatientCodeAndOrgCodeAndDel(String patientCode, String orgCode, String del);
}

+ 17 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/dao/patient/BasePatientWechatDao.java

@ -0,0 +1,17 @@
package com.yihu.jw.security.dao.patient;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Trick on 2020/3/18.
 */
public interface BasePatientWechatDao extends
        PagingAndSortingRepository<BasePatientWechatDo, String>,
        JpaSpecificationExecutor<BasePatientWechatDo> {
    List<BasePatientWechatDo> findByWechatIdAndPatientId (String wechatid, String patientId);
}

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

@ -23,7 +23,9 @@ import com.yihu.jw.security.service.*;
import com.yihu.jw.security.utils.AES;
import com.yihu.jw.security.utils.DateUtil;
import com.yihu.jw.security.utils.SerializeUtil;
import com.yihu.jw.sms.service.YkyySMSService;
import com.yihu.jw.sms.service.ZhongShanSMSService;
import com.yihu.jw.sms.util.ykyy.vo.ResultMsg;
import com.yihu.utils.security.RSAUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -75,10 +77,10 @@ import com.alibaba.fastjson.JSON;
import sun.misc.BASE64Encoder;
/**
 * <p>
 *
 * Endpoint for default login verify and sso login token verify
 * will return the user's basic information and token certificate
 * </p>
 *
 *
 * @author Progr1mmer
 * @created on 2018/8/29
@ -126,7 +128,10 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
    private OauthWjwConfigService oauthWjwConfigService;
    @Autowired
    private OauthSsoService oauthSsoService;
    @Autowired
    private YkyySMSService ykyySMSService;
    @Autowired
    private RegisterService registerService;
    @PostConstruct
    private void init() {
@ -438,6 +443,12 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK);*/
    }
    /**
     * 中山医院短信接口
     * @param parameters
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/oauth/sendZSCaptcha", method = RequestMethod.GET)
    public ResponseEntity<Oauth2Envelop<Captcha>> sendZSCaptcha(@RequestParam Map<String, String> parameters) throws Exception {
        String client_id = parameters.get("client_id");
@ -472,6 +483,49 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        throw new IllegalStateException("验证码发送失败!");
    }
    //眼科医院短信验证码
    @RequestMapping(value = "/oauth/sendYKCaptcha", method = RequestMethod.GET)
    public ResponseEntity<Oauth2Envelop<Captcha>> sendYKCaptcha(@RequestParam Map<String, String> parameters) throws Exception {
        String client_id = parameters.get("client_id");
        String username = parameters.get("username");
        String type = parameters.get("type");
        if (StringUtils.isEmpty(client_id)) {
            throw new InvalidRequestException("client_id");
        }
        if (StringUtils.isEmpty(username)) {
            throw new InvalidRequestException("username");
        }
        //验证请求间隔超时,防止频繁获取验证码
        if (!wlyyRedisVerifyCodeService.isIntervalTimeout(client_id, username)) {
            throw new IllegalAccessException("SMS request frequency is too fast");
        }
        //发送短信获取验证码
        String captcha = wlyyRedisVerifyCodeService.getCodeNumber();
        ResultMsg result= null;
        if(StringUtils.isEmpty(type)){
            result =  ykyySMSService.ykyySendSMS(username,"您好,您的手机登录短信验证码是:"+captcha+",5分钟内有效。");
        }else if("1".equals(type)){
            result = ykyySMSService.ykyySendSMS(username,"您好,您的手机登录短信验证码是:"+captcha+",5分钟内有效。");
        }else if("2".equals(type)){
            result = ykyySMSService.ykyySendSMS(username,"您好,您正在进行找回密码操作,您的短信验证码是:"+captcha+",请勿将验证码告诉他人,5分钟内有效。");
        }
        if (result.isSuccess()) {
            Captcha _captcha = new Captcha();
            _captcha.setCode(captcha);
            _captcha.setExpiresIn(300);
            wlyyRedisVerifyCodeService.store(client_id, username, captcha, 300);
            Oauth2Envelop<Captcha> oauth2Envelop = new Oauth2Envelop<>("captcha", 200, _captcha);
            HttpHeaders headers = new HttpHeaders();
            headers.set("Cache-Control", "no-store");
            headers.set("Pragma", "no-cache");
            return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK);
        }
        throw new IllegalStateException("验证码发送失败!");
    }
    /**
     * 验证验证码
     *
@ -1117,11 +1171,16 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        try {
            logger.info("authCode :"+authCode);
            BasePatientDO patientDO = oauthSsoService.savePatient(code,appId,authCode);
            if(patientDO == null){
                return ObjEnvelop.getError("授权登录失败!");
            Map<String,Object> rs = oauthSsoService.savePatient(code,appId,authCode);
            Integer c = (Integer) rs.get("code");
            if(c != 1){
                return ObjEnvelop.getError(rs.get("mes")+"");
            }
            BasePatientDO patientDO = (BasePatientDO)rs.get("patient");
            if(patientDO==null){
                return ObjEnvelop.getError("获取居民信息失败");
            }
            ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
            Map<String, String> parameters = new HashedMap();
@ -1164,4 +1223,91 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        return ObjEnvelop.getError("登录失败!");
    }
    @RequestMapping(value = "/oauth/registerPatientAndLogin", method = RequestMethod.POST)
    public ObjEnvelop registerPatientAndLogin(String name, String mobile, String idcard, String ssc, String pw,String client_id,String login_type,String captcha,String openid,String wxId)throws Exception{
        if (StringUtils.isEmpty(client_id)) {
            throw new InvalidRequestException("client_id is null");
        }
        if (wlyyRedisVerifyCodeService.verification(client_id, mobile, captcha)) {
            //验证码正确
        } else {
            return ObjEnvelop.getError("验证码错误!");
        }
        try {
            Map<String,Object> rs = registerService.registerPatient(name,mobile,idcard,ssc,pw,openid,wxId);
            String code = rs.get("code").toString();
            if(!"1".equals(code)){
                ObjEnvelop objEnvelop = new ObjEnvelop();
                objEnvelop.setObj(rs);
                objEnvelop.setStatus(-1);
                objEnvelop.setMessage(rs.get("mes")+"");
                return objEnvelop;
            }
            BasePatientDO patientDO = (BasePatientDO)rs.get("patient");
            ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
            Map<String, String> parameters = new HashedMap();
            parameters.put("username",patientDO.getIdcard());
            parameters.put("grant_type", "ihealthCode");
            TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
            if (authenticatedClient != null) {
                oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
            }
            OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
            if (token == null) {
                throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
            }
            WlyyUserSimple wlyyUserSimple = userDetailsService.authSuccess(parameters.get("username"));
            wlyyUserSimple.setAccessToken(token.getValue());
            wlyyUserSimple.setTokenType(token.getTokenType());
            wlyyUserSimple.setExpiresIn(token.getExpiresIn());
            wlyyUserSimple.setRefreshToken(token.getRefreshToken().getValue());
            wlyyUserSimple.setUser(parameters.get("username"));
            String loginType = parameters.get("login_type");
            BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
            userDetailsService.setRolePhth(loginType, token, wlyyUserSimple.getId(), redisTemplate);
            baseLoginLogDO.setUserId(wlyyUserSimple.getId());
            baseLoginLogDO.setCreateTime(new Date());
            String userAgent = JSONObject.toJSONString(wlyyUserSimple);
            baseLoginLogDO.setUserAgent(userAgent);
            baseLoginLogDO.setLoginType(loginType);
            baseLoginLogService.save(baseLoginLogDO);
            return ObjEnvelop.getSuccess("success",wlyyUserSimple);
        }catch (Exception e){
            e.printStackTrace();
        }
        return ObjEnvelop.getError("登录失败!");
    }
    @RequestMapping(value = "/oauth/findPatientPw", method = RequestMethod.POST)
    public Envelop findPatientPw(String mobile,String client_id,String login_type,String captcha,String pw)throws Exception {
        if (wlyyRedisVerifyCodeService.verification(client_id, mobile, captcha)) {
            //验证码正确
        } else {
            return ObjEnvelop.getError("验证码错误!");
        }
        String rs = registerService.updatePatientPw(pw,mobile);
        if("ok".equals(rs)){
            return ObjEnvelop.getSuccess("修改成功!");
        }
        return ObjEnvelop.getError("手机号未注册!");
    }
}

File diff suppressed because it is too large
+ 98 - 36
server/svr-authentication/src/main/java/com/yihu/jw/security/service/OauthSsoService.java


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

@ -0,0 +1,119 @@
package com.yihu.jw.security.service;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.security.dao.patient.BasePatientDao;
import com.yihu.jw.security.dao.patient.BasePatientMedicareCardDao;
import com.yihu.jw.security.dao.patient.BasePatientWechatDao;
import com.yihu.jw.security.utils.IdCardUtil;
import com.yihu.utils.security.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
 * Created by Trick on 2020/3/19.
 */
@Service
@Transactional
public class RegisterService {
    @Autowired
    private BasePatientDao basePatientDao;
    @Autowired
    private BasePatientMedicareCardDao basePatientMedicareCardDao;
    @Autowired
    private BasePatientWechatDao basePatientWechatDao;
    public Map<String,Object> registerPatient(String name, String mobile, String idcard, String ssc, String pw,String openid,String wxId)throws Exception{
        Map<String,Object> rs = new HashedMap();
        try{
            BasePatientDO p1 = basePatientDao.findByIdcardAndDel(idcard,"1");
            if(p1!=null){
                rs.put("code","-1");
                rs.put("mes","身份证已经存在");
                return rs;
            }
            List<BasePatientDO> p2 = basePatientDao.findByMobileAndDel(mobile,"1");
            if(p2!=null&&p2.size()>0){
                rs.put("code","-2");
                rs.put("mes","手机号已经存在");
                return rs;
            }
            BasePatientDO patient = new BasePatientDO();
            String salt = UUID.randomUUID().toString().substring(0,5);
            patient.setIdcard(idcard);
            patient.setName(name);
            patient.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
            patient.setSalt(salt);
            patient.setMobile(mobile);
            patient.setDel("1");
            patient.setEnabled(1);
            patient.setLocked(0);
            patient.setCreateTime(new Date());
            patient.setUpdateTime(new Date());
            patient.setBirthday(IdCardUtil.getBirthdayForIdcard(idcard));
            patient.setSex(Integer.parseInt(IdCardUtil.getSexForIdcard_new(idcard)));
            BasePatientDO temp = basePatientDao.save(patient);
            PatientMedicareCardDO medicareCardDO = new PatientMedicareCardDO();
            medicareCardDO.setDel("1");
            medicareCardDO.setType(PatientMedicareCardDO.Type.MedicareCard.getType());
            medicareCardDO.setCode(ssc);
            medicareCardDO.setPatientCode(temp.getId());
            basePatientMedicareCardDao.save(medicareCardDO);
            //保存微信信息
            if(StringUtils.isNotBlank(openid)&&StringUtils.isNotBlank(wxId)){
                BasePatientWechatDo wechatDo = new BasePatientWechatDo();
                wechatDo.setWechatId(wxId);
                wechatDo.setOpenid(openid);
                wechatDo.setPatientId(temp.getId());
                basePatientWechatDao.save(wechatDo);
            }
            rs.put("code","1");
            rs.put("mes","ok");
            rs.put("patient",temp);
            return rs;
        }catch (Exception e){
            e.printStackTrace();
        }
        rs.put("code","-3");
        rs.put("mes","保存用户信息失败");
        return rs;
    }
    public String updatePatientPw(String pw,String mobile){
        List<BasePatientDO> list = basePatientDao.findByMobileAndDel(mobile,"1");
        if(list!=null&&list.size()>0){
            for(BasePatientDO patient:list){
                String salt = UUID.randomUUID().toString().substring(0,5);
                patient.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
                patient.setSalt(salt);
            }
            basePatientDao.save(list);
        }else{
            return "-1";
        }
        return "ok";
    }
}

File diff suppressed because it is too large
+ 52 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/service/TEST.java


+ 1 - 1
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/http/HttpResponse.java

@ -1,4 +1,4 @@
package com.yihu.jw.util.http;
package com.yihu.jw.security.utils;
/**
 * Utils - Http请求辅助类,简化页面页面判断逻辑

+ 68 - 1
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/http/HttpUtils.java

@ -1,4 +1,4 @@
package com.yihu.jw.util.http;
package com.yihu.jw.security.utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
@ -8,7 +8,10 @@ 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;
@ -17,6 +20,7 @@ import org.apache.http.util.EntityUtils;
import org.springframework.util.StringUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
@ -364,6 +368,69 @@ public class HttpUtils {
        return httpResponse;
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, File file) throws Exception {
        return doUpload(url, params, null, file, null, null);
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, Map<String, String> headers, File file) throws Exception {
        return doUpload(url, params, headers, file, null, null);
    }
    public static HttpResponse doUpload(String url, Map<String, Object> params, Map<String, String> headers, File file, String username, String password) throws Exception {
        String response;
        int status;
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse closeableHttpResponse = null;
        HttpPost httpPost = new HttpPost(url);
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        FileBody fileBody = new FileBody(file);
        multipartEntityBuilder.addPart("file", 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();
            status = closeableHttpResponse.getStatusLine().getStatusCode();
            response = getRespString(resEntity);
        } finally {
            try {
                if (closeableHttpResponse != null) {
                    closeableHttpResponse.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (status != HttpStatus.SC_OK) {
//            LogService.getLogger().error(" POST UPLOAD: " + url + " " + status);
        }
        HttpResponse httpResponse = new HttpResponse(status, response);
        return httpResponse;
    }
    private static String getRespString(HttpEntity entity) throws Exception {
        if (entity == null) {

+ 30 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/XzzxCotroller.java

@ -0,0 +1,30 @@
package com.yihu.jw.entrance.controller;
import com.yihu.jw.hospital.prescription.service.entrance.XzzxEntranceService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by Trick on 2020/3/18.
 */
@RestController
@RequestMapping(value ="/xzzx")
@Api(value = "心脏中心平台服务", description = "心脏中心平台服务", tags = {"心脏中心平台服务"})
public class XzzxCotroller extends EnvelopRestEndpoint {
    @Autowired
    private XzzxEntranceService xzzxEntranceService;
    @GetMapping(value = "/getDeptInfo")
    @ApiOperation(value = "获取部门信息", notes = "获取部门信息")
    public ObjEnvelop getDeptInfo()throws Exception{
        return ObjEnvelop.getSuccess("ok",xzzxEntranceService.getDeptInfo());
    }
}

+ 33 - 1
svr/svr-internet-hospital-entrance/src/main/resources/application.yml

@ -183,4 +183,36 @@ fastDFS:
testPattern:
  sign: 0
wlyy:
  url: http://www.xmtyw.cn/wlyytest/
  url: http://www.xmtyw.cn/wlyytest/
---
#心脏中心前置机配置
spring:
  profiles: xzprod_in
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.103.155:7306/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
    username: jkzl
    password: jkzl@2020
# mq 是否获取his数据,flag代表获取演示数据,false代表获取his真实数据
demo:
  flag: false
hospital:
  url: https://172.16.1.34
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
im:
  im_list_get: http://172.16.1.42:3000/
  data_base_name: im
fastDFS:
  fastdfs_file_url: http://192.168.103.159:8888/
#是否开启i健康接口 0关闭,1开启
testPattern:
  sign: 0
wlyy:
  url: http://www.xmtyw.cn/wlyytest/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段  # todo 待配置

+ 4 - 4
svr/svr-internet-hospital-job/pom.xml

@ -51,10 +51,10 @@
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!--注释掉就不会读取git的配置,只会读取yml中的配置-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.springframework.cloud</groupId>-->
            <!--<artifactId>spring-cloud-starter-config</artifactId>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.json</groupId>

+ 0 - 24
svr/svr-internet-hospital-job/src/main/java/com/yihu/Application.java

@ -1,24 +0,0 @@
package com.yihu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
/**
 * Created by Trick on 2019/5/13.
 */
@SpringBootApplication
@EnableJpaAuditing
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args)  {
        SpringApplication.run(Application.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}

+ 0 - 58
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/ActiveMQConfig.java

@ -1,58 +0,0 @@
//package com.yihu.jw.config;
//
//import org.apache.activemq.ActiveMQConnectionFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.jms.annotation.EnableJms;
//import org.springframework.jms.connection.CachingConnectionFactory;
//import org.springframework.jms.core.JmsTemplate;
//
///**
// * Created by chenweida on 2017/9/9.
// * 生产者配置
// */
//@EnableJms
//@Configuration
//public class ActiveMQConfig {
//   @Value("${activemq.username}")
//    private String username;
//    @Value("${activemq.password}")
//    private String password;
//    @Value("${activemq.url}")
//    private String url;
//
//    @Bean
//    public ActiveMQConnectionFactory activeMQConnectionFactory() {
//        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(username, password, url);
//        //设置异步发送
//        activeMQConnectionFactory.setUseAsyncSend(true);
//        return activeMQConnectionFactory;
//    }
//
//    /**
//     * 缓存session链接
//     *
//     * @return
//     */
//    @Bean
//    @Primary
//    public CachingConnectionFactory CachingConnectionFactory() {
//        CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
//        //目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory
//        cachingConnectionFactory.setTargetConnectionFactory(activeMQConnectionFactory());
//        //Session缓存数量,这里属性也可以直接在这里配置
//        cachingConnectionFactory.setSessionCacheSize(100);
//        return cachingConnectionFactory;
//    }
//
//    @Bean
//    public JmsTemplate jmsTemplate() {
//        JmsTemplate jmsTemplate = new JmsTemplate();
//        jmsTemplate.setConnectionFactory(CachingConnectionFactory());
//
//        return jmsTemplate;
//    }
//
//}

+ 0 - 11
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/MvcConfig.java

@ -1,11 +0,0 @@
//package com.yihu.jw.config;
//
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
//
///**
// * Created by chenweida on 2017/4/6.
// */
//@Configuration
//public class MvcConfig extends WebMvcConfigurerAdapter {
//}

+ 0 - 123
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/SwaggerConfig.java

@ -1,123 +0,0 @@
//package com.yihu.jw.config;
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.context.request.async.DeferredResult;
//import springfox.documentation.builders.PathSelectors;
//import springfox.documentation.service.ApiInfo;
//import springfox.documentation.spi.DocumentationType;
//import springfox.documentation.spring.web.plugins.Docket;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;
//
//import static com.google.common.base.Predicates.or;
//import static springfox.documentation.builders.PathSelectors.regex;
//
//
//@EnableSwagger2
//@Configuration
//public class SwaggerConfig {
//    private static final String PUBLIC_API = "Default";
//    private static final String Doctor_API = "doctor";
//    private static final String Patient_API = "patient";
//    private static final String Other_API = "other";
//
//    @Bean
//    public Docket publicAPI() {
//        return new Docket(DocumentationType.SWAGGER_2)
//                .groupName(Doctor_API)
//                .genericModelSubstitutes(DeferredResult.class)
//                .useDefaultResponseMessages(false)
//                .forCodeGeneration(true)
//                .pathMapping("/")
//                .select()
//                .paths(PathSelectors.regex("/doctor/.*"))
//                .build()
//                .apiInfo(publicApiInfo());
//    }
//
//    private ApiInfo publicApiInfo() {
//        ApiInfo apiInfo = new ApiInfo("三师平台API",
//                "向PC端,微信、App等应用提供功能与数据接口。",
//                "1.0",
//                "No terms of service",
//                "admin@jkzl.com",
//                "The Apache License, Version 2.0",
//                "http://www.apache.org/licenses/LICENSE-2.0.html"
//        );
//
//        return apiInfo;
//    }
//
//    @Bean
//    public Docket patientAPI() {
//        return new Docket(DocumentationType.SWAGGER_2)
//                .groupName(Patient_API)
//                .genericModelSubstitutes(DeferredResult.class)
//                .useDefaultResponseMessages(false)
//                .forCodeGeneration(true)
//                .pathMapping("/")
//                .select()
//                .paths(PathSelectors.regex("/patient/.*"))
//                .build()
//                .apiInfo(patientApiInfo());
//    }
//
//    private ApiInfo patientApiInfo() {
//        ApiInfo apiInfo = new ApiInfo("三师平台API",
//                "向PC端,微信、App等应用提供功能与数据接口。",
//                "1.0",
//                "No terms of service",
//                "admin@jkzl.com",
//                "The Apache License, Version 2.0",
//                "http://www.apache.org/licenses/LICENSE-2.0.html"
//        );
//
//        return apiInfo;
//    }
//
//    @Bean
//    public Docket otherAPI() {
//        return new Docket(DocumentationType.SWAGGER_2)
//                .groupName(Other_API)
//                .genericModelSubstitutes(DeferredResult.class)
//                .useDefaultResponseMessages(false)
//                .forCodeGeneration(true)
//                .pathMapping("/")
//                .select()
//                .paths(or(
//                        regex("/third/.*"),
//                        regex("/statistics/.*"),
//                        regex("/statistics/province/.*"),
//                        regex("/job/.*"),
//                        regex("/family_contract/.*"),
//                        regex("/hosptail/.*"),
//                        regex("/manage_util/.*"),
//                        regex("/common/.*"),
//                        regex("/hospitals/.*"),
//                        regex("/upload/.*"),
//                        regex("/weixin/.*"),
//                        regex("/wx/.*"),
//                        regex("/area/.*"),
//                        regex("/login/.*"),
//                        regex("/qrcode/.*"),
//                        regex("/onepay/.*"),
//                        regex("/wlyy_service/.*"),
//                        regex("/zydict/.*")
//                ))
//                .build()
//                .apiInfo(otherApiInfo());
//    }
//
//    private ApiInfo otherApiInfo() {
//        ApiInfo apiInfo = new ApiInfo("三师平台API",
//                "向PC端,微信、App等应用提供功能与数据接口。",
//                "1.0",
//                "No terms of service",
//                "admin@jkzl.com",
//                "The Apache License, Version 2.0",
//                "http://www.apache.org/licenses/LICENSE-2.0.html"
//        );
//
//        return apiInfo;
//    }
//}

+ 0 - 54
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/async/AsyncConfig.java

@ -1,54 +0,0 @@
package com.yihu.jw.config.async;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
 * Created by chenweida on 2016.10.18.
 * 启用多綫程
 */
@Configuration
@EnableAsync
public class AsyncConfig {
    /**
     * 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程
     */
    private int corePoolSize = 5;
    /**
     * 如果池中的线程数=maximumPoolSize,则有空闲线程使用空闲线程,否则新任务放入queueCapacity.
     * 设定 比 系统native thread个数要大的话,会优先抛出Java.lang.OutOfMemoryError: unable to create new native thread
     */
    private int maxPoolSize = 10;
    /**
     * 缓冲队列大小
     */
    private int queueCapacity = 100;
    /**
     * 线程池维护线程所允许的空闲时间  秒
     */
    private int keepAliveSeconds = 300;
    @Bean
    public Executor wlyyExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setKeepAliveSeconds(keepAliveSeconds);
        /** Reject策略预定义有四种:
         (1)ThreadPoolExecutor.AbortPolicy策略,是默认的策略,处理程序遭到拒绝将抛出运行时 RejectedExecutionException。
         (2)ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃.
         (3)ThreadPoolExecutor.DiscardPolicy策略,不能执行的任务将被丢弃.
         (4)ThreadPoolExecutor.DiscardOldestPolicy策略,如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程).
         */
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}

+ 0 - 104
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/es/ElasticFactory.java

@ -1,104 +0,0 @@
//package com.yihu.jw.config.es;
//
//import io.searchbox.client.JestClient;
//import io.searchbox.client.JestClientFactory;
//import io.searchbox.client.config.HttpClientConfig;
//import org.elasticsearch.client.Client;
//import org.elasticsearch.client.transport.TransportClient;
//import org.elasticsearch.common.settings.Settings;
//import org.elasticsearch.common.transport.InetSocketTransportAddress;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import java.net.InetAddress;
//import java.net.UnknownHostException;
//import java.util.Arrays;
//import java.util.concurrent.TimeUnit;
//
///**
// * Created by chenweida on 2017/6/5.
// */
//
//@Component
//public class ElasticFactory {
//	private static JestClientFactory factory = null;
//
//	@Value("${es.host}")
//	private String esHost;//http://59.61.92.90:9065,http://59.61.92.90:9067
//	@Value("${es.tHost}")
//	private String tHost;// 59.61.92.90:9066,59.61.92.90:9068
//	@Value("${es.clusterName}")
//	private String clusterName;
////-----------------------------------jestClient----------------------------------------
//
//	/**
//	 * @param "http://localhost:9200"
//	 * @return
//	 */
//	public JestClient getJestClient() {
//		if (factory == null) {
//			//初始化链接
//			init();
//		}
//		return factory.getObject();
//	}
//
//	/**
//	 * 初始化链接
//	 * 9200
//	 */
//	public synchronized void init() {
//		String[] hostArray = esHost.split(",");
//		// Construct a new Jest client according to configuration via factory
//		factory = new JestClientFactory();
//		HttpClientConfig httpClientConfig = new HttpClientConfig
//				.Builder(Arrays.asList(hostArray))
//				.multiThreaded(true)
//				.maxTotalConnection(50)// 最大链接
//				.maxConnectionIdleTime(120, TimeUnit.SECONDS)//链接等待时间
//				.connTimeout(60 * 1000)
//				// .discoveryEnabled(true)
//				.readTimeout(60 * 1000)//60秒
//				.build();
//
//
//		factory.setHttpClientConfig(httpClientConfig);//得到链接
//	}
//
//	//-----------------------------------TransportClient----------------------------------------
//	private TransportClient transportClient;
//
//	public Client getTransportClient() {
//		try {
//			initTranClient();
//			return transportClient;
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	/**
//	 * 9300
//	 *
//	 * @throws UnknownHostException
//	 */
//	private synchronized void initTranClient() throws UnknownHostException {
//		if (transportClient == null) {
//			String[] hosts = tHost.split(",");
//			Settings settings = Settings.settingsBuilder()
//					// .put("client.transport.sniff", true)//开启嗅探功能
//					.put("cluster.name", StringUtils.isEmpty(clusterName) ? "jkzl" : clusterName)//默认集群名字是jkzl
//					.build();
//
//			transportClient = TransportClient.builder().settings(settings).build();
//
//			for (String oneHost : hosts) {
//				String[] hostAndport = oneHost.split(":");
//				transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostAndport[0]), Integer.valueOf(hostAndport[1])));
//			}
//		}
//	}
//}
//

+ 0 - 54
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/es/ElastricSearchSave.java

@ -1,54 +0,0 @@
//package com.yihu.jw.config.es;
//
//import io.searchbox.client.JestClient;
//import io.searchbox.core.Bulk;
//import io.searchbox.core.BulkResult;
//import io.searchbox.core.Index;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Scope;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//
//;
//
///**
// * Created by chenweida on 2017/6/2.
// */
//@Component
//@Scope("prototype")
//public class ElastricSearchSave {
//
//    private Logger logger = LoggerFactory.getLogger(ElastricSearchSave.class);
//    @Autowired
//    private ElasticFactory elasticFactory;
//
//    public Boolean save(List sms, String esIndex, String esType) {
//        JestClient jestClient = null;
//        try {
//            //得到链接
//            jestClient = elasticFactory.getJestClient();
//
//            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esIndex).defaultType(esType);
//            for (Object obj : sms) {
//                Index index = new Index.Builder(obj).build();
//                bulk.addAction(index);
//            }
//            BulkResult br = jestClient.execute(bulk.build());
//            logger.info("save data count:" + sms.size());
//            logger.info("save flag:" + br.isSucceeded());
//            return br.isSucceeded();
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error(" save error :" + e.getMessage());
//        } finally {
//            if (jestClient != null) {
//                jestClient.shutdownClient();
//            }
//        }
//        return null;
//    }
//
//}

+ 0 - 25
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/quartz/JobFactory.java

@ -1,25 +0,0 @@
package com.yihu.jw.config.quartz;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
/**
 * Created by Administrator on 2016.10.12.
 * 為了讓quartz種可以使用Spring的注入
 */
@Component("jobFactory")
public class JobFactory extends AdaptableJobFactory {
    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        // 调用父类的方法
        Object jobInstance = super.createJobInstance(bundle);
       // 进行注入
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

+ 0 - 56
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/quartz/SchedulerConfig.java

@ -1,56 +0,0 @@
package com.yihu.jw.config.quartz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.Properties;
/**
 * Created by chenweida on 2016/2/3.
 */
@Configuration
public class SchedulerConfig {
    @Autowired
    private ApplicationContext applicationContext;
    @Autowired
    private JobFactory jobFactory;
    @Autowired
    private DataSource dataSource;
    @Value("${quartz.name}")
    private String schedulerFactoryBeanName;
    @Bean
    SchedulerFactoryBean schedulerFactoryBeanWlyy() throws IOException {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        bean.setJobFactory(jobFactory);
        bean.setApplicationContext(this.applicationContext);
        bean.setOverwriteExistingJobs(true);
        bean.setStartupDelay(20);// 延时启动
        bean.setBeanName(schedulerFactoryBeanName);
        bean.setAutoStartup(true);
        bean.setDataSource(dataSource);
        bean.setQuartzProperties(quartzProperties());
        return bean;
    }
    /**
     * quartz配置文件
     * @return
     * @throws IOException
     */
    @Bean
    public Properties quartzProperties() throws IOException {
        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
        propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
        propertiesFactoryBean.afterPropertiesSet();
        return propertiesFactoryBean.getObject();
    }
}

+ 0 - 15
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/config/war/ServletInitializer.java

@ -1,15 +0,0 @@
//package com.yihu.jw.config.war;//package com.yihu.wlyy.config.war;
//
//import com.yihu.wlyy.Application;
//import org.springframework.boot.builder.SpringApplicationBuilder;
//import org.springframework.boot.web.support.SpringBootServletInitializer;
//
///**
// * Created by Administrator on 2016.10.14.
// */
//public class ServletInitializer extends SpringBootServletInitializer {
//    @Override
//    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//        return application.sources(Application.class);
//    }
//}

+ 0 - 67
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/event/ApplicationEvent.java

@ -1,67 +0,0 @@
package com.yihu.jw.event;
import com.yihu.jw.job.DataUploadJob;
import com.yihu.jw.job.PrescriptionOverdueJob;
import com.yihu.jw.job.PrescriptionStatusUpdateJob;
import com.yihu.jw.job.QuartzHelper;
import com.yihu.jw.util.SystemConf;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;
import java.util.HashMap;
/**
 * Created by zdm on 2017/3/10.
 */
@Service
public class ApplicationEvent implements ApplicationListener<ContextRefreshedEvent> {
    private Logger logger = LoggerFactory.getLogger(ApplicationEvent.class);
    @Autowired
    QuartzHelper quartzHelper;
    @Override
    public void onApplicationEvent(ContextRefreshedEvent ContextRefreshedEvent) {
        try {
//=================中山医院发布启动======================================================
//            //互联网医院处方状态更新job
//            if (!quartzHelper.isExistJob("prescriptionStatus_update_job")) {
//                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("prescriptionStatus_update_job");
//                quartzHelper.addJob(PrescriptionStatusUpdateJob.class, trigger, "prescriptionStatus_update_job", new HashMap<String, Object>());
//                logger.info("prescriptionStatus_update_job  job success");
//            } else {
//                logger.info("prescriptionStatus_update_job  job exist");
//            }
//
//            //门诊过期
//            if (!quartzHelper.isExistJob("prescription_overdue_job")) {
//                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("prescription_overdue_job");
//                quartzHelper.addJob(PrescriptionOverdueJob.class, trigger, "prescription_overdue_job", new HashMap<String, Object>());
//                logger.info("prescription_overdue_job  job success");
//            } else {
//                logger.info("prescription_overdue_job  job exist");
//            }
//
//
//            //互联网医院 监管平台上报
//            if (!quartzHelper.isExistJob("data_upload_job")) {
//                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("data_upload_job");
//                quartzHelper.addJob(DataUploadJob.class, trigger, "data_upload_job", new HashMap<String, Object>());
//                logger.info("data_upload_job  job success");
//            } else {
//                logger.info("data_upload_job  job exist");
//            }
//=================中山医院发布启动======================================================
        } catch (Exception e) {
            logger.info("followup_plan_remind job start failed");
        }
    }
}

+ 0 - 253
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/Constant.java

@ -1,253 +0,0 @@
package com.yihu.jw.job;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * Created by Administrator on 2016.08.18.
 * 常量类
 */
public class Constant {
    public static String city="350200";
    public static String cityName="厦门市";
    //二级维度的性别
    public static String level_sex_1="1";
    public static String level_sex_2="2";
    public static String level_sex_3="3";
    public static String level_sex_1_name="女";
    public static String level_sex_2_name="男";
    public static String level_sex_3_name="未知";
    //二级维度的年龄
    public static String level_age_1="1";
    public static String level_age_2="2";
    public static String level_age_3="3";
    public static String level_age_4="4";
    public static String level_age_5="5";
    public static String level_age_6="6";
    public static String level_age_1_name="0~6";
    public static String level_age_2_name="7~18";
    public static String level_age_3_name="19~30";
    public static String level_age_4_name="31~50";
    public static String level_age_5_name="51~65";
    public static String level_age_6_name=">65";
    //二级维度的组
    public static String level_group_1="1";
    public static String level_group_2="2";
    public static String level_group_3="3";
    public static String level_group_4="4";
    public static String level_group_5="5";
    public static String level_group_6="6";
    public static String level_group_1_name="普通人群";
    public static String level_group_2_name="慢病人群";
    public static String level_group_3_name="65岁以上人群";
    public static String level_group_4_name="高血压";
    public static String level_group_5_name="糖尿病";
    public static String level_group_6_name="糖尿病和高血压";
    //二级维度签约扣费
    public static String level_expense_0="0";
    public static String level_expense_1="1";
    public static String level_expense_2="2";
    public static String level_expense_0_name="未扣费";
    public static String level_expense_1_name="已扣费";
    public static String level_expense_2_name="已退费";
    //二级维度健康分布
    public static String level_health_fb_0="0";
    public static String level_health_fb_1="1";
    public static String level_health_fb_2="2";
    public static String level_health_fb_3="3";
    public static String level_health_fb_4="4";
    public static String level_health_fb_0_name="未标注";
    public static String level_health_fb_1_name="健康人群";
    public static String level_health_fb_2_name="患病人群";
    public static String level_health_fb_3_name="高危人群";
    public static String level_health_fb_4_name="恢复期人群";
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_2="2";
    public static String level_disease_3="3";
    public static String level_disease_4="4";
    public static String level_disease_1_name="高血压";
    public static String level_disease_2_name="糖尿病";
    public static String level_disease_3_name="糖尿病和高血压";
    public static String level_disease_4_name="健康人群";
    public static String getlevelHealthFbName(String key){
        switch (key){
            case "1":{
                return level_health_fb_1_name;
            }
            case "2":{
                return level_health_fb_2_name;
            }
            case "3":{
                return level_health_fb_3_name;
            }
            case "4":{
                return level_health_fb_4_name;
            }
            case "0":{
                return level_health_fb_0_name;
            }
        }
        return "";
    }
    public static String getLevelExpenseName(String key){
        switch (key){
            case "1":{
                return level_expense_1_name;
            }
            case "2":{
                return level_expense_2_name;
            }
            case "0":{
                return level_expense_0_name;
            }
        }
        return "";
    }
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
                return level_sex_1_name;
            }
            case "2":{
                return level_sex_2_name;
            }
            case "3":{
                return level_sex_3_name;
            }
        }
        return "";
    }
    public static String getLevelGroupName(String key){
        switch (key){
            case "1":{
                return level_group_1_name;
            }
            case "2":{
                return level_group_2_name;
            }
            case "3":{
                return level_group_3_name;
            }
            case "4":{
                return level_group_4_name;
            }
            case "5":{
                return level_group_5_name;
            }
            case "6":{
                return level_group_6_name;
            }
        }
        return "";
    }
    public static String getLevelAgeName(String key){
        switch (key){
            case "1":{
                return level_age_1_name;
            }
            case "2":{
                return level_age_2_name;
            }
            case "3":{
                return level_age_3_name;
            }
            case "4":{
                return level_age_4_name;
            }
            case "5":{
                return level_age_5_name;
            }
            case "6":{
                return level_age_6_name;
            }
        }
        return "";
    }
    public static String getLevelDiseaseName(String key){
        switch (key){
            case "1":{
                return level_disease_1_name;
            }
            case "2":{
                return level_disease_2_name;
            }
            case "3":{
                return level_disease_3_name;
            }
            case "4":{
                return level_disease_4_name;
            }
        }
        return "";
    }
    public static String getStartTime() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "-06-30";
        } else {
            return (1900 + today.getYear() - 1) + "-06-30";
        }
    }
    public static String getStartYear() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) + "";
        }
    }
    public static String getNowYear() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-06-30";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) + "";
        }
    }
    public static String getNowYearByDate(String todayString) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = simpleDateFormat.parse(todayString);
        String startDateString = (1900 + today.getYear()) + "-06-30";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) + "";
        }
    }
}

+ 0 - 125
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/DataUploadJob.java

@ -1,125 +0,0 @@
package com.yihu.jw.job;
import com.yihu.jw.internet.service.InternetService;
import com.yihu.jw.util.date.DateUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Trick on 2019/11/4.
 */
public class DataUploadJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(DataUploadJob.class);
    @Autowired
    private InternetService internetService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("START========DataUploadJob========");
        try {
            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 02:00:00 执行,同步前一天的数据
            String endDate = DateUtil.dateToStr(DateUtil.getNow(),"yyyy-MM-dd")+" 00:00:00";
            String startDate = DateUtil.dateToStr(DateUtil.getPreDays(DateUtil.getNow(),-1),"yyyy-MM-dd")+" 00:00:00";
            String res = "";
            //2、分步执行需要JOB执行的服务
            logger.info("START========2.5 网上预约挂号上传开始========");
            try {
                res = internetService.upAppointmentOnline(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.5 网上预约挂号上传结束========" + res);
            logger.info("START========2.6 网上医技预约上传开始========");
            try {
                res = internetService.upMedicalOnline(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.6 网上医技预约上传结束========" + res);
            logger.info("START========2.7 医生评价信息开始========");
            try {
                res = internetService.upNsDoctorScore(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.7 医生评价信息结束========" + res);
            logger.info("START========2.8 网络咨询服务信息开始========");
            try {
                res = internetService.upNsOnlineAsk(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.8 网络咨询服务信息结束========" + res);
            logger.info("START========2.9 网络诊疗服务信息========");
            try {
                res = internetService.upNsOnlineMed(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.9 网络诊疗服务信息========" + res);
            logger.info("START========2.10 电子处方表开始========");
            try {
                res = internetService.upPrescription(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.10 电子处方表结束========" + res);
            logger.info("START========2.11 电子处方_药品明细表开始 ========");
            try {
                res = internetService.upPrescriptionDrug(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.11 电子处方_药品明细表结束 ========" + res);
            logger.info("START========2.12 在线诊疗服务信息-过程图片上传 开始========");
            try {
                res = internetService.upNsOnlineImg(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.12 在线诊疗服务信息-过程图片上传 结束========" + res);
            logger.info("END========DataUploadJob 执行结束========");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===DataUploadJob,message:"+e.getMessage());
        }
    }
}

+ 0 - 106
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/InternetUpdateJob.java

@ -1,106 +0,0 @@
//package com.yihu.jw.job;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * 互联网监管平台更新 job
// * Created by cws on 2019/2/20.
// */
//public class InternetUpdateJobateJob implements Job {
//    private static final Logger logger = LoggerFactory.getLogger(InternetUpdateJobateJob.class);
//    @Autowired
//    private InternetService internetService;
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========InternetUpdateJob========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//            logger.info("START========2.5 网上预约挂号上传开始========");
//            try {
//                res = internetService.upAppointmentOnline(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.5 网上预约挂号上传结束========" + res);
//
//
//
//            logger.info("START========2.6 网上医技预约上传开始========");
//            try {
//                res = internetService.upMedicalOnline(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.6 网上医技预约上传结束========" + res);
//
//
//
//            logger.info("START========2.7 医生评价信息开始========");
//            try {
//                res = internetService.upNsDoctorScore(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.7 医生评价信息结束========" + res);
//
//
//
//            logger.info("START========2.8 网络咨询服务信息开始========");
//            try {
//                res = internetService.upNsOnlineAsk(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.8 网络咨询服务信息结束========" + res);
//
//
//
//            logger.info("START========2.9 网络诊疗服务信息========");
//            try {
//                res = internetService.upNsOnlineMed(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.9 网络诊疗服务信息========" + res);
//
//
//
//            logger.info("START========2.10 电子处方表开始========");
//            try {
//                res = internetService.upPrescription(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.10 电子处方表结束========" + res);
//
//
//
//            logger.info("START========2.11 电子处方_药品明细表开始 ========");
//            try {
//                res = internetService.upPrescriptionDrug(startDate,endDate,null);
//            }catch (Exception e){
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.11 电子处方_药品明细表结束 ========" + res);
//
//            logger.info("END========InternetUpdateJob 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===InternetUpdateJob,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 30
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/PrescriptionOverdueJob.java

@ -1,30 +0,0 @@
package com.yihu.jw.job;
import com.yihu.jw.service.channel.PrescriptionStatusUpdateService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Trick on 2019/10/15.
 */
public class PrescriptionOverdueJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(PrescriptionOverdueJob.class);
    @Autowired
    private PrescriptionStatusUpdateService prescriptionStatusUpdateService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("START========PrescriptionOverdueJob========");
        try {
            prescriptionStatusUpdateService.setOutPatientOver();
            logger.info("END========PrescriptionOverdueJob========");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===PrescriptionOverdueJob,message:"+e.getMessage());
        }
    }
}

+ 0 - 36
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/PrescriptionStatusUpdateJob.java

@ -1,36 +0,0 @@
package com.yihu.jw.job;
import com.yihu.jw.service.channel.PrescriptionStatusUpdateService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 处方状态更新job
 * Created by zdm on 2019/2/20.
 * 互联网医院线上下处方之后保存到中山医院的临时表-
 * (中山医院正式下处方,审核成功之后保存,审核失败不保存)-审核成功之后药房发药,回调互联网医院。
 * 在正式下处方的时候,互联网医院每两分钟到中山医院获取处方详情:
 * 1、若是可以正常查询且状态为审方成功,则只需要变更状态,调用im消息通知居民
 * 2、若可以正常查询处方,状态为失败,则需要将状态改为失败,并根据处方号重新获取新的处方直到成功为止。
 * 3、若根据处方号查询不到处方,则需要根据门诊就诊记录获取处方号,再获取处方状态重复1、2
 */
public class PrescriptionStatusUpdateJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(PrescriptionStatusUpdateJob.class);
    @Autowired
    private PrescriptionStatusUpdateService prescriptionStatusUpdateService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("START========PrescriptionStatusUpdateJob========");
        try {
            prescriptionStatusUpdateService.autoPush();
            logger.info("END========PrescriptionStatusUpdateJob========");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===PrescriptionStatusUpdateJob,message:"+e.getMessage());
        }
    }
}

+ 0 - 124
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/QuartzHelper.java

@ -1,124 +0,0 @@
package com.yihu.jw.job;
import org.apache.commons.collections.map.HashedMap;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
@Component("quartzHelper")
public class QuartzHelper {
    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;
    private Scheduler scheduler = null;
    @PostConstruct
    public void init() {
        try {
            scheduler = schedulerFactoryBean.getScheduler();
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
    public Map<String,Object> getCalendar()throws Exception{
        Map<String,Object> rs = new HashedMap();
        rs.put("JobGroupNames ",scheduler.getJobGroupNames());
        rs.put("SchedulerName ",scheduler.getSchedulerName());
        rs.put("TriggerGroups ",scheduler.getPausedTriggerGroups());
        return rs;
    }
    public void addJob(Class jobClass, String cronString, String jobKey,
                       Map<String, Object> params) throws Exception {
        if (!CronExpression.isValidExpression(cronString)) {
            throw new Exception("cronExpression is not a valid Expression");
        }
        try {
            JobDetail job = JobBuilder.newJob(jobClass)
                    .withIdentity("job-id:" + jobKey, "job-group:" + jobKey)
                    .build();
            JobDataMap jobDataMap = job.getJobDataMap();
            jobDataMap.putAll(params);
            CronTrigger trigger = TriggerBuilder
                    .newTrigger()
                    .withIdentity("trigger-name:" + jobKey,
                            "trigger-group:" + jobKey)
                    .withSchedule(CronScheduleBuilder.cronSchedule(cronString))
                    .build();
            scheduler.scheduleJob(job, trigger);
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
    public void removeJob(String jobKeyString) throws Exception {
        TriggerKey triggerKey = new TriggerKey("trigger-name:" + jobKeyString,
                "trigger-group:" + jobKeyString);
//        JobKey jobName = new JobKey("job-group:" + jobKeyString, "job-id:"
//                + jobKeyString);
        JobKey jobName = new JobKey("job-id:" + jobKeyString, "job-group:"
                + jobKeyString);
        scheduler.pauseTrigger(triggerKey);// 停止触发器
        scheduler.unscheduleJob(triggerKey);// 移除触发器
        scheduler.deleteJob(jobName);// 删除任务
    }
    public boolean isExistJob(String jobKey) throws SchedulerException {
        JobKey jk = new JobKey("job-id:" + jobKey, "job-group:" + jobKey);
        if (scheduler.checkExists(jk)) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 立即执行任务。
     *
     * @param jobClass
     * @param id
     * @param params
     * @throws Exception
     */
    public void startNow(Class jobClass, String id, Map<String, Object> params) throws Exception {
        startAt(new Date(), jobClass, id, params);
    }
    /**
     * 在指定时间点执行。
     *
     * @param time
     * @param jobClass
     * @param id
     * @param params
     * @throws Exception
     */
    public void startAt(Date time, Class jobClass, String id, Map<String, Object> params) throws Exception {
        JobDetail job = JobBuilder.newJob(jobClass).
                withIdentity("job-id:" + id, "job-group:" + id)
                .build();
        JobDataMap jobDataMap = job.getJobDataMap();
        if(null != params) jobDataMap.putAll(params);
        SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-id:" + id, "group-group:" + id)
                .startAt(time)
                .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(0))
                .build();
        scheduler.scheduleJob(job, trigger);
        scheduler.start();
    }
}

+ 0 - 44
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload210Job.java

@ -1,44 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload210Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload210Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload210Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//            logger.info("START========2.10 电子处方表开始========");
//            res = internetService.upPrescription(startDate,endDate,null);
//            logger.info("END==========2.10 电子处方表结束========" + res);
//
//
//            logger.info("END========dataUpload210Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload210Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 43
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload211Job.java

@ -1,43 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload211Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload211Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload211Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//            logger.info("START========2.11 电子处方_药品明细表开始 ========");
//            res = internetService.upPrescriptionDrug(startDate,endDate,null);
//            logger.info("END==========2.11 电子处方_药品明细表结束 ========" + res);
//
//            logger.info("END========dataUpload211Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload211Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 43
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload23Job.java

@ -1,43 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload23Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload23Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload23Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//            logger.info("START========2.3 医师基本信息========");
//            res = internetService.upNsOnlineMedDoctorRecord(startDate,endDate,null);
//            logger.info("END==========2.3 医师基本信息 ========" + res);
//
//            logger.info("END========dataUpload23Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload23Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 43
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload25Job.java

@ -1,43 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload25Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload25Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload25Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//            logger.info("START========2.5 网上预约挂号上传开始========");
//            res = internetService.upAppointmentOnline(startDate,endDate,null);
//            logger.info("END==========2.5 网上预约挂号上传结束========" + res);
//
//            logger.info("END========dataUpload25Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload25Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 44
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload26Job.java

@ -1,44 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload26Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload26Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload26Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//
//            logger.info("START========2.6 网上医技预约上传开始========");
//            res = internetService.upMedicalOnline(startDate,endDate,null);
//            logger.info("END==========2.6 网上医技预约上传结束========" + res);
//
//            logger.info("END========dataUpload26Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload26Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 45
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload27Job.java

@ -1,45 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload27Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload27Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload27Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//
//            logger.info("START========2.7 医生评价信息开始========");
//            res = internetService.upNsDoctorScore(startDate,endDate,null);
//            logger.info("END==========2.7 医生评价信息结束========" + res);
//
//
//            logger.info("END========dataUpload27Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload27Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 45
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload28Job.java

@ -1,45 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload28Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload28Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload28Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//
//            logger.info("START========2.8 网络咨询服务信息开始========");
//            res = internetService.upNsOnlineAsk(startDate,endDate,null);
//            logger.info("END==========2.8 网络咨询服务信息结束========" + res);
//
//
//            logger.info("END========dataUpload28Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===dataUpload28Job,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 44
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dataupload/DataUpload29Job.java

@ -1,44 +0,0 @@
//package com.yihu.jw.job.dataupload;
//
//import com.yihu.jw.internet.service.InternetService;
//import com.yihu.jw.util.date.DateUtil;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * Created by Trick on 2019/10/22.
// */
//public class DataUpload29Job implements Job {
//
//    private static final Logger logger = LoggerFactory.getLogger(DataUpload29Job.class);
//    @Autowired
//    private InternetService internetService;
//
//    @Override
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        logger.info("START========dataUpload29Job========");
//        try {
//            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 00:00:00 执行,同步前一天的数据
//            String endDate = DateUtil.dateToStrLong(DateUtil.getNow());
//            String startDate = DateUtil.dateToStrLong(DateUtil.getPreDays(DateUtil.getNow(),1));
//
//            String res = "";
//
//            // 2、分步执行需要JOB执行的服务
//
//            logger.info("START========2.9 网络诊疗服务信息========");
//            res = internetService.upNsOnlineMed(startDate,endDate,null);
//            logger.info("END==========2.9 网络诊疗服务信息========" + res);
//
//            logger.info("END========dataUpload29Job 执行结束========");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("END===ERROE===InternetUpdateJob,message:"+e.getMessage());
//        }
//    }
//}

+ 0 - 127
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/ykyy/YkyyDataUploadJob.java

@ -1,127 +0,0 @@
package com.yihu.jw.job.ykyy;
import com.yihu.jw.internet.service.InternetService;
import com.yihu.jw.internet.service.ykyy.YkyyInternetService;
import com.yihu.jw.job.DataUploadJob;
import com.yihu.jw.util.date.DateUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Trick on 2020/3/11.
 */
public class YkyyDataUploadJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(DataUploadJob.class);
    @Autowired
    private YkyyInternetService internetService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("START========DataUploadJob========");
        try {
            //1、获取 JOB 执行区间  执行时间点的前一天  时间点定在每天的 02:00:00 执行,同步前一天的数据
            String endDate = DateUtil.dateToStr(DateUtil.getNow(),"yyyy-MM-dd")+" 00:00:00";
            String startDate = DateUtil.dateToStr(DateUtil.getPreDays(DateUtil.getNow(),-1),"yyyy-MM-dd")+" 00:00:00";
            String res = "";
            //2、分步执行需要JOB执行的服务
            logger.info("START========2.5 网上预约挂号上传开始========");
            try {
                res = internetService.upAppointmentOnline(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.5 网上预约挂号上传结束========" + res);
//            logger.info("START========2.6 网上医技预约上传开始========");
//            try {
//                res = internetService.upMedicalOnline(startDate,endDate,null);
//            }catch (Exception e){
//                e.printStackTrace();
//                logger.error(e.toString());
//            }
//            logger.info("END==========2.6 网上医技预约上传结束========" + res);
            logger.info("START========2.7 医生评价信息开始========");
            try {
                res = internetService.upNsDoctorScore(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.7 医生评价信息结束========" + res);
            logger.info("START========2.8 网络咨询服务信息开始========");
            try {
                res = internetService.upNsOnlineAsk(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.8 网络咨询服务信息结束========" + res);
            logger.info("START========2.9 网络诊疗服务信息========");
            try {
                res = internetService.upNsOnlineMed(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.9 网络诊疗服务信息========" + res);
            logger.info("START========2.10 电子处方表开始========");
            try {
                res = internetService.upPrescription(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.10 电子处方表结束========" + res);
            logger.info("START========2.11 电子处方_药品明细表开始 ========");
            try {
                res = internetService.upPrescriptionDrug(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.11 电子处方_药品明细表结束 ========" + res);
            logger.info("START========2.12 在线诊疗服务信息-过程图片上传 开始========");
            try {
                res = internetService.upNsOnlineImg(startDate,endDate,null);
            }catch (Exception e){
                e.printStackTrace();
                logger.error(e.toString());
            }
            logger.info("END==========2.12 在线诊疗服务信息-过程图片上传 结束========" + res);
            logger.info("END========DataUploadJob 执行结束========");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===DataUploadJob,message:"+e.getMessage());
        }
    }
}

+ 0 - 17
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/job/JobConfigDao.java

@ -1,17 +0,0 @@
package com.yihu.jw.repository.job;
import com.yihu.jw.entity.job.QuartzJobConfig;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Administrator on 2016/8/16.
 */
public interface JobConfigDao extends PagingAndSortingRepository<QuartzJobConfig, String>,JpaSpecificationExecutor<QuartzJobConfig> {
    @Query(" from QuartzJobConfig p where p.status=?1 and p.del='1'")
    List<QuartzJobConfig> findByStatus(String s);
}

+ 0 - 26
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/job/QuartzJobConfigDao.java

@ -1,26 +0,0 @@
package com.yihu.jw.repository.job;
import com.yihu.jw.entity.job.QuartzJobConfig;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Administrator on 2016/8/17.
 */
public interface QuartzJobConfigDao extends PagingAndSortingRepository<QuartzJobConfig, String>, JpaSpecificationExecutor<QuartzJobConfig> {
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.status=?2 and a.del='1'")
    QuartzJobConfig findById(String code, String status);
    @Query(" FROM QuartzJobConfig a WHERE a.status=?1 and a.del='1'")
    List<QuartzJobConfig> findByAll(String s);
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14)  and a.del='1' ")
    List<QuartzJobConfig> findByIds();
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")
    QuartzJobConfig findById(String id);
}

+ 0 - 11
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/job/QuartzJobLogDao.java

@ -1,11 +0,0 @@
package com.yihu.jw.repository.job;
import com.yihu.jw.entity.job.QuartzJobLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Administrator on 2016/8/16.
 */
public interface QuartzJobLogDao extends PagingAndSortingRepository<QuartzJobLog, String>, JpaSpecificationExecutor<QuartzJobLog> {
}

+ 0 - 11
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/statistics/QuotaDao.java

@ -1,11 +0,0 @@
package com.yihu.jw.repository.statistics;
import com.yihu.jw.entity.quota.WlyyQuota;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Administrator on 2016/8/16.
 */
public interface QuotaDao  extends PagingAndSortingRepository<WlyyQuota, String>, JpaSpecificationExecutor<WlyyQuota> {
}

+ 0 - 13
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/repository/statistics/WlyyQuotaResultDao.java

@ -1,13 +0,0 @@
package com.yihu.jw.repository.statistics;
import com.yihu.jw.entity.quota.WlyyQuotaResult;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Administrator on 2016/8/16.
 */
public interface WlyyQuotaResultDao extends PagingAndSortingRepository<WlyyQuotaResult, String>, JpaSpecificationExecutor<WlyyQuotaResult> {
}

+ 0 - 307
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/channel/PrescriptionStatusUpdateService.java

@ -1,307 +0,0 @@
package com.yihu.jw.service.channel;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.entity.hospital.prescription.*;
import com.yihu.jw.hospital.prescription.dao.*;
import com.yihu.jw.hospital.prescription.service.PrescriptionLogService;
import com.yihu.jw.im.service.ImService;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPrescriptionDiagnosisVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPrescriptionInfoVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPrescriptionVO;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.status.EnvelopStatus;
import com.yihu.jw.util.http.HttpUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
 * 处方状态更新job
 * Created by zdm on 2019/7/20.
 * 互联网医院线上下处方之后保存到中山医院的临时表-(中山医院正式下处方,审核成功之后保存,审核失败不保存)-审核成功之后药房发药,回调互联网医院。
 * 在正式下处方的时候,互联网医院每两分钟到中山医院获取处方详情:
 * 1、若是可以正常查询且状态为审方成功,则只需要变更状态,调用im消息通知居民
 * 2、若可以正常查询处方,状态为失败,则需要将状态改为失败,并根据处方号重新获取新的处方直到成功为止。
 * 3、若根据处方号查询不到处方,则需要根据门诊就诊记录(有就诊次数的数据)获取处方号,再获取处方状态重复1、2
 */
@Component
@Transactional
public class PrescriptionStatusUpdateService {
    private static Logger logger = LoggerFactory.getLogger(PrescriptionStatusUpdateService.class);
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Value("${hlwyyEntrance.url}")
    private String hlwyyEntranceUrl;
    @Autowired
    private PrescriptionDao prescriptionDao;
    @Autowired
    private PrescriptionDiagnosisDao prescriptionDiagnosisDao;
    @Autowired
    private PrescriptionInfoDao prescriptionInfoDao;
    @Autowired
    private OutpatientDao outpatientDao;
    @Autowired
    private ImService imService;
    @Autowired
    private PrescriptionLogService prescriptionLogService;
    public void autoPush() throws Exception {
        logger.info("autoPush start");
        //获取所有就诊中已挂号、已下临时处方、并且未结束的处方
        String sql = "SELECT o.id,o.con_no,o.register_no,p.mapping_code,pre.adm_no,pre.real_order,pre.id preId,pre.dispensary_type,pre.status " +
                "FROM base.wlyy_outpatient o LEFT JOIN base.wlyy_patient_mapping p ON o.patient=p.patient " +
                "LEFT JOIN base.wlyy_prescription pre on o.id=pre.outpatient_id " +
                "WHERE o.status=1 AND o.con_no IS NOT NULL  AND pre.real_order IS NOT NULL  ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> map : list) {
            //处方号
            String realOrder = String.valueOf(map.get("real_order"));
            //门诊就诊唯一号
            String admNo = String.valueOf(map.get("adm_no"));
            //第三方居民唯一号
            String patientMappingCode = String.valueOf(map.get("mapping_code"));
            //中山医院居民就诊次数
            String conNo = String.valueOf(map.get("con_no"));
            //处方原状态
            String status = String.valueOf(map.get("status"));
            //处方Id
            String preId = String.valueOf(map.get("preId"));
            //门诊记录Id
            String outPatientId = String.valueOf(map.get("id"));
            //根据处方号获取处方状态
            Map<String, Object> params = new HashMap<>();
            params.put("registerSn", null);
            params.put("patNo", patientMappingCode);
//            params.put("admNo", admNo);
            params.put("realOrder", realOrder);
            //判断处方是否存在
            boolean preExistFlag = true;
            List<WlyyPrescriptionVO> wlyyPrescriptionVOS = getWlyyPrescriptionVO(params);
            //若用处方号获取处方为空,则需要使用居民编号及门诊就诊唯一号查询
            if (null == wlyyPrescriptionVOS) {
                preExistFlag = false;
                params.remove("realOrder");
                wlyyPrescriptionVOS = getWlyyPrescriptionVO(params);
            }
            //根据处方id获取处方详情
            WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findOne(preId);
            //根据门诊id获取门诊记录:如果处方状态为已完成,需要将门诊状态改为已诊
            WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findById(outPatientId);
            if (null != wlyyPrescriptionVOS) {
                ObjectMapper objectMapper = new ObjectMapper();
                WlyyPrescriptionVO wlyyPrescriptionVO = objectMapper.convertValue(wlyyPrescriptionVOS.get(0), WlyyPrescriptionVO.class);
                //如果处方状态一致,则不做操作
                if (wlyyPrescriptionDO.getStatus() != wlyyPrescriptionVO.getStatus()) {
                    return;
                }
                //存储处方操作日志
                prescriptionLogService.addPrescriptionLog(wlyyPrescriptionDO.getId(),wlyyPrescriptionDO.getStatus(),2, wlyyPrescriptionDO.getDoctor(), wlyyPrescriptionDO.getDoctorName(),"", new Date());
                //调用im发送模板消息
                /**
                 * 续方取消:-3 支付过期取消,-2 患者自己取消 ,-1 医生取消
                 * 候诊中:0 候诊中
                 * 就诊中:10 诊断中,11 药师审核失败 / 调整中,12  药师审核完成,13  开方失败/调整中
                 * 待支付:20 诊断完成/开方成功/待支付,21 支付失败/待支付中
                 * 待取药:30 支付成功/等待配药,31 配药成功/等待取药,32 配送中
                 * 已完成:100 已完成/未评价 ,101 已完成已经评价
                 */
                try {
                    if (13 < wlyyPrescriptionVO.getStatus() && wlyyPrescriptionDO.getStatus() < 20) {
                        logger.info("autoPush imService send");
                        imService.pushPrescriptionImMessage(wlyyPrescriptionVO);
                    }
                } catch (Exception e) {
                    logger.error("im异常:" + e.getMessage());
                }
                //his处方变更时,会删除原本处方,重新更新处方到本地
                if (!preExistFlag) {
                    updatePrescriptionInfo(preId,wlyyPrescriptionVO,wlyyOutpatientDO);
                }
                //更改门诊状态为已经检查
                if (100 == wlyyPrescriptionVO.getStatus()) {
                    wlyyOutpatientDO.setStatus("2");
                }
                outpatientDao.save(wlyyOutpatientDO);
                //更新处方状态记录
                wlyyPrescriptionDO.setStatus(wlyyPrescriptionVO.getStatus());
                prescriptionDao.save(wlyyPrescriptionDO);
            }
        }
        logger.info("autoPush end");
    }
    public void updatePrescriptionInfo(String preId, WlyyPrescriptionVO wlyyPrescriptionVO, WlyyOutpatientDO wlyyOutpatientDO) {
        logger.info("autoPush updatePrescriptionInfo ");
        //删除原有药品信息
        List<WlyyPrescriptionInfoDO> oldInfos = prescriptionInfoDao.findByPrescriptionId(preId);
        if (oldInfos != null && oldInfos.size() > 0) {
            prescriptionInfoDao.delete(oldInfos);
        }
        //删除之前诊断
        List<WlyyPrescriptionDiagnosisDO> ds = prescriptionDiagnosisDao.findByPrescriptionId(preId);
        if (ds != null && ds.size() > 0) {
            prescriptionDiagnosisDao.delete(ds);
        }
        String Icd10 = "";
        String Icd10Name = "";
        List<WlyyPrescriptionDiagnosisDO> wlyyPrescriptionDiagnosisDOS = new ArrayList<>();
        for (WlyyPrescriptionDiagnosisVO diagnosisVO : wlyyPrescriptionVO.getDiagnosisVOs()) {
            WlyyPrescriptionDiagnosisDO diagnosisDO = new WlyyPrescriptionDiagnosisDO();
            //将诊断拼接放到门诊记录中
            if ("1".equals(diagnosisVO.getType())) {
                Icd10 = diagnosisVO.getCode() + "," + Icd10;
                Icd10Name += diagnosisVO.getName() + "," + Icd10Name;
            } else {
                Icd10 += diagnosisVO.getCode() + ",";
                Icd10Name += diagnosisVO.getName() + ",";
            }
            diagnosisDO.setCode(diagnosisVO.getCode());
            diagnosisDO.setName(diagnosisVO.getName());
            diagnosisDO.setType(diagnosisVO.getType());
            diagnosisDO.setPrescriptionId(preId);
            diagnosisDO.setCreateTime(new Date());
            wlyyPrescriptionDiagnosisDOS.add(diagnosisDO);
        }
        //重新保存诊断
        prescriptionDiagnosisDao.save(wlyyPrescriptionDiagnosisDOS);
        //药品更新
        List<WlyyPrescriptionInfoDO> wlyyPrescriptionInfoDOS = new ArrayList<>();
        for (WlyyPrescriptionInfoVO infoVO : wlyyPrescriptionVO.getInfoVOs()) {
            WlyyPrescriptionInfoDO infoDO = new WlyyPrescriptionInfoDO();
            //处方code 关联表wlyy_prescription code
            infoDO.setPrescriptionId(preId);
            //药品编号
            infoDO.setDrugNo(infoVO.getDrugNo());
            //药品名称
            infoDO.setDrugName(infoVO.getDrugName());
            //库房号
            infoDO.setDispDeposite(infoVO.getDispDeposite());
            // 药量
            infoDO.setDosage(infoVO.getDosage());
            //数量
            infoDO.setQuantity(infoVO.getQuantity());
            //单位
            infoDO.setUnit(infoVO.getUnit());
            //單位名稱
            infoDO.setUnitName(infoVO.getUnitName());
            //包装单位
            infoDO.setPackUnit(infoVO.getPackUnit());
            //包装单位名称
            infoDO.setPackUnitName(infoVO.getPackUnitName());
            // 用法
            infoDO.setSupplyCode(infoVO.getSupplyCode());
            //用法名稱
            infoDO.setSupplyName(infoVO.getSupplyName());
            //天数
            infoDO.setDays(infoVO.getDays());
            //组号
            infoDO.setFrequency(infoVO.getFrequency());
            //药品收费码
            infoDO.setSerial(infoVO.getSerial());
            //库房号
            infoDO.setGroupNo(infoVO.getGroupNo());
            //规格
            infoDO.setSpecification(infoVO.getSpecification());
            // 1可用 0删除
            infoDO.setDel(1);
            //频率
            infoDO.setUsageCode(infoVO.getUsageCode());
            //頻率名稱
            infoDO.setUsageName(infoVO.getUsageName());
            //包装价格
            infoDO.setPackRetprice(infoVO.getPackRetprice());
            wlyyPrescriptionInfoDOS.add(infoDO);
        }
        prescriptionInfoDao.save(wlyyPrescriptionInfoDOS);
        Icd10 = Icd10.substring(0, Icd10.length() - 1);
        Icd10Name = Icd10Name.substring(0, Icd10Name.length() - 1);
        wlyyOutpatientDO.setIcd10(Icd10);
        wlyyOutpatientDO.setIcd10Name(Icd10Name);
    }
    /**
     * 获取处方详情
     *
     * @param params
     * @return
     * @throws Exception
     */
    public List<WlyyPrescriptionVO> getWlyyPrescriptionVO(Map<String, Object> params) throws Exception {
        //根据处方号获取处方状态
        String result = HttpUtils.doGet(hlwyyEntranceUrl + "/mqsdk/BS16017", params).getContent();
        ObjectMapper objectMapper = new ObjectMapper();
        ListEnvelop listEnvelop = objectMapper.readValue(result, ListEnvelop.class);
        if (null != listEnvelop && EnvelopStatus.success.code.equals(listEnvelop.getStatus()) && null != listEnvelop.getDetailModelList() && listEnvelop.getDetailModelList().size() > 0) {
//                logger.info("result:"+listEnvelop.getDetailModelList());
            List<WlyyPrescriptionVO> wlyyPrescriptionVOS = listEnvelop.getDetailModelList();
            return wlyyPrescriptionVOS;
        }
        return null;
    }
    /**
     * 设置门诊为已完成
     */
    public void setOutPatientOver(){
        logger.info("setOutPatientOver start ");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int i = calendar.get(Calendar.HOUR_OF_DAY);
        //复诊记录状态状态安全锁,每天0~2点才允许触发,避免误调用
        //将所有的已接诊的处方记录
        if(i==0||i==1){
            List<WlyyOutpatientDO> outpatientDOs = outpatientDao.findByStatus("1");
            if(outpatientDOs!=null&&outpatientDOs.size()>0){
                for(WlyyOutpatientDO outpatientDO:outpatientDOs){
                    //结束门诊
                    outpatientDO.setStatus("2");
    
                    String consultCode = imService.getConsultCodeByOutpatientId(outpatientDO.getId());
                    if(StringUtils.isNoneBlank(consultCode)){
                        try {
                            imService.finish(consultCode,"admin",2);
                        }catch(Exception e)  {
                            e.printStackTrace();
                            logger.info("自动结束咨询报错 consultCode: "+consultCode);
                        }
                       
                    }
                }
                outpatientDao.save(outpatientDOs);
                logger.info("setOutPatientOver count :"+outpatientDOs.size());
            }else {
                logger.info("setOutPatientOver count :"+0);
            }
        }else{
            logger.info("setOutPatientOver Time is not up ");
        }
        logger.info("setOutPatientOver end ");
    }
}

+ 0 - 253
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/quota/JobService.java

@ -1,253 +0,0 @@
package com.yihu.jw.service.quota;
import com.yihu.jw.entity.job.QuartzJobConfig;
import com.yihu.jw.entity.quota.WlyyQuota;
import com.yihu.jw.job.QuartzHelper;
import com.yihu.jw.repository.job.QuartzJobConfigDao;
import com.yihu.jw.repository.statistics.QuotaDao;
import com.yihu.jw.web.quota.WlyyQuotaVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @author chenweida
 */
@Service
public class JobService {
    @Autowired
    private QuartzHelper quartzHelper;
    @Autowired
    private QuartzJobConfigDao wlyyJobConfigDao;
    @Autowired
    private QuotaDao quotaDao;
    @Transactional
    public void stopById(String id) throws Exception {
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id, "1");
        if (quartzJobConfig != null) {
            quartzHelper.removeJob(quartzJobConfig.getId());
            quartzJobConfig.setStatus("0");
        } else {
            throw new Exception("任务已经停止");
        }
    }
    @Transactional
    public void startById(String id) throws Exception {
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id, "0");
        if (quartzJobConfig != null) {
            startOneJob(quartzJobConfig);
        } else {
            throw new Exception("任务已经启动");
        }
    }
    @Transactional
    public void stopAll() throws Exception {
        List<QuartzJobConfig> quartzJobConfigs = wlyyJobConfigDao.findByAll("1");
        if (quartzJobConfigs != null && quartzJobConfigs.size() > 0) {
            for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) {
                quartzHelper.removeJob(quartzJobConfig.getId());
                quartzJobConfig.setStatus("0");
            }
        } else {
            throw new Exception("任务已经全部停止");
        }
    }
    @Transactional
    public void startAll() throws Exception {
        List<QuartzJobConfig> quartzJobConfigs = wlyyJobConfigDao.findByAll("0");
        if (quartzJobConfigs != null && quartzJobConfigs.size() > 0) {
            for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) {
                startOneJob(quartzJobConfig);
            }
        } else {
            throw new Exception("任务已经全部启动");
        }
    }
    /**
     * 启动单个任务
     *
     * @param quartzJobConfig
     * @throws Exception
     */
    private void startOneJob(QuartzJobConfig quartzJobConfig) throws Exception {
        WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
        com.yihu.jw.web.quota.WlyyQuotaVO wlyyQuotaVO = new com.yihu.jw.web.quota.WlyyQuotaVO();
        com.yihu.jw.web.quota.WlyyJobConfigVO wlyyJobConfigVO = new com.yihu.jw.web.quota.WlyyJobConfigVO();
        BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
        BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("quota", wlyyQuotaVO);
        params.put("jobConfig", wlyyJobConfigVO);
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            //往quartz框架添加任务
            quartzHelper.addJob(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getQuartzCron(), quartzJobConfig.getId(), params);
            quartzJobConfig.setStatus("1");//设置任务状态是启动
        }
    }
    public void startNowById(String id) throws Exception {
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findOne(id);
        WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
        com.yihu.jw.web.quota.WlyyQuotaVO wlyyQuotaVO = new com.yihu.jw.web.quota.WlyyQuotaVO();
        com.yihu.jw.web.quota.WlyyJobConfigVO wlyyJobConfigVO = new com.yihu.jw.web.quota.WlyyJobConfigVO();
        BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
        BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("quota", wlyyQuotaVO);
        params.put("jobConfig", wlyyJobConfigVO);
        //往quartz框架添加任务
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId()+ UUID.randomUUID(), params);
        }
    }
    public void productDataByDay(Integer day) throws Exception {
        List<QuartzJobConfig> quartzJobConfigs = wlyyJobConfigDao.findByIds();
        for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) {
            WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
            com.yihu.jw.web.quota.WlyyQuotaVO wlyyQuotaVO = new com.yihu.jw.web.quota.WlyyQuotaVO();
            com.yihu.jw.web.quota.WlyyJobConfigVO wlyyJobConfigVO = new com.yihu.jw.web.quota.WlyyJobConfigVO();
            BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
            BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("quota", wlyyQuotaVO);
            params.put("jobConfig", wlyyJobConfigVO);
            for (int i = 1; i <= day; i++) {
                //往quartz框架添加任务
                params.put("now", getYesterday(0 - i + 1));
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId() + UUID.randomUUID(), params);
                    Thread.sleep(15000L);
                }
            }
        }
    }
    public static String getYesterday(Integer day) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, day);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
    public void productDataByOneDay(String yesterday) throws Exception {
        SimpleDateFormat dataSimple = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dataSimple.parse(yesterday);
        if (date == null) {
            throw new Exception("时间格式错误");
        }
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, 1);//把日期往后增加一天.整数往后推,负数往前移动
        Date nowDate = calendar.getTime();   //这个时间就是日期往后推一天的结果
        String now = new SimpleDateFormat("yyyy-MM-dd").format(nowDate.getTime());
        List<QuartzJobConfig> quartzJobConfigs = wlyyJobConfigDao.findByIds();
        for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) {
            WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
            com.yihu.jw.web.quota.WlyyQuotaVO wlyyQuotaVO = new com.yihu.jw.web.quota.WlyyQuotaVO();
            com.yihu.jw.web.quota.WlyyJobConfigVO wlyyJobConfigVO = new com.yihu.jw.web.quota.WlyyJobConfigVO();
            BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
            BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("quota", wlyyQuotaVO);
            params.put("jobConfig", wlyyJobConfigVO);
            //往quartz框架添加任务
            params.put("now", now);
            params.put("yesterday", yesterday);
            if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId() + UUID.randomUUID(), params);
                Thread.sleep(15000L);
            }
        }
    }
    public void productDataByOneDayWithId(String yesterday, String id) throws Exception {
        SimpleDateFormat dataSimple = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dataSimple.parse(yesterday);
        if (date == null) {
            throw new Exception("时间格式错误");
        }
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, 1);//把日期往后增加一天.整数往后推,负数往前移动
        Date nowDate = calendar.getTime();   //这个时间就是日期往后推一天的结果
        String now = new SimpleDateFormat("yyyy-MM-dd").format(nowDate.getTime());
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id);
        if (quartzJobConfig == null) {
            throw new Exception("id不存在");
        }
        WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
        com.yihu.jw.web.quota.WlyyQuotaVO wlyyQuotaVO = new com.yihu.jw.web.quota.WlyyQuotaVO();
        com.yihu.jw.web.quota.WlyyJobConfigVO wlyyJobConfigVO = new com.yihu.jw.web.quota.WlyyJobConfigVO();
        BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
        BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("quota", wlyyQuotaVO);
        params.put("jobConfig", wlyyJobConfigVO);
        //往quartz框架添加任务
        params.put("now", now);
        params.put("yesterday", yesterday);
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId() + UUID.randomUUID(), params);
            Thread.sleep(15000L);
        }
    }
    public void productDataByDayAndId(Integer day, String id) throws Exception{
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id);
        if(quartzJobConfig==null){
            throw new Exception("id不存在");
        }
            WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
            com.yihu.jw.web.quota.WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO();
            com.yihu.jw.web.quota.WlyyJobConfigVO wlyyJobConfigVO = new com.yihu.jw.web.quota.WlyyJobConfigVO();
            BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
            BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("quota", wlyyQuotaVO);
            params.put("jobConfig", wlyyJobConfigVO);
            for (int i = 1; i <= day; i++) {
                //往quartz框架添加任务
                params.put("now", getYesterday(0 - i + 1));
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId() + UUID.randomUUID(), params);
                    Thread.sleep(15000L);
                }
            }
    }
}

+ 0 - 927
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/DateUtil.java

@ -1,927 +0,0 @@
package com.yihu.jw.util;
import org.apache.commons.lang3.StringUtils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtil {
	public static final String HH_MM = "HH:mm";
	public static final String HH_MM_SS = "HH:mm:ss";
	public static final String YY = "yy";
	public static final String YYYYMM = "yyyyMM";
	public static final String YYYYMMDD = "yyyyMMdd";
	public static final String YYYY_MM_DD = "yyyy-MM-dd";
	public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
	public static final String YYYY_MM_DD_HH = "yyyy-MM-dd HH";
	public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
	public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
	public static final String YYYY_M_D_HH_MM_SS = "yyyy/M/d HH:mm:ss";
	/**
	 * 时间格式转中文格式
	 */
	public static String dateToChinese(Date date) {
		SimpleDateFormat formatter =   new SimpleDateFormat( "yyyy年MM月dd日 EEEEaaaa hh:mm", Locale.CHINA);
		return formatter.format(date);
	}
	/*public static void main(String[] args)
	{
	   System.out.print(dateToChinese(new Date()));
	}*/
	/**
	 * 字符串转时间格式
	 */
	public static Date strToDate(String strDate) {
		if (StringUtils.isEmpty(strDate)) {
			return null;
		}
		else{
			int length = strDate.length();
			if(strDate.contains("/"))
			{
				strDate = strDate.replace("/","-");
			}
			if(strDate.contains("-"))
			{
				if(length == 10)
				{
					 return strToDate(strDate,YYYY_MM_DD);
				}
				else if(length == 19)
				{
					return strToDate(strDate,YYYY_MM_DD_HH_MM_SS);
				}
			}
			else{
				if(length == 8)
				{
					return strToDate(strDate,YYYYMMDD);
				}
				else if(length == 14)
				{
					return strToDate(strDate,YYYYMMDDHHMMSS);
				}
			}
		}
		return null;
	}
	/**
	  * 获取现在时间
	  * 
	  * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
	  */
	public static Date getNowDate() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		String dateString = formatter.format(currentTime);
		ParsePosition pos = new ParsePosition(0);
		return formatter.parse(dateString, pos);
	}
	/**
	 * 获取现在时间
	 * 
	 * @return返回短时间格式 yyyy-MM-dd
	 */
	public static Date getNowDateShort() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD);
		String dateString = formatter.format(currentTime);
		return strToDate(dateString, YYYY_MM_DD);
	}
	/**
	 * 获取现在时间
	 * 
	 * @return返回字符串格式 yyyy-MM-dd HH:mm:ss
	 */
	public static String getStringDate() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		return formatter.format(currentTime);
	}
	/**
	 * 获取现在时间
	 * 
	 * @return返回字符串格式 yyyy-MM-dd HH:mm:ss
	 */
	public static String getStringDate(String format) {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		return formatter.format(currentTime);
	}
	/**
	 * 获取现在时间
	 * 
	 * @return 返回短时间字符串格式yyyy-MM-dd
	 */
	public static String getStringDateShort() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD);
		return formatter.format(currentTime);
	}
	/**
	 * 获取时间 小时:分;秒 HH:mm:ss
	 * 
	 * @return
	 */
	public static String getTimeShort() {
		SimpleDateFormat formatter = new SimpleDateFormat(HH_MM_SS);
		Date currentTime = new Date();
		return formatter.format(currentTime);
	}
	/**
	 * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param strDate
	 * @return
	 */
	public static Date strToDateLong(String strDate) {
		if (StringUtils.isEmpty(strDate)) {
			return null;
		}
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		ParsePosition pos = new ParsePosition(0);
		return formatter.parse(strDate, pos);
	}
	public static Date strToDateShort(String strDate) {
		if (StringUtils.isEmpty(strDate)) {
			return null;
		}
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD);
		ParsePosition pos = new ParsePosition(0);
		return formatter.parse(strDate, pos);
	}
	/**
	 * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param dateDate
	 * @return
	 */
	public static String dateToStrLong(Date dateDate) {
		if (dateDate == null) {
			return "";
		}
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		return formatter.format(dateDate);
	}
	public static String dateToStrNoSecond(Date dateDate) {
		if (dateDate == null) {
			return "";
		}
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM);
		return formatter.format(dateDate);
	}
	/**
	 * 将长时间格式时间转换为字符串 yyyy-MM-dd
	 *
	 * @param dateDate
	 * @return
	 */
	public static String dateToStrShort(Date dateDate) {
		if (dateDate == null) {
			return "";
		}
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD);
		return formatter.format(dateDate);
	}
	/**
	 * 将短时间格式时间转换为字符串 yyyy-MM-dd
	 */
	public static String dateToStr(Date dateDate, String format) {
		if (dateDate == null) {
			return "";
		}
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		return formatter.format(dateDate);
	}
	/**
	 * 将短时间格式字符串转换为时间
	 *
	 * @param strDate
	 * @return
	 */
	public static Date strToDate(String strDate, String format) {
		if (StringUtils.isEmpty(strDate)) {
			return null;
		}
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		ParsePosition pos = new ParsePosition(0);
		return formatter.parse(strDate, pos);
	}
	public static Date strToDateAppendNowTime(String strDate, String format) {
		if (StringUtils.isEmpty(strDate)) {
			return null;
		}
		strDate += " " + getTimeShort();
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		ParsePosition pos = new ParsePosition(0);
		return formatter.parse(strDate, pos);
	}
	/**
	 * 得到现在时间
	 *
	 * @return
	 */
	public static Date getNow() {
		Date currentTime = new Date();
		return currentTime;
	}
	/**
	 * 提取一个月中的最后一天
	 *
	 * @param day
	 * @return
	 */
	public static Date getLastDate(long day) {
		Date date = new Date();
		long date_3_hm = date.getTime() - 3600000 * 34 * day;
		Date date_3_hm_date = new Date(date_3_hm);
		return date_3_hm_date;
	}
	/**
	 * 得到现在时间
	 *
	 * @return 字符串 yyyyMMdd HHmmss
	 */
	public static String getStringToday() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
		String dateString = formatter.format(currentTime);
		return dateString;
	}
	/**
	 * 得到现在小时
	 */
	public static String getHour() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		String dateString = formatter.format(currentTime);
		String hour;
		hour = dateString.substring(11, 13);
		return hour;
	}
	/**
	 * 得到现在分钟
	 *
	 * @return
	 */
	public static String getTime() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		String dateString = formatter.format(currentTime);
		String min;
		min = dateString.substring(14, 16);
		return min;
	}
	/**
	 * 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写。
	 *
	 * @param sformat
	 *            yyyyMMddhhmmss
	 * @return
	 */
	public static String getUserDate(String sformat) {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(sformat);
		String dateString = formatter.format(currentTime);
		return dateString;
	}
	/**
	 * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式,返回字符型的分钟
	 */
	public static String getTwoHour(String st1, String st2) {
		String[] kk = null;
		String[] jj = null;
		kk = st1.split(":");
		jj = st2.split(":");
		if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
			return "0";
		else {
			double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
			double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
			if ((y - u) > 0)
				return y - u + "";
			else
				return "0";
		}
	}
	/**
	 * 得到二个日期间的间隔天数
	 */
	public static String getTwoDay(String sj1, String sj2) {
		SimpleDateFormat myFormatter = new SimpleDateFormat(YYYY_MM_DD);
		long day = 0;
		try {
			Date date = myFormatter.parse(sj1);
			Date mydate = myFormatter.parse(sj2);
			day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		} catch (Exception e) {
			return "";
		}
		return day + "";
	}
	/**
	 * 时间前推或后推分钟,其中JJ表示分钟.
	 */
	public static String getPreTime(String sj1, String jj) {
		SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		String mydate1 = "";
		try {
			Date date1 = format.parse(sj1);
			long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
			date1.setTime(Time * 1000);
			mydate1 = format.format(date1);
		} catch (Exception e) {
		}
		return mydate1;
	}
	/**
	 * 时间前推或后推天数(负数前推正数后推)
	 * date 基准时间
	 */
	public static Date getPreDays(Date date, int days) {
		Date day = null;
		try {
			Calendar c = Calendar.getInstance();
			c.setTime(date);
			c.add(Calendar.DATE, days);
			day = c.getTime();
		} catch (Exception e) {
		}
		return day;
	}
	/**
	 * 得到一个时间延后或前移几分钟的时间,nowdate为时间,delay为前移或后延的分钟数
	 */
	public static Date getNextMin(Date date, int delay) {
		try {
			Calendar cal = Calendar.getInstance();
			cal.setTime(date);
			cal.add(Calendar.MINUTE, delay);
			return cal.getTime();
		} catch (Exception e) {
			return null;
		}
	}
	/**
	 * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
	 */
	public static String getNextDay(String nowdate, int delay) {
		try {
			SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD);
			String mdate = "";
			Date d = strToDate(nowdate, YYYY_MM_DD);
			long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
			d.setTime(myTime * 1000);
			mdate = format.format(d);
			return mdate;
		} catch (Exception e) {
			return "";
		}
	}
	// public static String getNextDay(Date d, int delay) {
	// try {
	// SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD);
	// String mdate = "";
	// long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
	// d.setTime(myTime * 1000);
	// mdate = format.format(d);
	// return mdate;
	// } catch (Exception e) {
	// return "";
	// }
	// }
	public static String getNextDay(Date d, int days) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.add(Calendar.DATE, days);
		return dateToStrShort(c.getTime());
	}
	public static String getNextMonth(Date d, int months) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.add(Calendar.MONTH, months);
		return dateToStrShort(c.getTime());
	}
	public static String getNextYear(Date d, int year) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.add(Calendar.YEAR, year);
		return dateToStrShort(c.getTime());
	}
	/**
	 * 获取本月第一天
	 * @return
     */
	public static String getCurMonthFirstDayShort(){
		Calendar c = Calendar.getInstance();
		c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
		return dateToStrShort(c.getTime());
	}
	/**
	 * 判断是否润年
	 *
	 * @param ddate
	 * @return
	 */
	public static boolean isLeapYear(String ddate) {
		/**
		 * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
		 * 3.能被4整除同时能被100整除则不是闰年
		 */
		Date d = strToDate(ddate, YYYY_MM_DD);
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(d);
		int year = gc.get(Calendar.YEAR);
		if ((year % 400) == 0)
			return true;
		else if ((year % 4) == 0) {
			if ((year % 100) == 0)
				return false;
			else
				return true;
		} else
			return false;
	}
	/**
	 * 返回美国时间格式 26 Apr 2006
	 *
	 * @param str
	 * @return
	 */
	public static String getEDate(String str) {
		SimpleDateFormat formatter = new SimpleDateFormat(YYYY_MM_DD);
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(str, pos);
		String j = strtodate.toString();
		String[] k = j.split(" ");
		return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
	}
	/**
	 * 获取一个月的最后一天
	 *
	 * @param dat
	 * @return
	 */
	public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
		String str = dat.substring(0, 8);
		String month = dat.substring(5, 7);
		int mon = Integer.parseInt(month);
		if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
			str += "31";
		} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
			str += "30";
		} else {
			if (isLeapYear(dat)) {
				str += "29";
			} else {
				str += "28";
			}
		}
		return str;
	}
	/**
	 * 判断二个时间是否在同一个周
	 *
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean isSameWeekDates(Date date1, Date date2) {
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(date1);
		cal2.setTime(date2);
		int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
		if (0 == subYear) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
				return true;
		} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
			// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
				return true;
		} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
				return true;
		}
		return false;
	}
	/**
	 * 产生周序列,即得到当前时间所在的年度是第几周
	 *
	 * @return
	 */
	public static String getSeqWeek() {
		Calendar c = Calendar.getInstance(Locale.CHINA);
		String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
		if (week.length() == 1)
			week = "0" + week;
		String year = Integer.toString(c.get(Calendar.YEAR));
		return year + week;
	}
	/**
	 * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号
	 *
	 * @param sdate
	 * @param num
	 * @return
	 */
	public static String getWeek(String sdate, String num) {
		// 再转换为时间
		Date dd = DateUtil.strToDate(sdate, YYYY_MM_DD);
		Calendar c = Calendar.getInstance();
		c.setTime(dd);
		if (num.equals("1")) // 返回星期一所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		else if (num.equals("2")) // 返回星期二所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
		else if (num.equals("3")) // 返回星期三所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
		else if (num.equals("4")) // 返回星期四所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
		else if (num.equals("5")) // 返回星期五所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
		else if (num.equals("6")) // 返回星期六所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
		else if (num.equals("0")) // 返回星期日所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
	}
	/**
	 * 获取2个时间点的工作日天数
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @return
	 */
	public static int getDutyDays(Date startDate, Date endDate) {
		int result = 0;
        Date  startTime = new Date(startDate.getTime());
		while (startTime.compareTo(endDate) <= 0) {
			if (startTime.getDay() != 6 && startTime.getDay() != 0) {
				result++;
			}
            startTime.setDate(startTime.getDate() + 1);
		}
		return result;
	}
	/**
	 * 根据一个日期,返回是星期几的字符串
	 *
	 * @param sdate
	 * @return
	 */
	public static String getWeek(String sdate) {
		// 再转换为时间
		Date date = DateUtil.strToDate(sdate, YYYY_MM_DD);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		// int hour=c.get(Calendar.DAY_OF_WEEK);
		// hour中存的就是星期几了,其范围 1~7
		// 1=星期日 7=星期六,其他类推
		return new SimpleDateFormat("EEEE").format(c.getTime());
	}
	public static String getWeekStr(String sdate) {
		String str = "";
		str = DateUtil.getWeek(sdate);
		if ("1".equals(str)) {
			str = "星期日";
		} else if ("2".equals(str)) {
			str = "星期一";
		} else if ("3".equals(str)) {
			str = "星期二";
		} else if ("4".equals(str)) {
			str = "星期三";
		} else if ("5".equals(str)) {
			str = "星期四";
		} else if ("6".equals(str)) {
			str = "星期五";
		} else if ("7".equals(str)) {
			str = "星期六";
		}
		return str;
	}
	/**
	 * 两个时间之间的天数
	 *
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long getDays(String date1, String date2) {
		if (date1 == null || date1.equals(""))
			return 0;
		if (date2 == null || date2.equals(""))
			return 0;
		// 转换为标准时间
		SimpleDateFormat myFormatter = new SimpleDateFormat(YYYY_MM_DD);
		Date date = null;
		Date mydate = null;
		try {
			date = myFormatter.parse(date1);
			mydate = myFormatter.parse(date2);
		} catch (Exception e) {
		}
		long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		return day;
	}
	/**
	 * 返回两个日期相差的天数
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long getDays(Date date1, Date date2) {
		if (date1 == null || date2 == null)
			return 0;
		long day = (date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000);
		return day;
	}
	/**
	 * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
	 * 此函数返回该日历第一行星期日所在的日期
	 * 
	 * @param sdate
	 * @return
	 */
	public static String getNowMonth(String sdate) {
		// 取该时间所在月的一号
		sdate = sdate.substring(0, 8) + "01";
		// 得到这个月的1号是星期几
		Date date = DateUtil.strToDate(sdate, YYYY_MM_DD);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int u = c.get(Calendar.DAY_OF_WEEK);
		String newday = DateUtil.getNextDay(sdate, 1 - u);
		return newday;
	}
	/**
	 * 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数
	 * 
	 * @param k 表示是取几位随机数,可以自己定
	 */
	public static String getNo(int k) {
		return getUserDate("yyyyMMddhhmmss") + getRandom(k);
	}
	/**
	 * 返回一个随机数
	 * 
	 * @param i
	 * @return
	 */
	public static String getRandom(int i) {
		Random jjj = new Random();
		if (i == 0)
			return "";
		String jj = "";
		for (int k = 0; k < i; k++) {
			jj = jj + jjj.nextInt(9);
		}
		return jj;
	}
	/**
	 * 根据用户生日计算年龄
	 */
	public static int getAgeByBirthday(Date birthday) {
		try {
			int age = 0;
			if (birthday == null) {
				return age;
			}
			String birth = new SimpleDateFormat("yyyyMMdd").format(birthday);
			int year = Integer.valueOf(birth.substring(0, 4));
			int month = Integer.valueOf(birth.substring(4, 6));
			int day = Integer.valueOf(birth.substring(6));
			Calendar cal = Calendar.getInstance();
			age = cal.get(Calendar.YEAR) - year;
			//周岁计算
			if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {
				age--;
			}
			return age;
		} catch (Exception e) {
			return 0;
		}
	}
	/**
	 *  字符串转时间
	 * @param str 时间字符串
	 * @param eg 格式
	 * @return
	 */
	public static Date stringToDate(String str, String eg) {
		DateFormat format = new SimpleDateFormat(eg);
		Date date = null;
		if (str != null && !"".equals(str)) {
			try {
				date = format.parse(str);
			} catch (Exception e) {
				return null;
			}
		}
		return date;
	}
	public static int getNowMonth(){
		Calendar cal = Calendar.getInstance();
		return cal.get(Calendar.MONTH)+1;
	}
	public static int getNowYear(){
		Calendar cal = Calendar.getInstance();
		return cal.get(Calendar.YEAR);
	}
	/**
	 * 获取周一
	 * @return
     */
	public static String getMondayOfThisWeek() {
		SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
		Calendar c = Calendar.getInstance();
		int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
		if (day_of_week == 0)
			day_of_week = 7;
		c.add(Calendar.DATE, -day_of_week + 1);
		return df2.format(c.getTime());
	}
	/**
	 * 得到本周周日
	 *
	 * @return yyyy-MM-dd
	 */
	public static String getSundayOfThisWeek() {
		SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
		Calendar c = Calendar.getInstance();
		int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
		if (day_of_week == 0)
			day_of_week = 7;
		c.add(Calendar.DATE, -day_of_week + 7);
		return df2.format(c.getTime());
	}
	/**
	 * 获取当月第一天
	 * @return
     */
	public static String getFristDayOfMonth() {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		// 获取前月的第一天
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, 0);
		c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
		String first = format.format(c.getTime());
		return format.format(c.getTime());
	}
	/**
	 * 获取当月最后一天
	 */
	public static String getLastDayOfMonth(){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		// 获取前月的第一天
		Calendar ca = Calendar.getInstance();
		ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
		return format.format(ca.getTime());
	}
	public static int getSignYear(){
		Calendar ca = Calendar.getInstance();
		if(getNowMonth()>=4){
			return getNowYear();
		}
		return getNowYear()-1;
	}
	/**
	 * 计算预产期
	 * 末次月经开始日期(第一天),月份+9,日期+7
	 * @param date
	 * @return
	 */
	public static Date getDueDate(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH,9);
		cal.add(Calendar.DAY_OF_YEAR,7);
		return cal.getTime();
	}
	/**
	 * 计算产检时间
	 * @param date
	 * @param day
	 * @return
	 */
	public static Date getPrenatalInspectorDate(Date date,Integer day){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_YEAR,day);
		return cal.getTime();
	}
	
	/**
	 * 转换日期字符串为Timestamp YYYY-MM-DD HH:MM:SS
	 * @return
	 */
	public static Timestamp fomrmatStringToTimeStamp(String dateStr){
		
		Timestamp ts = Timestamp.valueOf(dateStr);
		
		return ts;
	}
	
	/**
	 * 获取当前时间的Timestamp
	 * @return
	 */
	public static Timestamp getNowTimestamp(){
		Date date = new Date();
		Timestamp nousedate = new Timestamp(date.getTime());
		return nousedate;
	}
	/**
	 * 获取周一
	 * @return
	 */
	public static String getSundayOfThisDate(Date date) {
		SimpleDateFormat df2 = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		return df2.format(getSundayOfThisDateToDate(date));
	}
	/**
	 * 得到本周周日
	 *
	 * @return yyyy-MM-dd
	 */
	public static Date getSundayOfThisDateToDate(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
		if (day_of_week == 0)
			day_of_week = 7;
		c.add(Calendar.DATE, -day_of_week + 7);
		return c.getTime();
	}
}

+ 0 - 208
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/SystemConf.java

@ -1,208 +0,0 @@
package com.yihu.jw.util;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
@Component
public class SystemConf {
    // 别处登录
    public static final int LOGIN_OTHER = 999;
    // 登录超时
    public static final int LOGIN_TIMEOUT = 998;
    // 未登录
    public static final int NOT_LOGIN = 997;
    // 文件保存临时路径
    private static final String TEMP_PATH = "upload_temp_path";
    // 血糖餐前最小值
    public static final double HEALTH_STANDARD_ST_MIN_BEFORE = 4;
    // 血糖餐前最大值
    public static final double HEALTH_STANDARD_ST_MAX_BEFORE = 7;
    // 血糖餐后最小值
    public static final double HEALTH_STANDARD_ST_MIN_AFTER = 4;
    // 血糖餐后最大值
    public static final double HEALTH_STANDARD_ST_MAX_AFTER = 11.1;
    // 舒张压最小值
    public static final double HEALTH_STANDARD_SZY_MIN = 60;
    // 舒张压最大值
    public static final double HEALTH_STANDARD_SZY_MAX = 90;
    // 收缩压最小值
    public static final double HEALTH_STANDARD_SSY_MIN = 90;
    // 收缩压最大值
    public static final double HEALTH_STANDARD_SSY_MAX = 140;
    // 同一手机号大最短信数
    public static final int MAX_SMS_MOBILE = 5;
    // 发送短信验证码间隔(分钟)
    public static final int SMS_INTERVAL = 2;
    private static Object lock = new Object();
    // 全局系统配置信息
    private static SystemConf systemConf;
    // 系统配置文件
    private Properties systemProperties;
    //im列表
    private String imListGet;
    public static SystemConf getInstance() {
        if (systemConf == null) {
            synchronized (lock) {
                systemConf = new SystemConf();
            }
        }
        return systemConf;
    }
    /**
     * 加载系统配置文件
     *
     * @return
     */
    public Properties getSystemProperties() {
        if (systemProperties == null) {
            InputStream is = null;
            try {
                is = this.getClass().getResourceAsStream("/system.properties");
                systemProperties = new Properties();
                systemProperties.load(is);
            } catch (IOException e1) {
                e1.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return systemProperties;
    }
    /**
     * 短信接口地址
     */
    public String getSmsUrl() {
        return getSystemProperties().getProperty("yihu_sms_url");
    }
    /**
     * 短信企业编号
     */
    public String getSmsCode() {
        return getSystemProperties().getProperty("yihu_sms_code");
    }
    /**
     * 短信用户名
     */
    public String getSmsName() {
        return getSystemProperties().getProperty("yihu_sms_name");
    }
    /**
     * 短信登录密码
     */
    public String getSmsPassword() {
        return getSystemProperties().getProperty("yihu_sms_password");
    }
    ;
    /**
     * 挂号接口地址
     */
    public String getGuahaoUrl() {
        return getSystemProperties().getProperty("yihu_guahao_url");
    }
    /**
     * 挂号接口对接appid
     */
    public String getGuahaoAppid() {
        return getSystemProperties().getProperty("yihu_guahao_appid");
    }
    /**
     * 挂号接口对接app secret
     */
    public String getGuahaoSecret() {
        return getSystemProperties().getProperty("yihu_guahao_secret");
    }
    /**
     * 获取文件保存的临时路径
     *
     * @return
     */
    public String getTempPath() {
        return getSystemProperties().getProperty(TEMP_PATH);
    }
    /**
     * 获取图片存在地址
     *
     * @return
     */
    /**
     * 获取服务全路径
     *
     * @return
     */
    /******************************** 挂号配置 ********************************************/
    /**
     * 获取厦门预约服务地址
     */
    public String getXMGuahaoUrl() {
        return getSystemProperties().getProperty("guahao_url");
    }
    /**
     * 获取厦门预约服务命名空间
     */
    public String getXMGuahaoNamespace() {
        return getSystemProperties().getProperty("guahao_namespace");
    }
    /****************************************************************************************/
    /********************************* EHR配置 **********************************************/
    /**
     * 是否启用EHR演示
     */
    public Boolean getEhrUsed() {
        return Boolean.valueOf(getSystemProperties().getProperty("ehr_used"));
    }
    /**
     * EHR档案服务地址
     */
    public String getEhrServices() {
        return getSystemProperties().getProperty("ehr_services");
    }
    /**
     * EHR底层地址
     */
    public String getEhrServicesBase() {
        return getSystemProperties().getProperty("ehr_services_base");
    }
    /**************************************************************************************/
    /**************************************************************************************/
}

+ 0 - 54
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/util/http/IPInfoUtils.java

@ -1,54 +0,0 @@
package com.yihu.jw.util.http;
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 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);
    }
    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;
    }
}

+ 0 - 571
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/BaseController.java

@ -1,571 +0,0 @@
package com.yihu.jw.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.util.ReflectionUtils;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.*;
public class BaseController {
    private static Logger logger = LoggerFactory.getLogger(BaseController.class);
    @Autowired
    protected HttpServletRequest request;
    /**
     * 獲取髮送請求用戶的uid
     *
     * @return
     */
    public String getUID() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("uid");
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * 获取被代理人的code
     * @return
     */
    public String getRepresentedUID() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("represented");
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * 获取被代理人code,若没有则返回当前登录者
     * @return
     */
    public String getRepUID(){
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            if(json.isNull("represented")){
                return json.getString("uid");
            }
            return json.getString("represented");
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * 獲取髮送請求用戶的uid
     *
     * @return
     */
    public String getLastUid() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("lastUid");
        } catch (Exception e) {
            return null;
        }
    }
    public String getAppVersion() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("appVersion");
        } catch (Exception e) {
            return null;
        }
    }
    public String getOpenid() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("openid");
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * 获取用户ID
     *
     * @return
     */
    public long getId() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getLong("id");
        } catch (Exception e) {
            return 0;
        }
    }
    public String getIMEI() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("imei");
        } catch (Exception e) {
            return null;
        }
    }
    public String getToken() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("token");
        } catch (Exception e) {
            return null;
        }
    }
    public void error(Exception e) {
        logger.error(DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss")+":"+getClass().getName() + ":", e.getMessage());
        e.printStackTrace();
    }
    public void warn(Exception e) {
        logger.warn(getClass().getName() + ":", e.getMessage());
        e.printStackTrace();
    }
    public void infoMessage(String message) {
        logger.info(message);
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @return
     */
    public String error(int code, String msg) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return null;
        }
    }
    /**
     * 接口处理成功
     *
     * @param msg
     * @return
     */
    public String success(String msg) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", 200);
            map.put("msg", msg);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return null;
        }
    }
    public String write(int code, String msg) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return null;
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @return
     */
    public String write(int code, String msg, String key, List<?> list) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, list);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, JSONObject value) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            json.put(key, value);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, JSONArray value) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            json.put(key, value);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param total 总数
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, int total, String key, JSONArray value) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            json.put("total", total);
            json.put(key, value);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, Object value) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, value);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @return
     */
    public String write(int code, String msg, String key, Page<?> list) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            // 是否为第一页
            map.put("isFirst", list.isFirst());
            // 是否为最后一页
            map.put("isLast", list.isLast());
            // 总条数
            map.put("total", list.getTotalElements());
            // 总页数
            map.put("totalPages", list.getTotalPages());
            map.put(key, list.getContent());
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @return
     */
    public String write(int code, String msg, String key, Page<?> page, JSONArray array) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            // 是否为第一页
            json.put("isFirst", page == null ? false : page.isFirst());
            // 是否为最后一页
            json.put("isLast", page == null ? true : page.isLast());
            // 总条数
            json.put("total", page == null ? 0 : page.getTotalElements());
            // 总页数
            json.put("totalPages", page == null ? 0 : page.getTotalPages());
            json.put(key, array);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, Map<?, ?> value) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, value);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, String value) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, value);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
 /*   *//**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @return
     *//*
    public String write(int code, String msg, String key, IdEntity entity) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, entity);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }*/
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @return
     */
    public String write(int code, String msg, boolean isFirst, boolean isLast, long total, int totalPages, String key, Object values) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            // 是否为第一页
            json.put("isFirst", isFirst);
            // 是否为最后一页
            json.put("isLast", isLast);
            // 总条数
            json.put("total", total);
            // 总页数
            json.put("totalPages", totalPages);
            json.put(key, values);
            return json.toString();
        } catch (Exception e) {
            logger.error("BaseController:", e.getMessage());
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    public String trimEnd(String param, String trimChars) {
        if (param.endsWith(trimChars)) {
            param = param.substring(0, param.length() - trimChars.length());
        }
        return param;
    }
    /**
     * 无效用户消息返回
     *
     * @param e
     * @param defaultCode
     * @param defaultMsg
     * @return
     */
    public String invalidUserException(Exception e, int defaultCode, String defaultMsg) {
        try {
            // if (e instanceof UndeclaredThrowableException) {
            // UndeclaredThrowableException ute = (UndeclaredThrowableException) e;
            // InvalidUserException iue = (InvalidUserException) ute.getUndeclaredThrowable();
            // if (iue != null) {
            // return error(iue.getCode(), iue.getMsg());
            // }
            // }
            return error(defaultCode, defaultMsg);
        } catch (Exception e2) {
            return null;
        }
    }
    public List<Map<String, Object>> copyBeans(Collection<? extends Object> beans, String... propertyNames) {
        List<Map<String, Object>> result = new ArrayList<>();
        for (Object bean : beans) {
            result.add(copyBeanProperties(bean, propertyNames));
        }
        return result;
    }
    /**
     * 复制特定属性。
     *
     * @param bean
     * @param propertyNames
     * @return
     */
    public Map<String, Object> copyBeanProperties(Object bean, String... propertyNames) {
        Map<String, Object> simplifiedBean = new HashMap<>();
        for (String propertyName : propertyNames) {
            Field field = ReflectionUtils.findField(bean.getClass(), propertyName);
            if (field != null) {
                field.setAccessible(true);
                Object value = ReflectionUtils.getField(field, bean);
                simplifiedBean.put(propertyName, value == null ? "" : value);
            } else {
                simplifiedBean.put(propertyName, "");
            }
        }
        return simplifiedBean;
    }
    protected <J> ObjEnvelop<J> success(J obj){
        return success("success", obj);
    }
    protected <J> ObjEnvelop<J> success(String message, J obj){
        return success(message, 200, obj);
    }
    protected <J> ObjEnvelop<J> success(String message, int status, J obj){
        ObjEnvelop<J> objEnvelop = new ObjEnvelop<>();
        objEnvelop.setMessage(message);
        objEnvelop.setStatus(status);
        objEnvelop.setObj(obj);
        return objEnvelop;
    }
}

File diff suppressed because it is too large
+ 0 - 63
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/UpPrescription.java


+ 0 - 470
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/JobController.java

@ -1,470 +0,0 @@
package com.yihu.jw.web.quota;
import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
import com.yihu.jw.im.service.ImService;
import com.yihu.jw.internet.service.DataGeneratorService;
import com.yihu.jw.internet.service.InternetService;
import com.yihu.jw.internet.service.ykyy.YkyyInternetService;
import com.yihu.jw.job.DataUploadJob;
import com.yihu.jw.job.PrescriptionOverdueJob;
import com.yihu.jw.job.PrescriptionStatusUpdateJob;
import com.yihu.jw.job.QuartzHelper;
import com.yihu.jw.job.ykyy.YkyyDataUploadJob;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.service.quota.JobService;
import com.yihu.jw.util.SystemConf;
import com.yihu.jw.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
/**
 * 任务启动
 *
 * @author chenweida
 */
@RestController
@RequestMapping(value = "/job", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "后台-任务控制")
public class JobController extends BaseController {
    private org.slf4j.Logger logger = LoggerFactory.getLogger(JobController.class);
    private final JobService jobService;
    private final QuartzHelper quartzHelper;
    @Autowired
    private ImService imService;
    @Autowired
    private InternetService internetService;
    @Autowired
    private DataGeneratorService dataGeneratorService;
    @Autowired
    private YkyyInternetService ykyyInternetService;
    @Autowired
    public JobController(JobService jobService, QuartzHelper quartzHelper) {
        this.jobService = jobService;
        this.quartzHelper = quartzHelper;
    }
    @RequestMapping(value = "removeJob", method = RequestMethod.GET)
    public String removeJob(String taskId) {
        try {
            if(quartzHelper.isExistJob(taskId)){
                quartzHelper.removeJob(taskId);
                return success("删除成功!");
            }
            return success("删除成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "删除失败:" + e.getMessage());
        }
    }
    @RequestMapping(value = "getCalendar", method = RequestMethod.GET)
    public ObjEnvelop getCalendar() throws Exception{
       return success(quartzHelper.getCalendar());
    }
    @RequestMapping(value = "isExist", method = RequestMethod.GET)
    public String isExist(String taskId) {
        try {
            if(quartzHelper.isExistJob(taskId)){
                return success("job已经存在!");
            }
            return success("job不存在!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "执行失败:" + e.getMessage());
        }
    }
    @RequestMapping(value = "reStartById", method = RequestMethod.GET)
    public String reStartById(String taskId) {
        try {
            if(quartzHelper.isExistJob(taskId)){
                quartzHelper.removeJob(taskId);
            }
            switch(taskId){
                case "prescription_overdue_job":
                    if (!quartzHelper.isExistJob("prescription_overdue_job")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("prescription_overdue_job");
                        quartzHelper.addJob(PrescriptionOverdueJob.class, trigger, "prescription_overdue_job", new HashMap<String, Object>());
                        logger.info("prescription_overdue_job  job success");
                    } else {
                        logger.info("prescription_overdue_job  job exist");
                    }
                    break;
                case "data_upload_job" :
                    //互联网医院 监管平台上报
                    if (!quartzHelper.isExistJob("data_upload_job")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("data_upload_job");
                        quartzHelper.addJob(DataUploadJob.class, trigger, "data_upload_job", new HashMap<String, Object>());
                        logger.info("data_upload_job  job success");
                    } else {
                        logger.info("data_upload_job  job exist");
                    }
                    break;
                case "data_ykupload_job" :
                    //互联网医院 监管平台上报
                    if (!quartzHelper.isExistJob("data_ykupload_job")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("data_ykupload_job");
                        quartzHelper.addJob(YkyyDataUploadJob.class, trigger, "data_ykupload_job", new HashMap<String, Object>());
                        logger.info("data_ykupload_job  job success");
                    } else {
                        logger.info("data_ykupload_job  job exist");
                    }
                    break;
                default :
            }
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去几天的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByDay", method = RequestMethod.GET)
    public String productDataByDay(Integer day) {
        try {
            jobService.productDataByDay(day);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去某一天的全部的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByOneDay", method = RequestMethod.GET)
    public String productDataByOneDay(String day) {
        try {
            jobService.productDataByOneDay(day);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去某一天的某一个指标的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByOneDayWithId", method = RequestMethod.GET)
    public String productDataByOneDayWithId(String day, String id) {
        try {
            jobService.productDataByOneDayWithId(day, id);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 生成过去某几天的某一个指标的数据
     *
     * @param day
     * @return
     */
    @RequestMapping(value = "productDataByDayAndId", method = RequestMethod.GET)
    public String productDataByDayAndId(Integer day, String id) {
        try {
            jobService.productDataByDayAndId(day, id);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动任务
     *
     * @param id id
     * @return
     */
    @RequestMapping(value = "startById", method = RequestMethod.GET)
    public String startById(String id) {
        try {
            jobService.startById(id);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止任务
     *
     * @param id id
     * @return
     */
    @RequestMapping(value = "stopById", method = RequestMethod.GET)
    public String stopById(String id) {
        try {
            jobService.stopById(id);
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止所有任务
     *
     * @return
     */
    @RequestMapping(value = "stopAll", method = RequestMethod.GET)
    public String stopAll() {
        try {
            jobService.stopAll();
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动所有任务
     *
     * @return
     */
    @RequestMapping(value = "startAll", method = RequestMethod.GET)
    public String startAll() {
        try {
            jobService.startAll();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    @RequestMapping(value = "/PrescriptionStatusUpdateJob", method = RequestMethod.POST)
    @ApiOperation("处方状态变更")
    public String PrescriptionStatusUpdateJob() {
        try {
            quartzHelper.startNow(PrescriptionStatusUpdateJob.class, UUID.randomUUID().toString(), null);
            return write(200, "启动成功");
        } catch (Exception e) {
            error(e);
            return error(-1, "启动失败");
        }
    }
    @RequestMapping(value = "/PrescriptionOverdueJob", method = RequestMethod.POST)
    @ApiOperation("门诊过期")
    public String PrescriptionOverdueJob() {
        try {
            quartzHelper.startNow(PrescriptionOverdueJob.class, UUID.randomUUID().toString(), null);
            return write(200, "启动成功");
        } catch (Exception e) {
            error(e);
            return error(-1, "启动失败");
        }
    }
    @RequestMapping(value = "/internetUpload", method = RequestMethod.GET)
    @ApiOperation("监管平台测试")
    public String internetUpload(String taskId,String endDate,String startDate,String keyId) {
        try {
            String res = "";
            switch(taskId){
                case "2.2":
                    logger.info("START========2.2 医院基本信息========");
                    res =  internetService.upNsOrganBas();
                    logger.info("END==========2.2 医院基本信息 ========" + res);
                    break;
                case "2.3" :
                    // 2、分步执行需要JOB执行的服务
                    logger.info("START========2.3 医师基本信息========");
                    res = internetService.upNsDoctorRecord(startDate,endDate,keyId);
                    logger.info("END==========2.3 医师基本信息 ========" + res);
                    break; 
                case "2.5" :
                    logger.info("START========2.5 网上预约挂号上传开始========");
                    res = internetService.upAppointmentOnline(startDate,endDate,keyId);
                    logger.info("END==========2.5 网上预约挂号上传结束========" + res);
                    break; 
                case "2.6" :
                    logger.info("START========2.6 网上医技预约上传开始========");
                    res = internetService.upMedicalOnline(startDate,endDate,keyId);
                    logger.info("END==========2.6 网上医技预约上传结束========" + res);
                    break; 
                case "2.7" :
                    logger.info("START========2.7 医生评价信息开始========");
                    res = internetService.upNsDoctorScore(startDate,endDate,keyId);
                    logger.info("END==========2.7 医生评价信息结束========" + res);
                    break; 
                case "2.8" :
                    logger.info("START========2.8 网络咨询服务信息开始========");
                    res = internetService.upNsOnlineAsk(startDate,endDate,keyId);
                    logger.info("END==========2.8 网络咨询服务信息结束========" + res);
                    break; 
                case "2.9" :
                    logger.info("START========2.9 网络咨询服务信息开始========");
                    res = internetService.upNsOnlineMed(startDate,endDate,keyId);
                    logger.info("END==========2.9 网络咨询服务信息结束========" + res);
                    break; 
                case "2.10" :
                    logger.info("START========2.10 电子处方表开始========");
                    res = internetService.upPrescription(startDate,endDate,keyId);
                    logger.info("END==========2.10 电子处方表结束========" + res);
                    break; 
                case "2.11" :
                    logger.info("START========2.11 电子处方_药品明细表开始 ========");
                    res = internetService.upPrescriptionDrug(startDate,endDate,keyId);
                    logger.info("END==========2.11 电子处方_药品明细表结束 ========" + res);
                    break;
                case "2.12" :
                    logger.info("START========2.12 在线诊疗服务信息-过程图片上传 ========");
                    res = internetService.upNsOnlineImg(startDate,endDate,keyId);
                    logger.info("END==========2.12 在线诊疗服务信息-过程图片上传 ========" + res);
                    break;
                case "2.13" :
                    logger.info("START========2.13 用户协议信息 ========");
                    res = internetService.upNsOrganProtocol(startDate,endDate,keyId);
                    logger.info("END==========2.13 用户协议信息 ========" + res);
                    break;
                default :
            }
            return success("success");
        } catch (Exception e) {
            error(e);
            return error(-1, "启动失败");
        }
    }
    @RequestMapping(value = "/setData", method = RequestMethod.POST)
    @ApiOperation("生成数据")
    public String setData(String doctor,String date) {
        try {
            //生成门诊记录
            List<WlyyOutpatientDO> list = dataGeneratorService.setData(doctor,date);
            //生成咨询数据
            imService.setJobData(list,date);
            return write(200, "数据已经生成");
        } catch (Exception e) {
            error(e);
            return error(-1, "数据已经生成");
        }
    }
    @RequestMapping(value = "/delData", method = RequestMethod.POST)
    @ApiOperation("删除数据")
    public String delData(String doctor,String date) {
        try {
            List<WlyyOutpatientDO> list = dataGeneratorService.delData(doctor,date);
            imService.deleteJobData(list,date);
            return write(200, "数据已经删除");
        } catch (Exception e) {
            error(e);
            return error(-1, "数据已经删除");
        }
    }
    @RequestMapping(value = "/ykyyUpload", method = RequestMethod.GET)
    @ApiOperation("上传")
    public String ykyyUpload(String id,String startDate,String endDate,String keyId) {
        try {
            switch(id){
                case "2.2" :
                    ykyyInternetService.upNsOrganBas();
                    break; //可选
                case "2.3" :
                    //语句
                    ykyyInternetService.upNsDoctorRecord(keyId);
                    break; //可选
                case "2.5" :
                    //语句
                    ykyyInternetService.upAppointmentOnline(startDate,endDate,keyId);
                    break; //可选
                case "2.6" :
                    //语句
                    ykyyInternetService.upMedicalOnline(startDate,endDate,keyId);
                    break; //可选
                case "2.7" :
                    //语句
                    ykyyInternetService.upNsDoctorScore(startDate,endDate,keyId);
                    break; //可选upNsDoctorScore
                case "2.8" :
                    //语句
                    ykyyInternetService.upNsOnlineAsk(startDate,endDate,keyId);
                    break; //可选
                case "2.9" :
                    //语句
                    ykyyInternetService.upNsOnlineMed(startDate,endDate,keyId);
                    break; //可选
                case "2.10" :
                    //语句
                    ykyyInternetService.upPrescription(startDate,endDate,keyId);
                    break; //可选
                case "2.11" :
                    //语句
                    ykyyInternetService.upPrescriptionDrug(startDate,endDate,keyId);
                    break; //可选
                case "2.12" :
                    //语句
                    ykyyInternetService.upNsOnlineImg(startDate,endDate,keyId);
                    break; //可选
                case "2.13" :
                    //语句
                    ykyyInternetService.upNsOrganProtocol(startDate,endDate,keyId);
                    break; //可选
                case "2.14" :
                    //语句
                    ykyyInternetService.upNsInvokeTotal(startDate,endDate);
                    break; //可选
                default : //可选
                    //语句
            }
            return write(200, "执行成功");
        } catch (Exception e) {
            error(e);
            return error(-1, "执行失败");
        }
    }
}

+ 0 - 110
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/WlyyJobConfigVO.java

@ -1,110 +0,0 @@
package com.yihu.jw.web.quota;
import java.io.Serializable;
/**
 * Created by Administrator on 2016/8/16.
 */
public class WlyyJobConfigVO implements  Serializable {
    private static final long serialVersionUID = 1L;
    private String id;
    private String quotaId;//指标id
    private String jobName;//任务名称
    private String jobInfo;//任务描述
    private String jobType;//任务类型(0--单次执行  1--周期执行 2--监听任务)
    private String jobClass;//任务执行的class
    private String quartzCron;//quartz表达式
    private String status;//1 启动 0停止
    private String del;//是否删除 1正常 0删除
    public WlyyJobConfigVO() {
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getQuotaId() {
        return quotaId;
    }
    public void setQuotaId(String quotaId) {
        this.quotaId = quotaId;
    }
    public String getJobName() {
        return jobName;
    }
    public void setJobName(String jobName) {
        this.jobName = jobName;
    }
    public String getJobInfo() {
        return jobInfo;
    }
    public void setJobInfo(String jobInfo) {
        this.jobInfo = jobInfo;
    }
    public String getJobType() {
        return jobType;
    }
    public void setJobType(String jobType) {
        this.jobType = jobType;
    }
    public String getJobClass() {
        return jobClass;
    }
    public void setJobClass(String jobClass) {
        this.jobClass = jobClass;
    }
    public String getQuartzCron() {
        return quartzCron;
    }
    public void setQuartzCron(String quartzCron) {
        this.quartzCron = quartzCron;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
    @Override
    public String toString() {
        return "WlyyJobConfigVO{" +
                "id='" + id + '\'' +
                ", quotaId='" + quotaId + '\'' +
                ", jobName='" + jobName + '\'' +
                ", jobInfo='" + jobInfo + '\'' +
                ", jobType='" + jobType + '\'' +
                ", jobClass='" + jobClass + '\'' +
                ", quartzCron='" + quartzCron + '\'' +
                ", status='" + status + '\'' +
                ", del='" + del + '\'' +
                '}';
    }
}

+ 0 - 107
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/WlyyQuotaVO.java

@ -1,107 +0,0 @@
package com.yihu.jw.web.quota;
import java.io.Serializable;
import java.util.Date;
/**
 * Created by Administrator on 2016/8/16.
 */
public class WlyyQuotaVO implements Serializable {
    private static final long serialVersionUID = 2L;
    private String id;
    private String name;//指标名称
    private String level1;//指标维度(1:机构维度)
    private String level2;//2级维度 (1:患者性别 2:患者分组 3:患者年龄)
    private String cycle;//统计周期( 1:天 )
    private String type;//尺度(1 新增 2是累计)
    private Date createTime;//创建时间
    private Date modifyTime;//修改时间
    private String del;//1: 正常 0: 删除
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getLevel1() {
        return level1;
    }
    public void setLevel1(String level1) {
        this.level1 = level1;
    }
    public String getLevel2() {
        return level2;
    }
    public void setLevel2(String level2) {
        this.level2 = level2;
    }
    public String getCycle() {
        return cycle;
    }
    public void setCycle(String cycle) {
        this.cycle = cycle;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getModifyTime() {
        return modifyTime;
    }
    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
    @Override
    public String toString() {
        return "WlyyQuotaVO{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", level1='" + level1 + '\'' +
                ", level2='" + level2 + '\'' +
                ", cycle='" + cycle + '\'' +
                ", type='" + type + '\'' +
                ", createTime=" + createTime +
                ", modifyTime=" + modifyTime +
                ", del='" + del + '\'' +
                '}';
    }
}

+ 22 - 3
svr/svr-internet-hospital-job/src/main/resources/application.yml

@ -52,6 +52,17 @@ FileTempPath:
  voice_path : /var/local/upload/voice
  chat_file_path : /var/local/upload/chat
#发现服务
eureka:
  client:
    healthcheck:
      enabled: false #监控检查
    serviceUrl:
      defaultZone: http://jw:jkzl@127.0.0.1:8761/eureka/
  instance:
    prefer-ip-address: false
#    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
---
spring:
  profiles: jwdev
@ -78,6 +89,8 @@ fastDFS:
  fastdfs_file_url: http://172.26.0.110:8888/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段
---
spring:
  profiles: jwtest
@ -106,6 +119,8 @@ wlyy:
  url: http://www.xmtyw.cn/wlyytest/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段
---
spring:
  profiles: jwOracleTest
@ -141,14 +156,16 @@ wlyy:
  url: http://www.xmtyw.cn/wlyytest/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段
---
spring:
  profiles: jwOracleProd
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@192.168.20.55:1521:orcl
    username: system
    password: hxyk9573
    url: jdbc:oracle:thin:@10.10.10.16:1521/rac
    username: HLWYY
    password: Xmykzxhlwyy963
  jpa:
    properties:
      hibernate:
@ -176,6 +193,8 @@ wlyy:
  url: http://www.xmtyw.cn/wlyytest/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段
---
spring:
  profiles: jwprod

+ 1 - 1
svr/svr-internet-hospital-job/src/main/resources/bootstrap.yml

@ -34,7 +34,7 @@ spring:
  profiles: jwOracleProd
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      uri: ${wlyy.spring.config.uri:http://192.168.33.199:1221}
      label: ${wlyy.spring.config.label:jwdev}
---
spring:

+ 2 - 1
svr/svr-internet-hospital-job/src/main/resources/quartz.properties

@ -24,6 +24,7 @@ org.quartz.jobStore.isClustered=false
# RAM
# org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
# Configure JobStore Cluster
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#datasource׺
@ -40,4 +41,4 @@ org.quartz.jobStore.tablePrefix:QRTZ_
#org.quartz.dataSource.qzDS.password: 123456
org.quartz.jobGroupName = RS_JOBGROUP_NAME
org.quartz.triggerGroupName = RS_TRIGGERGROUP_NAME
org.quartz.triggerGroupName = RS_TRIGGERGROUP_NAME

+ 49 - 1
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java

@ -3,9 +3,12 @@ package com.yihu.jw.hospital.endpoint.prescription;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionDiagnosisDO;
import com.yihu.jw.hospital.prescription.dao.OutpatientDao;
import com.yihu.jw.hospital.prescription.service.InspectionService;
import com.yihu.jw.hospital.prescription.service.PrescriptionLogService;
import com.yihu.jw.hospital.prescription.service.PrescriptionService;
import com.yihu.jw.hospital.prescription.service.WorkTimeService;
import com.yihu.jw.hospital.prescription.service.entrance.DoctorPreSignService;
import com.yihu.jw.hospital.service.SystemMessage.HospitalSystemMessageService;
import com.yihu.jw.im.service.ImService;
@ -29,6 +32,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import oracle.jdbc.proxy.annotation.Post;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -64,9 +68,15 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
    
    @Autowired
    private HospitalSystemMessageService hospitalSystemMessageService;
    @Autowired
    private WorkTimeService workTimeService;
    
    @Autowired
    private ImService imService;
    
    @Autowired
    private OutpatientDao outpatientDao;
    @Value("${demo.flag}")
    private boolean demoFlag;
@ -338,7 +348,31 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
                                            @RequestParam(value = "diagnosisJson", required = true)String diagnosisJson,
                                            @ApiParam(name = "inspectionJson", value = "检查检验")
                                            @RequestParam(value = "inspectionJson", required = false)String inspectionJson)throws Exception {
        return success(prescriptionService.makeDiagnosis(outPatientId,advice,type,infoJsons,diagnosisJson,inspectionJson));
        Map<String,Object> result = prescriptionService.makeDiagnosis(outPatientId,advice,type,infoJsons,diagnosisJson,inspectionJson);
        try {
    
            com.alibaba.fastjson.JSONObject msgObj = new com.alibaba.fastjson.JSONObject();
            
            List<WlyyPrescriptionDiagnosisDO> diagnosisDOs = (List<WlyyPrescriptionDiagnosisDO>) com.alibaba.fastjson.JSONArray.parseArray(diagnosisJson, WlyyPrescriptionDiagnosisDO.class);
            String zd_str = "";
            String jl_str = advice;
            for(WlyyPrescriptionDiagnosisDO diagnosisDO:diagnosisDOs){
                if("1".equals(diagnosisDO.getType())){
                    zd_str+=diagnosisDO.getName()+","+zd_str;
                }else {
                    zd_str+=diagnosisDO.getName()+",";
                }
            }
            msgObj.put("zd",zd_str);
            msgObj.put("jl",jl_str);
            WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findOne(outPatientId);
            String immsg = imService.pushHuiZhenMsg(msgObj,wlyyOutpatientDO.getDoctor(),wlyyOutpatientDO.getDoctorName(),outPatientId,wlyyOutpatientDO.getPatient(),wlyyOutpatientDO.getOutpatientType());
            System.out.println("发送诊断消息成功:"+immsg);
        }catch (Exception e){
            System.out.println("发送诊断消息失败:"+e.getMessage());
//            e.printStackTrace();
        }
        return success(result);
    }
@ -968,4 +1002,18 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
                                                  @RequestParam(value = "pagesize",required = false)Integer pagesize) {
        return success(prescriptionService.findDeptWithDoctorWorkTime(hospital,keyWord,page,pagesize));
    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.findWorkTimeRule)
    @ApiOperation(value = "查询排班规则")
    public ObjEnvelop findWorkTimeRule(@ApiParam(name = "hospital", value = "医院code")
                                       @RequestParam(value = "hospital",required = false)String hospital) {
        return success(workTimeService.findWorkTimeRule(hospital));
    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.saveWorkTimeRule)
    @ApiOperation(value = "保存排班规则")
    public ObjEnvelop saveWorkTimeRule(@ApiParam(name = "workTimeRuleJson", value = "保存排班规则")
                                       @RequestParam(value = "workTimeRuleJson",required = false)String workTimeRuleJson) throws Exception{
        return success(workTimeService.saveWorkTimeRule(workTimeRuleJson));
    }
}

+ 4 - 3
svr/svr-internet-hospital/src/main/resources/application.yml

@ -77,6 +77,7 @@ express:
  sf_url: http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService
  sf_code: JKZL
  sf_check_word: QkeIfIvQdheqIv2cVSgAUnBU29lfNbVk
---
spring:
  profiles: jwdev
@ -371,9 +372,9 @@ spring:
  profiles: jwOracleProd
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@172.26.0.141:1521:helowin
    username: normal
    password: normal
    url: jdbc:oracle:thin:@10.10.10.16:1521/rac
    username: HLWYY
    password: Xmykzxhlwyy963
  jpa:
    properties:
      hibernate:

+ 3 - 2
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/rehabilitation/RehabilitationManageController.java

@ -325,9 +325,10 @@ public class RehabilitationManageController {
    @ApiOperation(value = "康复计划完成时更新服务完成笔记和图片接口并且确认完成")
    public ObjEnvelop updateNoteAndImageRehabilitationOperate(@ApiParam(name = "planDetailId", value = "服务项目id", required = true)@RequestParam(value = "planDetailId", required = true)String planDetailId,
                                                           @ApiParam(name = "node", value = "服务完成笔记", required = true)@RequestParam(value = "node", required = false)String node,
                                                           @ApiParam(name = "image", value = "相关记录图片,json格式", required = true)@RequestParam(value = "image", required = false)String image){
                                                           @ApiParam(name = "image", value = "相关记录图片,json格式", required = true)@RequestParam(value = "image", required = false)String image,
                                                              @ApiParam(name = "relationCode", value = "业务code", required = true)@RequestParam(value = "relationCode", required = false)String relationCode){
        try {
            Map<String,Object> map = rehabilitationManageService.updateNodeAndRelationRecordImg(node,image,planDetailId);
            Map<String,Object> map = rehabilitationManageService.updateNodeAndRelationRecordImg(node,image,planDetailId,relationCode);
            return ObjEnvelop.getSuccess(SpecialistMapping.api_success,map);
        }catch (Exception e){

+ 4 - 0
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/dao/rehabilitation/RehabilitationDetailDao.java

@ -66,6 +66,10 @@ public interface RehabilitationDetailDao extends PagingAndSortingRepository<Reha
    @Query("update RehabilitationDetailDO t set t.status = ?1 where t.id=?2 ")
    int updateStatusById(Integer status,String id);
    @Modifying
    @Query("update RehabilitationDetailDO t set t.status = ?1,t.relationCode=?3 where t.id=?2 ")
    int updateStatusAndRelationCodeById(Integer status,String id,String relationCode);
    @Query(value ="select p.patient from wlyy_rehabilitation_plan_detail d left join wlyy_patient_rehabilitation_plan p on d.plan_id=p.id where d.id=?1",nativeQuery = true)
    List<String> findPatientById(String planDetailId);

+ 25 - 2
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistService.java

@ -205,7 +205,8 @@ public class SpecialistService{
                " lb.labelName as health, " +
                " lb.label AS healthcode ," +
                " s.health_assistant AS healthAssistant," +
                " s.health_assistant_name AS healthAssistantName" +
                " s.health_assistant_name AS healthAssistantName," +
                " s.is_manage AS isManage" +
                " FROM " +
                " ( " +
                "  SELECT " +
@ -237,7 +238,8 @@ public class SpecialistService{
                    "d.label_name AS health," +
                    "d.label AS healthcode," +
                    "a.health_assistant AS healthAssistant," +
                    "a.health_assistant_name AS healthAssistantName " +
                    "a.health_assistant_name AS healthAssistantName, " +
                    "a.is_manage AS isManage " +
                    "FROM wlyy_specialist.wlyy_specialist_patient_relation a " +
                    "JOIN "+basedb+".wlyy_patient_disease_server b ON a.id=b.specialist_relation_code AND b.disease=" +labelCode+" and b.del=1 "+
                    "JOIN "+basedb+".wlyy_patient c ON a.patient=c.CODE " +
@ -247,6 +249,24 @@ public class SpecialistService{
                    " AND a.team_code ='" +teamCode+"' "+
                    " LIMIT "+(page-1)*size+","+size;
        }
        
        if("pending".equals(labelType)){
            sql = "SELECT " +
                    "c.CODE," +
                    "c.NAME," +
                    "c.sex," +
                    "IFNULL(YEAR (from_days(datediff(now(),c.birthday))),'未知') age," +
                    "c.photo," +
                    "a.health_assistant AS healthAssistant," +
                    "a.health_assistant_name AS healthAssistantName " +
                    "a.is_manage AS isManage, " +
                    "FROM wlyy_specialist.wlyy_specialist_patient_relation a " +
                    "JOIN "+basedb+".wlyy_patient c ON a.patient=c.CODE " +
                    " WHERE a.sign_status> 0 AND a.`status`>=0 AND (a.is_manage = 0 or a.is_manage is null)" +
                    " AND a.team_code ='" +teamCode+"' "+
                    " LIMIT "+(page-1)*size+","+size;
        }
        
        List<PatientLabelVO> PatientLabelVOs = jdbcTemplate.query(sql,new BeanPropertyRowMapper(PatientLabelVO.class));
        return MixEnvelop.getSuccess(SpecialistMapping.api_success,PatientLabelVOs);
    }
@ -327,6 +347,7 @@ public class SpecialistService{
                " p.photo, " +
                " IFNULL(year( from_days( datediff( now(), p.birthday))),'未知') age, " +
                " p.sex ," +
                " p.idcard ," +
                " h.label_name as health, " +
                " h.label AS healthcode " +
                " FROM " +
@ -614,6 +635,8 @@ public class SpecialistService{
                " d.photo, " +
                " d.dept, " +
                " d.dept_name AS deptName, " +
                " d.job_name AS job, " +
                " d.sex AS sex, " +
                " d.hospital, " +
                " d.hospital_name AS hospital_name, " +
                " d.`level` " +

+ 21 - 15
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/rehabilitation/RehabilitationManageService.java

@ -594,7 +594,7 @@ public class RehabilitationManageService {
            planDetailList +=",'"+one+"'";
        }
        String planDetailResult = StringUtils.isNotEmpty(planDetailList)?planDetailList.substring(1):"";
        String sql = "select i.name,i.code,d.execute_time,d.hospital_name,d.id,d.status,d.type as detailType,d.expense,d.doctor as executeDoctor," +
        String sql = "select i.name,i.code,i.content,d.execute_time,d.hospital_name,d.id,d.status,d.type as detailType,d.expense,d.doctor as executeDoctor," +
                " d.doctor_name as executeDoctorName,p.patient ,p.create_user as createDoctor,p.create_user_name as createDoctorName, p.status as planStatus  " +
                " from wlyy_specialist.wlyy_rehabilitation_plan_detail d " +
                " LEFT JOIN wlyy_specialist.wlyy_rehabilitation_service_item i on i.code = d.hospital_service_item_id " +
@ -624,7 +624,7 @@ public class RehabilitationManageService {
            resultMap.put("title",one.get("name"));//项目标题
            resultMap.put("planDetaiId",one.get("id"));//计划服务项目id
            resultMap.put("shortExecuteTime",DateUtil.dateToStr((Date) one.get("execute_time"),DateUtil.HH_MM));//项目标题
            resultMap.put("content",one.get("name"));//项目内容
            resultMap.put("content",one.get("content"));//项目内容
            resultMap.put("hospitalName",one.get("hospital_name"));//地点
            resultMap.put("executeTime",one.get("execute_time"));//执行时间
            DecimalFormat df = new DecimalFormat("0.00");
@ -654,7 +654,7 @@ public class RehabilitationManageService {
           /* Integer itemType = (Integer) one.get("itemType");*/
            resultMap.put("messageList",messageMapList);//指导与汇报记录
            resultMap.put("patient",one.get("patient"));
            resultMap.put("itemType",null);
            resultMap.put("itemType",one.get("code"));
            resultMap.put("detaiType",one.get("detaiType"));
            resultMap.put("status",status);//状态
            //是否完成任务
@ -689,9 +689,9 @@ public class RehabilitationManageService {
     *
     */
    public ObjEnvelop serviceItem(String planDetailId,String doctorCode) throws Exception{
        String sql = "select h.name as title,h.name as content,h.code as itemType,d.id,d.execute_time,d.hospital_name,d.status,d.type,d.expense,d.doctor as executeDoctor, " +
        String sql = "select h.name as title,h.content as content,h.code as itemType,d.id,d.execute_time,d.hospital_name,d.status,d.type,d.expense,d.doctor as executeDoctor, " +
                " d.doctor_name as executeDoctorName,p.patient ,p.name as patientName,p.create_user as createDoctor,p.create_user_name as createDoctorName, p.status as planStatus," +
                " p.disease,p.disease_name as diseaseName,p.title as planTitle"+
                " p.disease,p.disease_name as diseaseName,p.title as planTitle,d.plan_id as planId,d.relation_code as relationCode "+
                " from wlyy_specialist.wlyy_rehabilitation_plan_detail d " +
                " LEFT JOIN wlyy_specialist.wlyy_rehabilitation_service_item h on d.hospital_service_item_id = h.code "+
                " LEFT JOIN wlyy_specialist.wlyy_patient_rehabilitation_plan p on d.plan_id=p.id " +
@ -724,6 +724,7 @@ public class RehabilitationManageService {
        resultMap.put("expense",one.get("expense")!=null?df.format(((Integer)one.get("expense")*1.00)/100.00):0);//收费
        resultMap.put("reserve",one.get("reserve"));//是否需要预约(1预约、0不预约)
        resultMap.put("planStatus",one.get("planStatus"));//计划的状态
        resultMap.put("relationCode",one.get("relationCode"));//业务关联code
        Integer status = Integer.valueOf(one.get("status").toString());//状态(0未完成,1已完成,2已预约)
        String statusName = "";
        switch (status){
@ -736,6 +737,7 @@ public class RehabilitationManageService {
        resultMap.put("disease",one.get("disease"));
        resultMap.put("diseaseName",one.get("diseaseName"));
        resultMap.put("planTitle",one.get("planTitle"));
        resultMap.put("planId",one.get("planId"));
        //指导与汇报
        List<GuidanceMessageLogDO> messageList = guidanceMessageLogDao.findByPlanDetailId(one.get("id").toString());
        List<Map<String,Object>> messageMapList = new ArrayList<>();
@ -804,8 +806,8 @@ public class RehabilitationManageService {
        //完成项目=全部的服务项目-未完成的服务项目
        List<Map<String,Object>> serviceDoctorList = new ArrayList<>();
        //全科医生和健管师要是同一个人,就显示全科医生
        if(!generalDoctor.equals(healthDoctor)){
  /*      if(!generalDoctor.equals(healthDoctor)){
*/
            if(StringUtils.isNotEmpty(healthDoctor)){
                Map<String,Object> healthDoctorMap =  new HashMap<>();
@ -819,7 +821,7 @@ public class RehabilitationManageService {
                healthDoctorMap.put("serviceCount",healthServiceCount);
                serviceDoctorList.add(healthDoctorMap);
            }
        }
/*        }*/
        if(StringUtils.isNotEmpty(generalDoctor)){
            Map<String,Object> generalDoctorMap =  new HashMap<>();
@ -1263,10 +1265,15 @@ public class RehabilitationManageService {
     * @param planDeatilId
     * @return
     */
    public Map<String,Object> updateNodeAndRelationRecordImg(String node,String image,String planDeatilId)throws Exception{
    public Map<String,Object> updateNodeAndRelationRecordImg(String node,String image,String planDeatilId,String relationCode)throws Exception{
        Map<String,Object> resultMap = new HashedMap();
        try{
            int i = rehabilitationDetailDao.updateStatusById(1,planDeatilId);
            int i =0;
            if (StringUtils.isNoneBlank(relationCode)){
                i=rehabilitationDetailDao.updateStatusAndRelationCodeById(1,planDeatilId,relationCode);
            }else {
                i=rehabilitationDetailDao.updateStatusById(1,planDeatilId);
            }
            int j = rehabilitationOperateRecordsDao.updateNodeAndRelationRecordImg(node,image,planDeatilId);
            //如果整个计划的服务项都完成了,整个计划也完成了
            String allSql ="SELECT * FROM wlyy_rehabilitation_plan_detail where plan_id = (SELECT plan_id FROM `wlyy_rehabilitation_plan_detail` WHERE id='"+planDeatilId+"')";
@ -1451,17 +1458,16 @@ public class RehabilitationManageService {
                "  d.plan_id," +
                "  d.hospital," +
                "  d.hospital_name," +
                "  i.service_item_id," +
                "  i.service_item_name," +
                "  i.code as service_item_id," +
                "  i.name as service_item_name," +
                "  d.expense," +
                "  r.doctor_code," +
                "  r.doctor_name," +
                "  r.complete_time, " +
                "  s.item_type " +
                "  i.code as item_type " +
                "  FROM" +
                "  wlyy_rehabilitation_plan_detail d" +
                "  LEFT JOIN wlyy_hospital_service_item i ON d.hospital_service_item_id = i.id  " +
                "  LEFT JOIN wlyy_service_item s ON i.service_item_id = s.id " +
                "  LEFT JOIN wlyy_rehabilitation_service_item i ON d.hospital_service_item_id = i.code  "+
                "  LEFT JOIN wlyy_rehabilitation_operate_records r ON d.id = r.rehabilitation_detail_id" +
                "  WHERE" +
                "  r.`status` = 1" +