Selaa lähdekoodia

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

wangzhinan 2 vuotta sitten
vanhempi
commit
5efd7612fc
100 muutettua tiedostoa jossa 8120 lisäystä ja 442 poistoa
  1. 20 0
      business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportDetailDao.java
  2. 36 0
      business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportUploadDao.java
  3. 1294 0
      business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java
  4. 6 0
      business/base-service/src/main/java/com/yihu/jw/hospital/dict/WlyyHospitalSysDictDao.java
  5. 247 0
      common/common-entity/sql记录
  6. 48 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/menu/BaseMenuUrlDO.java
  7. 97 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseDeviceElectricRecordDO.java
  8. 103 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/radio/WlyyRadioDO.java
  9. 31 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/video/BaseVideoDO.java
  10. 69 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/video/BaseVideoGroupDO.java
  11. 33 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/voice/BaseWordToVoiceDO.java
  12. 186 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/weather/BaseWeatherDayDO.java
  13. 146 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/weather/BaseWeatherWeekDO.java
  14. 104 0
      common/common-entity/src/main/java/com/yihu/jw/entity/child/BaseChildManage.java
  15. 127 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java
  16. 92 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java
  17. 1 2
      common/common-entity/src/main/java/com/yihu/jw/entity/followup/Followup.java
  18. 21 1
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/message/SystemMessageDO.java
  19. 83 0
      common/common-entity/src/main/java/com/yihu/jw/entity/log/BasePatientPadPushOnOffEntity.java
  20. 127 0
      common/common-entity/src/main/java/com/yihu/jw/entity/log/BasePushRecordLogEntity.java
  21. 80 0
      common/common-entity/src/main/java/com/yihu/jw/entity/log/BasePushrecordLogInfoEntity.java
  22. 10 3
      common/common-entity/src/main/java/com/yihu/jw/entity/specialist/rehabilitation/RehabilitationDetailDO.java
  23. 130 0
      common/common-entity/src/main/java/com/yihu/jw/entity/util/BaseHzInterfaceDictEntity.java
  24. 23 0
      common/common-util/src/main/java/com/yihu/jw/util/common/RSAUtils.java
  25. 28 0
      common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java
  26. 27 4
      common/common-util/src/main/java/com/yihu/jw/util/http/HttpClientUtil.java
  27. 12 2
      gateway/ag-basic/src/main/resources/application.yml
  28. 7 0
      gateway/ag-basic/src/main/resources/bootstrap.yml
  29. 10 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  30. 36 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyIotLoginEndpoint.java
  31. 31 0
      server/svr-authentication/src/main/resources/application.yml
  32. 7 1
      server/svr-authentication/src/main/resources/bootstrap.yml
  33. 1 0
      starter/elasticsearch-starter/pom.xml
  34. 2 1
      starter/swagger-starter/src/main/java/com/yihu/jw/SwaggerConfig.java
  35. 6 0
      svr/svr-base/pom.xml
  36. 9 0
      svr/svr-base/src/main/java/com/yihu/SvrBaseApplication.java
  37. 11 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/childManage/BaseChildManageDao.java
  38. 13 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/log/BasePatientPadPushOnOffDao.java
  39. 17 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/log/BasePushRecordLogDao.java
  40. 19 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/log/BasePushrecordLogInfoDao.java
  41. 22 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/radio/WlyyRadioDao.java
  42. 11 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/video/BaseVideoDao.java
  43. 16 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/video/BaseVideoGroupDao.java
  44. 133 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/ManageMessagePush/ManageSystemPushMessageController.java
  45. 96 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/childManage/ChildManageController.java
  46. 143 116
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/common/FileUploadController.java
  47. 82 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/radio/WlyyRadioEndpoint.java
  48. 201 142
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/role/MenuEndpoint.java
  49. 147 68
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/user/UserEndpoint.java
  50. 132 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/video/BaseVideoEndpoint.java
  51. 350 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/ManageMessagePush/ManageSystemPushMessageService.java
  52. 94 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/child/ChildManageService.java
  53. 59 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/device/DeviceManageService.java
  54. 3 3
      svr/svr-base/src/main/java/com/yihu/jw/base/service/lifeCare/LifeCareService.java
  55. 99 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/radio/WlyyRadioService.java
  56. 169 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/video/BaseVideoGroupService.java
  57. 687 0
      svr/svr-base/src/main/java/com/yihu/jw/base/util/HttpClientUtilCare.java
  58. 59 2
      svr/svr-base/src/main/resources/application.yml
  59. 7 0
      svr/svr-base/src/main/resources/bootstrap.yml
  60. 13 3
      svr/svr-cloud-care/pom.xml
  61. 23 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/constant/CommonConstant.java
  62. 19 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/child/BaseChildManageDao.java
  63. 21 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BaseDeviceElectricRecordDao.java
  64. 17 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BaseHzInterfaceDictDao.java
  65. 19 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/log/BasePatientPadPushOnOffDao.java
  66. 17 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/log/BasePushRecordLogDao.java
  67. 12 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/log/BasePushrecordLogInfoDao.java
  68. 16 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/voice/BaseWordToVoiceDao.java
  69. 16 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/weather/BaseWeatherDayDao.java
  70. 18 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/weather/BaseWeatherWeekDao.java
  71. 31 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/admin/CommonEndpoint.java
  72. 47 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/child/ChildManageController.java
  73. 50 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/common/CommonController.java
  74. 48 6
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorBirthdayWishesEndpoint.java
  75. 19 13
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorEndpoint.java
  76. 69 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/PatientMessageEndpoint.java
  77. 43 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/radio/WlyyRadioEndpoint.java
  78. 40 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/OpenStatisticsEndpoint.java
  79. 19 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/platForm/PatientInfoPlatFormEndpoint.java
  80. 27 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/video/PatientVideoEndpoint.java
  81. 39 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java
  82. 63 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/child/ChildNewsListService.java
  83. 29 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientDeviceService.java
  84. 186 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/hz/HzInterfaceService.java
  85. 119 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/hz/InstallCert.java
  86. 332 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/hz/RSAUtils.java
  87. 38 11
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/PatientMessageService.java
  88. 50 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/radio/WlyyRadioService.java
  89. 1 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java
  90. 56 15
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java
  91. 52 23
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/WlyygcStatisticsService.java
  92. 53 20
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/third/PatientInfoPlatFormService.java
  93. 60 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/video/BaseVideoService.java
  94. 75 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DSLUtils.java
  95. 146 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/HongLingJinUtil.java
  96. 204 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/HttpToolUtil.java
  97. 43 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/MD5Utils.java
  98. 35 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/MessageUtil.java
  99. 95 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/SpeechTtsUtil.java
  100. 0 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/WeatherUtil.java

+ 20 - 0
business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportDetailDao.java

@ -0,0 +1,20 @@
package com.yihu.jw.dailyReport.dao;
import com.yihu.jw.entity.dailyReport.BaseDailyReportDetailDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 */
public interface BaseDailyReportDetailDao extends PagingAndSortingRepository<BaseDailyReportDetailDO,String>,
        JpaSpecificationExecutor<BaseDailyReportDetailDO> {
    void deleteByReportIdAndState(String reportID,Integer state);
    List<BaseDailyReportDetailDO> findByReportIdAndState(String reportId,Integer state);
    List<BaseDailyReportDetailDO> findByReportId(String reportId);
}

+ 36 - 0
business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportUploadDao.java

@ -0,0 +1,36 @@
package com.yihu.jw.dailyReport.dao;
import com.yihu.jw.entity.care.device.BaseSleepPlanDetail;
import com.yihu.jw.entity.dailyReport.BaseDailyReportUploadDO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Date;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 */
public interface BaseDailyReportUploadDao extends PagingAndSortingRepository<BaseDailyReportUploadDO, String>,
        JpaSpecificationExecutor<BaseDailyReportUploadDO> {
    List<BaseDailyReportUploadDO> findByDoctorId(String doctorID);
    @Query("select b from BaseDailyReportUploadDO b where b.doctorId=?1 and b.reportDate=?2")
    BaseDailyReportUploadDO findByDoctorIdAndReportDate(String doctorID,String reportDate);
    @Query("select b from BaseDailyReportUploadDO b where b.doctorId=?1 order by b.reportDate desc")
    List<BaseDailyReportUploadDO> findByDoctorIdLastOne(String doctorID);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 and a.reportDate>=?2 and a.reportDate<=?3 order by a.reportDate desc")
    Page<BaseDailyReportUploadDO> selectDailyReportByDoctorAndDateAndPage(String doctor, String startDate, String endDate, Pageable pageRequest);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 and a.reportDate>=?2 and a.reportDate<=?3 order by a.reportDate desc")
    List<BaseDailyReportUploadDO> selectDailyReportByDoctorAndDate(String doctor, String startDate, String endDate);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 order by a.reportDate desc")
    Page<BaseDailyReportUploadDO> selectDailyReportByDoctor(String doctor, Pageable pageRequest);
}

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

@ -0,0 +1,1294 @@
package com.yihu.jw.dailyReport.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.dailyReport.dao.BaseDailyReportDetailDao;
import com.yihu.jw.dailyReport.dao.BaseDailyReportUploadDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.doctor.dao.BaseDoctorRoleDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
import com.yihu.jw.entity.base.wx.WxPushLogDO;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportDetailDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportUploadDO;
import com.yihu.jw.entity.healthUpload.BaseDoctorMemberDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseUserDO;
import com.yihu.jw.healthUpload.dao.BaseDoctorMemberDao;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.util.common.PwdUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.wechat.dao.WxPushLogDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.enterprise.EnterpriseService;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseUserDao;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.OutputStream;
import java.util.*;
/**
 * Created by Bing on 2022/7/25.
 */
@Service
public class DailyReportUploadService {
    @Autowired
    private BaseDailyReportUploadDao dailyReportUploadDao;
    @Autowired
    private BaseDailyReportDetailDao reportDetailDao;
    @Autowired
    private BaseDoctorMemberDao doctorMemberDao;
    @Autowired
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private BaseDoctorRoleDao doctorRoleDao;
    @Autowired
    private WlyyHospitalSysDictDao hospitalSysDictDao;
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    @Autowired
    private BaseDoctorHospitalDao baseDoctorHospitalDao;
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    @Autowired
    private WeixinMessagePushUtils weixinMessagePushUtils;
    @Autowired
    private WxPushLogDao wxPushLogDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private WxEnterpriseUserDao wxEnterpriseUserDao;
    @Value("${wechat.id}")
    private String wechatId;
    @Autowired
    private EnterpriseService enterpriseService;
    private static Logger logger = LoggerFactory.getLogger(DailyReportUploadService.class);
    /**
     * 新增医生成员关系
     *
     * @param doctorId
     * @param ids      逗号隔开
     * @return
     */
    public List<BaseDoctorMemberDO> saveAndCreateMember(String doctorId, String ids) {
        String str[] = ids.split(",");
        List<BaseDoctorMemberDO> baseDoctorMemberDOList = new ArrayList<>();
        for (int i = 0; i < str.length; i++) {
            String memberId = str[i];
            BaseDoctorMemberDO memberDO = doctorMemberDao.findByDoctorIdAndMemberIdAndDel(doctorId, memberId);
            if (memberDO == null) {
                BaseDoctorMemberDO baseDoctorMemberDO = new BaseDoctorMemberDO();
                baseDoctorMemberDO.setDel(1);
                baseDoctorMemberDO.setDoctorId(doctorId);
                baseDoctorMemberDO.setMemberId(memberId);
                baseDoctorMemberDO.setCreateTime(new Date());
                baseDoctorMemberDO.setUpdateTime(new Date());
                baseDoctorMemberDO = doctorMemberDao.save(baseDoctorMemberDO);
                baseDoctorMemberDOList.add(baseDoctorMemberDO);
            }
        }
        return baseDoctorMemberDOList;
    }
    /**
     * 删除某个成员
     *
     * @param id 成员id
     * @return
     */
    public BaseDoctorMemberDO delDoctorMember(String id) {
        BaseDoctorMemberDO baseDoctorMemberDO = doctorMemberDao.findById(id);
        baseDoctorMemberDO.setDel(0);
        baseDoctorMemberDO = doctorMemberDao.save(baseDoctorMemberDO);
        return baseDoctorMemberDO;
    }
    /**
     * 查询医生的成员列表
     *
     * @param doctorId
     * @return
     */
    public List<BaseDoctorMemberDO> selectByDoctorId(String doctorId) {
        List<BaseDoctorMemberDO> baseDoctorMemberDOList = doctorMemberDao.findByDoctorIdAndDel(doctorId);
        BaseDoctorMemberDO memberDO1 = doctorMemberDao.findByDoctorIdAndMemberIdAndDel(doctorId, doctorId);
        //添加本人
        if (memberDO1 == null) {
            BaseDoctorMemberDO baseDoctorMemberDO = new BaseDoctorMemberDO();
            baseDoctorMemberDO.setDel(1);
            baseDoctorMemberDO.setDoctorId(doctorId);
            baseDoctorMemberDO.setMemberId(doctorId);
            baseDoctorMemberDO.setCreateTime(new Date());
            baseDoctorMemberDO.setUpdateTime(new Date());
            baseDoctorMemberDO = doctorMemberDao.save(baseDoctorMemberDO);
        }
        for (BaseDoctorMemberDO memberDO : baseDoctorMemberDOList) {
            BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(memberDO.getMemberId());
            if (baseDoctorDO != null) {
                memberDO.setBaseDoctorDO(baseDoctorDO);
            }
        }
        return baseDoctorMemberDOList;
    }
    /**
     * 新增加医生信息
     *
     * @param photo
     * @param name
     * @param idcard
     * @param sex
     * @param mobile
     * @param dept
     * @param deptName
     * @param idCardType
     * @param idType
     * @return
     */
    public BaseDoctorDO saveDoctorInfo(String id, String photo, String name, String idcard, String sex, String mobile, String dept, String deptName, String idCardType, String idType, Integer mark) throws Exception {
        BaseDoctorDO baseDoctorDO = new BaseDoctorDO();
        if (StringUtils.isNoneBlank(id)) {
            baseDoctorDO = baseDoctorDao.findById(id);
            baseDoctorDO.setIdCardType(idCardType);
            baseDoctorDO.setIdType(idType);
            baseDoctorDO.setPhoto(photo);
            baseDoctorDO.setName(name);
            baseDoctorDO.setIdcard(idcard);
            baseDoctorDO.setSex(Integer.parseInt(sex));
            baseDoctorDO.setMobile(mobile);
            baseDoctorDO.setMark(mark);
            String deptCode = dept;
            baseDoctorDO.setChargeType("1");
            baseDoctorDO = baseDoctorDao.save(baseDoctorDO);
            List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(baseDoctorDO.getId());
            if (null != baseDoctorHospitalDOS && baseDoctorHospitalDOS.size() > 0) {
                baseDoctorHospitalDao.delete(baseDoctorHospitalDOS);
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            } else {
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            }
        } else {
            baseDoctorDO.setIdcard(idcard);
            baseDoctorDO.setBirthday(IdCardUtil.getBirthdayForIdcard(idcard));
            baseDoctorDO.setSex(Integer.parseInt(sex));
            baseDoctorDO.setLocked(0);
            baseDoctorDO.setEnabled(1);
            baseDoctorDO.setMark(mark);
            String disableFlag = "0";
            //互联网医院:1停用,0使用  转 i健康:1正常,0作废
            baseDoctorDO.setDel("1".equals(disableFlag) ? "0" : "1");
            baseDoctorDO.setMobile("0");
            baseDoctorDO.setName(name);
            baseDoctorDO.setIsFamous(0);
            baseDoctorDO.setCreateTime(new Date());
            baseDoctorDO.setUpdateTime(new Date());
            baseDoctorDO.setIdCardType(idCardType);
            baseDoctorDO.setIdType(idType);
            baseDoctorDO.setPhoto(photo);
            baseDoctorDO.setMobile(mobile);
            baseDoctorDO.setChargeType("1");
            if (StringUtils.isNotBlank(mobile)) {
                baseDoctorDO.setSalt(PwdUtil.randomString(5));
                try {
                    baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex(baseDoctorDO.getMobile().substring(baseDoctorDO.getMobile().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
            }
            // 用医生和机构id、部门判断数据是否存在,若不存在则保存医生机构关联关系
            String deptCode = dept;
            baseDoctorDO = baseDoctorDao.save(baseDoctorDO);
            List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(baseDoctorDO.getId());
            if (null != baseDoctorHospitalDOS && baseDoctorHospitalDOS.size() > 0) {
                baseDoctorHospitalDao.delete(baseDoctorHospitalDOS);
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            } else {
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            }
        }
        return baseDoctorDO;
    }
    /**
     * 查询医生的成员列表带有已上报次数
     * @param doctorId
     * @return
     */
    public List<BaseDoctorMemberDO> selectCountByDoctorId(String doctorId){
        List<BaseDoctorMemberDO> baseDoctorMemberDOList = doctorMemberDao.findByDoctorIdAndDel(doctorId);
        for (BaseDoctorMemberDO memberDO : baseDoctorMemberDOList) {
            BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(memberDO.getMemberId());
            if (baseDoctorDO != null) {
                memberDO.setBaseDoctorDO(baseDoctorDO);
            }
            List<BaseDailyReportUploadDO> dailyReportUploadDOS = dailyReportUploadDao.findByDoctorId(doctorId);
            memberDO.setCount(dailyReportUploadDOS.size()+"");
        }
        return baseDoctorMemberDOList;
    }
    /**
     * 查询某一个成员id
     *
     * @param id 成员id
     * @return
     */
    public BaseDoctorMemberDO selectById(String id) {
        BaseDoctorMemberDO baseDoctorMemberDO = doctorMemberDao.findById(id);
        if (baseDoctorMemberDO==null){
            return null;
        }
        BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(baseDoctorMemberDO.getMemberId());
        if (baseDoctorDO != null) {
            baseDoctorMemberDO.setBaseDoctorDO(baseDoctorDO);
        }
        List<BaseDoctorHospitalDO> doctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(baseDoctorMemberDO.getMemberId());
        baseDoctorMemberDO.setDoctorHospitalDOS(doctorHospitalDOS);
        return baseDoctorMemberDO;
    }
    /**
     * 提交每日上报信息
     * @param doctorId
     * @param report_date
     * @param week_name
     * @param detailDOList
     * @return
     * @throws Exception
     */
    @Transactional(rollbackFor = Exception.class)
    public BaseDailyReportUploadDO createDailyReport(String doctorId,String report_date,Integer leaveState,String leaveHour,String week_name, List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        List<BaseDoctorHospitalDO> doctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(doctorId);
        if (null==doctorDO){
            throw new Exception("上报人不存在");
        }
        if (1==leaveState){
            if (StringUtils.isNotBlank(leaveHour)){
                if (Integer.parseInt(leaveHour)<8&&detailDOList.size()==0){
                    throw new Exception("上传失败,请假未满8小时需要提交完成内容");
                }
            }
        }
        if (StringUtil.isBlank(report_date)){
            report_date = DateUtil.getStringDateShort();
            week_name = DateUtil.getWeek(report_date);
        }
        BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctorId,report_date);
        if (null==dailyReportUploadDO){
            dailyReportUploadDO = new BaseDailyReportUploadDO();
            dailyReportUploadDO.setState(0);
        }else{
            reportDetailDao.deleteByReportIdAndState(dailyReportUploadDO.getId(),0);
        }
        dailyReportUploadDO.setDoctorId(doctorId);
        dailyReportUploadDO.setDoctorName(doctorDO.getName());
        dailyReportUploadDO.setReportDate(report_date);
        dailyReportUploadDO.setWeekName(week_name);
        dailyReportUploadDO.setLeaveState(leaveState);
        dailyReportUploadDO.setLeaveHour(leaveHour);
        dailyReportUploadDO = dailyReportUploadDao.save(dailyReportUploadDO);
        for (BaseDailyReportDetailDO tmp :detailDOList){
            tmp.setReportId(dailyReportUploadDO.getId());
        }
        if (detailDOList.size()>0){
            reportDetailDao.save(detailDOList);
        }
        List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
        if (reportDetailDao.findByReportIdAndState(dailyReportUploadDO.getId(),0).size()>0){
            dailyReportUploadDO.setState(0);
        }
        String senderID="";//日报发送对象
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='BOOS_ADMIN_SENDER'  ";
        List<String> boosSenderIds = jdbcTemplate.queryForList(sql,String.class);
        String boosID = "";
        if (boosSenderIds.size()>0){
            boosID=boosSenderIds.get(0);
        }
        List<BaseDoctorRoleDO> roleDOS = doctorRoleDao.findByDoctorCode(doctorId);
        if (roleDOS.size()==0){//普通员工 需要查询对应上级人员
            if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
                BaseDoctorHospitalDO doctorHospitalDO = doctorHospitalDOS.get(0);
                sql = " select role.doctor_code from base_doctor_role role INNER JOIN base_doctor_hospital dh  " +
                        "on role.doctor_code = dh.doctor_code and dh.dept_code='"+doctorHospitalDO.getDeptCode()+"'  " +
                        "where role.role_code='deptAdmin' ";
                List<String> deptAdmins = jdbcTemplate.queryForList(sql,String.class);
                if (deptAdmins.size()>0){
                    senderID = deptAdmins.get(0);
                }else {
                    senderID=boosID;
                }
            }
        }else {//部门管理员 发送对象为老板
            senderID = boosID;
        }
        if (StringUtils.isNotBlank(senderID)){
            BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(senderID);
            if (remindDoctorDO != null) {
                try {
                    WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,remindDoctorDO.getMobile());
                    if(enterpriseUserDO==null){
                        logger.info("该用户"+doctorDO.getName()+"没有企业微信手机号,无法推送模版消息,用户ID:"+doctorDO.getId()+"wechatId:"+wechatId);
                    }else{
                        String title = "待办事项";
                        String des = "您好,"+doctorDO.getName()+"已提交每日日报,请点击前往审核。";
                        String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/workSummary/commit?mode=verify&id="+dailyReportUploadDO.getId();
                        String res = enterpriseService.sendTWMesByDoctor(wechatId,remindDoctorDO.getId(),title,des,url);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        dailyReportUploadDao.save(dailyReportUploadDO);
        dailyReportUploadDO.setDetailDOList(detailDOS);
        return dailyReportUploadDO;
    }
    /**
     * 核实审核信息
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public BaseDailyReportUploadDO verifiedItem(String doctorId,String reportId,List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (null==doctorDO){
            throw  new Exception("无权限审核");
        }
        BaseDailyReportUploadDO dailyReportUploadDO = null;
        dailyReportUploadDO = dailyReportUploadDao.findOne(reportId);
        if (null==dailyReportUploadDO){
            throw  new Exception("核实记录未查询到");
        }
        if(detailDOList.size()>0){//无完成事项内容
            boolean doubt  =false;
            for (BaseDailyReportDetailDO tmp:detailDOList){
                if (1==tmp.getDoubt()){
                    doubt = true;
                }
                tmp.setVerificationTime(new Date());
            }
            reportDetailDao.save(detailDOList);
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
            dailyReportUploadDO.setDetailDOList(detailDOS);
            if (reportDetailDao.findByReportIdAndState(dailyReportUploadDO.getId(),0).size()==0){
                dailyReportUploadDO.setState(1);
                dailyReportUploadDao.save(dailyReportUploadDO);
            }
            if (doubt==true){//有疑惑,推送给总经办"0592181"和老板"0592008";//老板id
                String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='MRRB_DOUBT_SENDER'  ";
                List<String> doubtSendUser = jdbcTemplate.queryForList(sql,String.class);
                for (String senderUser:doubtSendUser){
                    try {
                        BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(senderUser);
                        if (remindDoctorDO != null) {
                            try {
                                WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,remindDoctorDO.getMobile());
                                if(enterpriseUserDO==null){
                                    logger.info("该用户"+doctorDO.getName()+"没有企业微信手机号,无法推送模版消息,用户ID:"+doctorDO.getId()+"wechatId:"+wechatId);
                                }else{
                                    String title = "待办事项";
                                    String des = "您好,"+doctorDO.getName()+"对"+dailyReportUploadDO.getDoctorName()+"已提交的每日日报有存疑,请点击前往审核。";
                                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/workSummary/commit?mode=verify&id="+dailyReportUploadDO.getId();
                                    String res = enterpriseService.sendTWMesByDoctor(wechatId,remindDoctorDO.getId(),title,des,url);
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        }else {
            dailyReportUploadDO.setState(1);
            dailyReportUploadDao.save(dailyReportUploadDO);
        }
        return dailyReportUploadDO;
    }
    /**
     *核实每日报表疑惑
     */
    @Transactional(rollbackFor = Exception.class)
    public  BaseDailyReportUploadDO verifiedDoubtItem(String doctorId,List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (null==doctorDO){
            throw new Exception("无权限审核");
        }
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='MRRB_DOUBT_SENDER'  ";
        List<String> doubtSendUser = jdbcTemplate.queryForList(sql,String.class);
        if (!doubtSendUser.contains(doctorId)){
            throw new Exception("无权限审核");
        }
        BaseDailyReportUploadDO dailyReportUploadDO = new BaseDailyReportUploadDO();
        if(detailDOList.size()>0) {
            dailyReportUploadDO = dailyReportUploadDao.findOne(detailDOList.get(0).getReportId());
            if (null == dailyReportUploadDO) {
                throw new Exception("核实记录未查询到");
            }
            reportDetailDao.save(detailDOList);
        }
        return dailyReportUploadDO;
    }
    /**
     * 获取当天日报上传记录
     * @param doctor
     * @return
     */
    public BaseDailyReportUploadDO selectReportByDoctorId2(String doctor){
        String nowDate = DateUtil.getStringDateShort();
        BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctor,nowDate);
        if (null==dailyReportUploadDO){
            return null;
        }else{
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
            dailyReportUploadDO.setDetailDOList(detailDOS);
        }
        return dailyReportUploadDO;
    }
    /**
     * 查询成员的日报上传记录
     * @param doctorId
     * @param startDate
     * @param endDate
     * @param page
     * @param pageSize
     * @return
     */
    public Page<BaseDailyReportUploadDO> selectReportByDoctorId(String doctorId,String startDate,String endDate,Integer page,Integer pageSize){
        PageRequest pageRequest = new PageRequest(page - 1, pageSize);
        Page<BaseDailyReportUploadDO> list = null;
        if (StringUtils.isNoneBlank(startDate)) {
            list = dailyReportUploadDao.selectDailyReportByDoctorAndDateAndPage(doctorId, startDate, endDate, pageRequest);
        }else {
            list = dailyReportUploadDao.selectDailyReportByDoctor(doctorId, pageRequest);
        }
        for (BaseDailyReportUploadDO tmp:list){
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(tmp.getId());
            tmp.setDetailDOList(detailDOS);
        }
        return list;
    }
    /**
     * 根据id查看日报记录
     * @param reportId
     * @return
     * @throws Exception
     */
    public BaseDailyReportUploadDO selectReportById(String reportId) throws Exception {
        BaseDailyReportUploadDO reportUploadDO = dailyReportUploadDao.findOne(reportId);
        if (null==reportUploadDO){
            throw new Exception("未找到日报记录");
        }else {
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(reportUploadDO.getId());
            reportUploadDO.setDetailDOList(detailDOS);
        }
        return reportUploadDO;
    }
    /**
     * 医生首页
     * @param dept
     * @param level
     * @param doctorId
     * @return
     */
    public JSONObject selectDailyReportByRole(String dept,Integer level,String doctorId){
        JSONObject result = new JSONObject();
        String nowDate = DateUtil.getStringDateShort();
        BaseDailyReportUploadDO reportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctorId,nowDate);
        if (null==reportUploadDO){
            reportUploadDO = new BaseDailyReportUploadDO();
        }
        //今日本人上报数量
        String benrenTotalSql = " select count(1) from base_doctor_daily_report_upload where doctor_id='"+doctorId+"' and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //本人已上报数量
        String benrenshangbaoTotalSql = " select count(1) from base_doctor_daily_report_upload where doctor_id='"+doctorId+"'  ";
        //本人上级未核实事项数
        String benrenVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                " where up.doctor_id='"+doctorId+"' and  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //本人上级已核实事项数
        String benrenNotVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                " where up.doctor_id='"+doctorId+"' and  de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //科室总人数
        String doctorTotalSql = "";
        //科室总上报人数
        String sqlTotalSql = "";
        //科室已核实人数
        String verifiedSql = "";
        //科室未核实人数
        String notVerifiedSql = "";
        if (level == 1) {
            //总人数
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
            //今日上报人数
            sqlTotalSql = " select count(1) from base_doctor_daily_report_upload  where  report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
            //今日核实数量
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
            //今日未核实数量
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where   de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        } else if (level == 2) {
            //总人次
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and id  " +
                    " IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            //今日上报人数
            sqlTotalSql = " select count(1) from base_doctor_daily_report_upload  where  report_date>='"+nowDate+"' and report_date<='"+nowDate+"' " +
                    " and doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
            //今日核实数量
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"'" +
                    " and up.doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )  ";
            //今日未核实数量
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where   de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' " +
                    " and up.doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Integer benrenTotal =  jdbcTemplate.queryForObject(benrenTotalSql,Integer.class);
        Integer benrenshangbaoTotal = jdbcTemplate.queryForObject(benrenshangbaoTotalSql,Integer.class);
        Integer benrenVerified = jdbcTemplate.queryForObject(benrenVerifiedSql,Integer.class);
        Integer benrenNotVerified = jdbcTemplate.queryForObject(benrenNotVerifiedSql,Integer.class);
        result.put("benrenTotal", benrenTotal);//今日本人提交
        result.put("benrenshangbaoTotal", benrenshangbaoTotal);//本人已上报数量
        result.put("benrenVerified",benrenVerified);//本人上级未核实
        result.put("benrenNotVerified",benrenNotVerified);//本人上级已核实
        Integer doctorTotal =  jdbcTemplate.queryForObject(doctorTotalSql,Integer.class);
        Integer sqlTotal =  jdbcTemplate.queryForObject(sqlTotalSql,Integer.class);
        Integer verified =  jdbcTemplate.queryForObject(verifiedSql,Integer.class);
        Integer notVerified =  jdbcTemplate.queryForObject(notVerifiedSql,Integer.class);
        result.put("doctorTotal", doctorTotal);//科室总人次
        result.put("sqlTotal", sqlTotal);//科室今日上报人数
        result.put("notUploadTotal", doctorTotal - sqlTotal);//今日未上报人数
        result.put("verified",verified);//科室未核实
        result.put("notVerified",notVerified);//科室已核实
        result.put("reportUploadDO",reportUploadDO);
        return result;
    }
    /**
     * 首页按照科室列表统计
     *
     * @param dept
     * @param idType
     * @param state     核实状态
     * @param startDate
     * @param endDate
     * @return
     */
    public List<Map<String, Object>> selectHeaderList(String dept, String idType, String state, String startDate, String endDate, String name) {
        String reportCondition = "";
        if (StringUtils.isNoneBlank(startDate)) {//上传过滤条件
            reportCondition += " and up.report_date >='" + startDate + "' and up.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNotBlank(state)){
            reportCondition += " and up.state ='"+state+"' ";
        }
        String doctorSqlCondition = "";//医生过滤条件
        if (StringUtils.isNoneBlank(idType)) {
            doctorSqlCondition += " and d.id_type = '" + idType + "' ";
        }
        if (StringUtils.isNoneBlank(name)) {
            doctorSqlCondition += " and d.name like '%" + name + "%' ";
        }
        //填报人数、未填报人数、上级已核实、未核实
        String deptSql = " select code,name,dh1.doctorTotal,dh2.yishangbaoTotal,dh3.verified,dh4.notVerified,dh5.shangchuanTotal  from dict_hospital_dept hd  " +
                "LEFT JOIN (select count(1) as 'doctorTotal',dh.dept_code from base_doctor d LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "WHERE d.del = 1 AND dh.del = 1 "+doctorSqlCondition+" GROUP BY dh.dept_code)dh1 ON hd.CODE = dh1.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'yishangbaoTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+doctorSqlCondition+reportCondition+")dh2 ON hd.CODE = dh2.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'verified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=1 "+doctorSqlCondition+reportCondition+" )dh3 ON hd.CODE = dh3.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'notVerified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=0 "+doctorSqlCondition+reportCondition+")dh4 ON hd.CODE = dh4.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'shangchuanTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+reportCondition+")dh5 ON hd.CODE = dh2.dept_code  " +
                " WHERE hd.consult_dept_flag = 1 ";
        if (StringUtils.isNoneBlank(name)) {
            deptSql += " and hd.code IN(SELECT dha.dept_code FROM base_doctor_hospital dha LEFT JOIN base_doctor da ON da.id=dha.doctor_code where da.name LIKE '%" + name + "%') ";
        }
        if (StringUtils.isNoneBlank(dept)) {
            deptSql += " and hd.code = '" + dept + "' ";
        }
        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(deptSql);
        for (Map<String,Object> deptMap:mapList){
            String day = DateUtil.getTwoDay(endDate, startDate);
            Integer doctorTotal = 0;
            Integer total=0;
            Integer yishangbaoTotal=0;
            Integer weishangbaoTotal=0;
            Integer notVerified=0;
            Integer verified=0;
            Integer shangchuanTotal=0;
            if (deptMap.get("doctorTotal")!=null){
                doctorTotal = Integer.parseInt(deptMap.get("doctorTotal").toString());
                //总人次
                if (!day.equalsIgnoreCase("0")) {
                    total = doctorTotal * (Integer.parseInt(day)+1);
                } else {
                    total = doctorTotal;
                }
            }
            if (deptMap.get("yishangbaoTotal")!=null) {
                yishangbaoTotal = Integer.parseInt(deptMap.get("yishangbaoTotal").toString());
            }
            weishangbaoTotal = total-yishangbaoTotal;
            if (deptMap.get("notVerified")!=null) {
                notVerified = Integer.parseInt(deptMap.get("notVerified").toString());
            }
            if (deptMap.get("verified")!=null) {
                verified = Integer.parseInt(deptMap.get("verified").toString());
            }
            if (deptMap.get("shangchuanTotal")!=null) {
                shangchuanTotal = Integer.parseInt(deptMap.get("shangchuanTotal").toString());
            }
           deptMap.put("total", total);//总人次
           deptMap.put("yishangbaoTotal", yishangbaoTotal);//已上报
           deptMap.put("weishangbaoTotal", weishangbaoTotal);//未上报
           deptMap.put("notVerified", notVerified);//未核实数量
           deptMap.put("verified", verified);//已核实数量
           deptMap.put("shangchuanTotal", shangchuanTotal);//上传总次数
        }
        return mapList;
    }
    /**
     * 具体每一个统计时间列表
     *
     * @param dept
     * @param idType
     * @param status
     * @param state
     * @param startDate
     * @param endDate
     * @return
     */
    public JSONArray selectListByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
        do{
            startTime = DateUtil.getPreDays(startTime, i);
            String str = DateUtil.dateToStrShort(startTime);
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        JSONArray array = new JSONArray();
        for ( i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
            String deptCondition = "";
            if (StringUtils.isNoneBlank(dept)) {
                deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            }
            String idTypeCondition = " ";
            if (StringUtils.isNoneBlank(idType)) {
                idTypeCondition += "  (select d1.id from base_doctor d1 where 1=1 and d1.id_type = '" + idType + "')";
            }
            if (StringUtils.isNoneBlank(deptCondition)) {
                doctorSql += " and d.id IN " + deptCondition;
            }
            if (StringUtils.isNoneBlank(idTypeCondition)) {
                doctorSql += " and d.id IN " + idTypeCondition;
            }
            if (StringUtils.isNoneBlank(status)) {
                if (status.equalsIgnoreCase("1")) {//已上报
                    doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                } else if (status.equalsIgnoreCase("2")) {//未上报
                    doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                }
            }
            if (StringUtils.isNoneBlank(state)) {//核实状态
                doctorSql +=" and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date +"' and d1.state='"+state+"' ) ";
            }
            if (StringUtils.isNoneBlank(name)) {
                doctorSql += " and d.name LIKE  '%" + name + "%' ";
            }
            Map<String, Object> map = jdbcTemplate.queryForMap(doctorSql);
            Integer total = 0;
            if (map != null) {
                if (map.get("total") != null) {
                    total = Integer.parseInt(map.get("total").toString());
                }
            }
            JSONObject object = new JSONObject();
            object.put("time", date);
            object.put("total", total);
            array.add(object);
        }
        return array;
    }
    /**
     * 获取列表的具体人员信息
     *
     * @param dept
     * @param idType
     * @param status
     * @param state
     * @param startDate
     * @param endDate
     * @param name      total
     * @return
     */
    public JSONArray selectListInfoByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
        do{
            startTime = DateUtil.getPreDays(startTime, i);
            String str = DateUtil.dateToStrShort(startTime);
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        JSONArray array = new JSONArray();
        for (i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doctorSql = " select d.name,d.id,d.job_title_name as jobTitleName,d.photo from base_doctor d where d.del=1 ";
            String deptCondition = "";
            if (StringUtils.isNoneBlank(dept)) {
                deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            }
            String idTypeCondition = " ";
            if (StringUtils.isNoneBlank(idType)) {
                idTypeCondition += "  (select d1.id from base_doctor d1 where 1=1 and d1.id_type = '" + idType + "')";
            }
            if (StringUtils.isNoneBlank(deptCondition)) {
                doctorSql += " and d.id IN " + deptCondition;
            }
            if (StringUtils.isNoneBlank(idTypeCondition)) {
                doctorSql += " and d.id IN " + idTypeCondition;
            }
            if (StringUtils.isNoneBlank(status)) {
                if (status.equalsIgnoreCase("1")) {//已上报
                    doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                } else if (status.equalsIgnoreCase("2")) {//未上报
                    doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                }
            }
            if (StringUtils.isNoneBlank(state)) {//核实状态
                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' and d1.state='" + state + "' ) ";
            }
            if (StringUtils.isNoneBlank(name)) {
                doctorSql += " and d.name LIKE  '%" + name + "%' ";
            }
            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(doctorSql);
            for (Map<String, Object> map : mapList) {
                String id = map.get("id").toString();
                List<BaseDoctorHospitalDO> hospitalDOList = baseDoctorHospitalDao.findByDoctorCode(id);
                map.put("deptInfo", hospitalDOList);
                String stateCondition = "";//核实状态
                if (StringUtils.isNoneBlank(state)) {
                    stateCondition += " and d1.state='"+state+"' ";
                }
                String sql = " select d1.id,d1.state from base_doctor_daily_report_upload d1 where d1.doctor_id='"+id+"' and d1.report_date>='"+date+"' and d1.report_date<='"+date+"' ORDER BY report_date desc ";
                List<Map<String, Object>> mapList1 = jdbcTemplate.queryForList(sql);
                if (mapList1 != null && mapList1.size() != 0) {
                    for (Map<String, Object> map1 : mapList1) {
                        String stateMap = map1.get("state").toString();
                        if("1".equals(stateMap)){
                            map1.put("verifiedState", "已核实");
                        } else {
                            map1.put("verifiedState", "未核实");
                        }
                        map.put("uploadState", "已上报");
                        map.put("uploadId", map1.get("id").toString());
                    }
                    map.put("recordList", mapList1);
                } else {
                    map.put("verifiedState", "未知");
                    map.put("uploadState", "未上报");
                    map.put("uploadId", "");
                    map.put("report_date", "");
                    map.put("recordList", mapList1);
                }
            }
            JSONObject object = new JSONObject();
            object.put("time", date);
            object.put("list", mapList);
            array.add(object);
        }
        return array;
    }
//    /**
//     * 报表导出
//     *
//     * @param startDate
//     * @param endDate
//     * @return
//     */
//    public JSONArray pushListWriteDailyReport(OutputStream os, String startDate, String endDate, String dept) throws Exception {
//        List<String> list = new ArrayList<>();
//        Date startTime = DateUtil.strToDateShort(startDate);
//        Date endDateTime = DateUtil.strToDateShort(endDate);
//        int i=0;
//        do{
//            startTime = DateUtil.getPreDays(startTime, i);
//            String str = DateUtil.dateToStrShort(startTime);
//            list.add(str);
//            i++;
//        }while (startTime.before(endDateTime));
//        JSONArray array = new JSONArray();
//        for (i = 0; i < list.size(); i++) {
//            String date = list.get(i);
//            String doctorSql = " select id,name,job_title_name from base_doctor d where d.del=1 ";
//            if (StringUtils.isNoneBlank(dept)) {
//                doctorSql += " and d.id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
//            }
//            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(doctorSql);
//
//            for (Map<String, Object> map : mapList) {
//                String id = map.get("id").toString();
//                List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(id);
//                if (baseDoctorHospitalDOS != null && baseDoctorHospitalDOS.size() != 0) {
//                    map.put("deptName", baseDoctorHospitalDOS.get(0).getDeptName());
//                }
//            }
//            JSONObject object = new JSONObject();
//            object.put("time", date);
//            object.put("list", mapList);
//            array.add(object);
//        }
//        pushListWritePriceTotal(os, array, startDate, endDate);
//        return array;
//    }
    /**
     * 查下上报最新一次记录
     * @param doctor
     * @return
     */
    public BaseDailyReportUploadDO selectRecordByDoctorIdAndConsumer(String doctor){
        List<BaseDailyReportUploadDO> dailyReportUploadDOs = dailyReportUploadDao.findByDoctorIdLastOne(doctor);
        BaseDailyReportUploadDO dailyReportUploadDO = null;
        if (dailyReportUploadDOs.size()>0){
            dailyReportUploadDO = dailyReportUploadDOs.get(0);
            if (null==dailyReportUploadDO){
                return null;
            }else{
                List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
                dailyReportUploadDO.setDetailDOList(detailDOS);
            }
        }
        return dailyReportUploadDO;
    }
    /**
     *
     * @param orgCode
     * @param dept
     * @param doctorCode
     * @param key
     * @param flag 是否核实1是0否
     * @return
     */
    public List<Map<String, Object>> findDoctorByHospitalAndDept(String orgCode, String dept, String doctorCode,String key, Integer flag) {
        String sql = "SELECT " +
                " d.id AS \"id\", " +
                " d.photo AS \"photo\", " +
                " d.name AS \"name\", " +
                " d.expertise AS \"expertise\"," +
                " d.introduce AS \"introduce\"," +
                " d.job_title_code AS \"jobTitleCode\", " +
                " d.job_title_name AS \"jobTitleName\"," +
                " d.charge_type AS \"chargeType\"," +
                " d.outpatient_type AS \"outpatientType\"," +
                " d.consult_status AS \"consultStatus\"," +
                " h.dept_code AS \"deptCode\","+
                " h.dept_name AS \"deptName\","+
                " h.org_code AS \"orgCode\","+
                " h.org_name AS \"orgName\","+
                " t.photo AS \"hosptialphoto\","+
                " d.id_type AS \"idType\","+
                " d.id_card_type AS \"idCardType\" "+
                " FROM " +
                " base_doctor d " +
                " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
                " left join base_org t on t.id = h.org_code" +
                " WHERE  " +
                " 1=1 and d.del=1 ";
        if (StringUtils.isNotBlank(dept)) {
            sql += " AND h.dept_code = '" + dept + "'";
        }
        if (StringUtils.isNotBlank(orgCode)) {
            sql += " AND h.org_code = '" + orgCode + "'";
        }
        if (StringUtils.isNotBlank(key)) {
            sql += " AND (h.dept_name like '%" + key + "%' OR d.name like '%" + key + "%' OR d.expertise like '%" + key + "%') ";
        }
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:list){
            String id = map.get("id").toString();
            List<BaseDailyReportUploadDO> dailyReportUploadDOS = dailyReportUploadDao.selectDailyReportByDoctorAndDate(id,DateUtil.getStringDateShort(),DateUtil.getStringDateShort());
            if (dailyReportUploadDOS!=null&&dailyReportUploadDOS.size()!=0){
                BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDOS.get(0);
                List<BaseDailyReportDetailDO> detailDOList = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
                dailyReportUploadDO.setDetailDOList(detailDOList);
                String verifiedName = "";
                if ("1".equals(dailyReportUploadDO.getState())) {
                    verifiedName = "已核实";
                } else {
                    verifiedName = "未核实";
                }
                map.put("verifiedName",verifiedName);
                map.put("reportUploadDO",dailyReportUploadDO);
            }else {
                map.put("reportUploadDO",null);
            }
        }
        if (list != null && list.size() > 0 && StringUtils.isNotBlank(doctorCode)) {
            //排序
            for (int i = 0; i < list.size(); i++) {
                String id = (String) list.get(i).get("id");
                if (doctorCode.equals(id)) {
                    Collections.swap(list, 0, i);
                }
            }
        }
        return list;
    }
    /**
     * 首页上报分析
     *
     * @param flag 1周2月
     * @param dept
     * @param level  1院级管理员,2科室管理员
     * @return
     */
    public JSONObject selectIndexTotalCircle(Integer flag,String dept, int level) {
        JSONObject object = new JSONObject();
        String startDate="";
        String endDate="";
        if (flag==1){
            startDate = DateUtil.getMondayOfThisWeek();
            endDate = DateUtil.getSundayOfThisWeek();
        }else if (flag==2){
            startDate = DateUtil.getFristDayOfMonth();
            endDate = DateUtil.getLastDayOfMonth();
        }
        String day = DateUtil.getTwoDay(endDate, startDate);
        String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
        Integer total = 0;//总人次
        String sqlCondition = "";
        if (level==2){
            sqlCondition =" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        String sql = " SELECT SUM(d1.total) as total from (select COUNT(DISTINCT d.doctor_id) as 'total',date_format(d.report_date ,'%Y-%m-%d' ) " +
                " from base_doctor_daily_report_upload d where 1=1 "+sqlCondition+"  and  d.report_date >='"+startDate+"' and d.report_date<='"+endDate+"' " +
                " GROUP BY date_format(d.report_date ,'%Y-%m-%d' ))d1  ";
        if (level==2){
            doctorSql +=" and d.id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Map<String, Object> map = jdbcTemplate.queryForMap(doctorSql);
        String doctorTotal = "";
        if (map != null) {
            doctorTotal = map.get("total").toString();
        }
        if (StringUtils.isNoneBlank(doctorTotal)) {
            //总人次
            if (!day.equalsIgnoreCase("0")) {
                total = Integer.parseInt(doctorTotal) * (Integer.parseInt(day)+1);
            } else {
                total = Integer.parseInt(doctorTotal);
            }
        }
        Integer yishangbaoTotal = 0;
        Integer weishangbaoTotal = 0;
        Integer verifiedTotal = 0;
        Integer notVerifiedTotal = 0;
        //已上传
        Map<String, Object> yishangchaungMap = jdbcTemplate.queryForMap(sql);
        if (yishangchaungMap != null) {
            if (yishangchaungMap.get("total") != null) {
                yishangbaoTotal = Integer.parseInt(yishangchaungMap.get("total").toString());
            }
        }
        //未上报
        weishangbaoTotal = total - yishangbaoTotal;
        //上传总次数
        Integer shangchuanTotal = 0;
        String shangchuanTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where 1=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            shangchuanTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            shangchuanTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Map<String, Object> shangchuanMap = jdbcTemplate.queryForMap(shangchuanTotalSql);
        if (shangchuanMap != null) {
            if (shangchuanMap.get("total") != null) {
                shangchuanTotal = Integer.parseInt(shangchuanMap.get("total").toString());
            }
        }
        //已核实、未核实
        String verifiedTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where  state=1 ";
        if (StringUtils.isNoneBlank(startDate)) {
            verifiedTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            verifiedTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        //已核实
        Map<String, Object> zhengchangMap = jdbcTemplate.queryForMap(verifiedTotalSql);
        if (zhengchangMap != null) {
            if (zhengchangMap.get("total") != null) {
                verifiedTotal = Integer.parseInt(zhengchangMap.get("total").toString());
            }
        }
        //未核实
        String notVerifiedTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where  state=0  ";
        if (StringUtils.isNoneBlank(startDate)) {
            notVerifiedTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            notVerifiedTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        //正常
        Map<String, Object> yichangMap = jdbcTemplate.queryForMap(notVerifiedTotalSql);
        if (yichangMap != null) {
            if (yichangMap.get("total") != null) {
                notVerifiedTotal = Integer.parseInt(yichangMap.get("total").toString());
            }
        }
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
        object.put("verifiedTotal", verifiedTotal);//已核实
        object.put("notVerifiedTotal", notVerifiedTotal);//未核实
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        return object;
    }
    /**
     * 首页统计
     *
     * @param dept
     * @param idType
     * @param status
     * @param state
     * @param startDate
     * @param endDate
     * @return
     */
    public JSONObject selectHeaderTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
        JSONObject object = new JSONObject();
        String day = DateUtil.getTwoDay(endDate, startDate);
        String doctorSql = " select COUNT(1) as \"total\" from base_doctor d where d.del=1 ";
        Integer total = 0;//总人次
        String sql = "select COUNT(DISTINCT d.id) as \"total\" from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where 1=1 ";
        String deptCondition = "";
        if (StringUtils.isNoneBlank(dept)) {
            deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
        }
        String idTypeCondition = " ";
        if (StringUtils.isNoneBlank(idType)) {
            idTypeCondition += "  (select d1.id from base_doctor d1 where 1=1 and d1.id_type = '" + idType + "')";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            doctorSql += " and d.id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            doctorSql += " and d.id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            doctorSql += " and d.name like '%" + name + "%' ";
        }
//        if (StringUtils.isNoneBlank(status)) {
//            if (status.equalsIgnoreCase("1")) {//已上报
//                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + startDate + "' and d1.report_date<='" + endDate + "' ) ";
//            } else if (status.equalsIgnoreCase("2")) {//未上报
//                doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + startDate + "' and d1.report_date<='" + endDate + "' ) ";
//            }
//        }
        Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql,Integer.class);
        if (!day.equalsIgnoreCase("0")) {
            total = doctorTotal * (Integer.parseInt(day)+1);
        } else {//当天
            total = doctorTotal;
        }
        Integer yishangbaoTotal=0;//上传人数
        Integer weishangbaoTotal=0;//未上报
        Integer notVerified=0;//未核实
        Integer verified=0;//已核实
        Integer shangchuanTotal=0;//上传总次数
        if (StringUtils.isNoneBlank(startDate)) {
            sql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(state)) {
            sql += " and d.state='"+state+"' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            sql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            sql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            sql += " and d.doctor_name like '%" + name + "%'";
        }
        yishangbaoTotal = jdbcTemplate.queryForObject(sql,Integer.class);
        //未上报
        weishangbaoTotal = total - yishangbaoTotal;
        String shangchuanTotalSql = "select COUNT(1) as \"total\" from base_doctor_daily_report_upload d where 1=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            shangchuanTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            shangchuanTotalSql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            shangchuanTotalSql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            shangchuanTotalSql += " and d.doctor_name like '%" + name + "%'";
        }
        //未核实数量
        String notVerifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=0 ";
        //已核实数量
        String verifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=1 ";
        if (StringUtils.isNoneBlank(startDate)) {
            notVerifiedSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
            verifiedSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            notVerifiedSql += " and d.doctor_id IN " + deptCondition;
            verifiedSql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            notVerifiedSql += " and d.doctor_id IN " + idTypeCondition;
            verifiedSql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            notVerifiedSql += " and d.doctor_name like '%" + name + "%'";
            verifiedSql += " and d.doctor_name like '%" + name + "%'";
        }
        notVerified = jdbcTemplate.queryForObject(notVerifiedSql,Integer.class);
        verified = jdbcTemplate.queryForObject(verifiedSql,Integer.class);
        //上传总次数
        shangchuanTotal = jdbcTemplate.queryForObject(shangchuanTotalSql,Integer.class);
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
        object.put("notVerified", notVerified);//未核实数量
        object.put("verified", verified);//已核实数量
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        return object;
    }
}

+ 6 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/dict/WlyyHospitalSysDictDao.java

@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -53,5 +54,10 @@ public interface WlyyHospitalSysDictDao extends PagingAndSortingRepository<WlyyH
    @Query("from WlyyHospitalSysDictDO where dictName = ?1 and sort>?2")
    List<WlyyHospitalSysDictDO> findByDictNameAndSortNear(String dictName,Integer sort);
    @Modifying
    @Transactional
    @Query("update WlyyHospitalSysDictDO set pyCode =?1 where id=?2 and dictName =?3")
    void updatePyCode(String pyCode,String id,String dictName);
}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 247 - 0
common/common-entity/sql记录


+ 48 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/menu/BaseMenuUrlDO.java

@ -0,0 +1,48 @@
package com.yihu.jw.entity.base.menu;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import com.yihu.jw.entity.UuidIdentityEntityWithTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 菜单控制的url表 用来做url权限控制
 * Created by yeshijie on 2022/7/20.
 */
@Entity
@Table(name = "base_menu_url")
public class BaseMenuUrlDO extends UuidIdentityEntityWithCreateTime {
    private String menuId;//对应base_menu表的id字段
    private String url;//url链接
    private String urlName;//url名称
    @Column(name = "menu_id")
    public String getMenuId() {
        return menuId;
    }
    public void setMenuId(String menuId) {
        this.menuId = menuId;
    }
    @Column(name = "url")
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    @Column(name = "url_name")
    public String getUrlName() {
        return urlName;
    }
    public void setUrlName(String urlName) {
        this.urlName = urlName;
    }
}

+ 97 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseDeviceElectricRecordDO.java

@ -0,0 +1,97 @@
package com.yihu.jw.entity.care.device;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 电表记录数据
 * Created by yeshijie on 2022/6/30.
 */
@Entity
@Table(name = "base_device_electric_record")
public class BaseDeviceElectricRecordDO extends UuidIdentityEntityWithCreateTime {
    private String name;
    private String patient;
    private String statDate;//时间
    private String address;//地址
    private String upperLimit;//上线
    private String lowerLimit;//下线
    private String consNo;//户号
    private String home;//居家状态
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "patient")
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    @Column(name = "stat_date")
    public String getStatDate() {
        return statDate;
    }
    public void setStatDate(String statDate) {
        this.statDate = statDate;
    }
    @Column(name = "address")
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Column(name = "upper_limit")
    public String getUpperLimit() {
        return upperLimit;
    }
    public void setUpperLimit(String upperLimit) {
        this.upperLimit = upperLimit;
    }
    @Column(name = "lower_limit")
    public String getLowerLimit() {
        return lowerLimit;
    }
    public void setLowerLimit(String lowerLimit) {
        this.lowerLimit = lowerLimit;
    }
    @Column(name = "cons_no")
    public String getConsNo() {
        return consNo;
    }
    public void setConsNo(String consNo) {
        this.consNo = consNo;
    }
    @Column(name = "home")
    public String getHome() {
        return home;
    }
    public void setHome(String home) {
        this.home = home;
    }
}

+ 103 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/radio/WlyyRadioDO.java

@ -0,0 +1,103 @@
package com.yihu.jw.entity.care.radio;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @author xyq
 * @create 2022-07-04 11:48
 * @slogan 他化自在,我自逍遥
 */
@Entity
@Table(name = "wlyy_radio")
public class WlyyRadioDO extends IdEntity {
    //频道名称
    @Column(name = "name")
    private String name;
    //频率
    @Column(name = "frequency")
    private String frequency;
    //简介
    @Column(name = "introduction")
    private String introduction;
    //播放地址
    @Column(name = "url")
    private String url;
    //排序
    @Column(name = "sort_num")
    private Integer sortNum;
    @Column(name = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date createTime;
    //1可用,0禁用
    @Column(name = "status")
    private Integer status;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getFrequency() {
        return frequency;
    }
    public void setFrequency(String frequency) {
        this.frequency = frequency;
    }
    public String getIntroduction() {
        return introduction;
    }
    public void setIntroduction(String introduction) {
        this.introduction = introduction;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public Integer getSortNum() {
        return sortNum;
    }
    public void setSortNum(Integer sortNum) {
        this.sortNum = sortNum;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
}

+ 31 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/video/BaseVideoDO.java

@ -18,6 +18,10 @@ public class BaseVideoDO extends UuidIdentityEntityWithCreateTime {
    private String url;//url
    private String img;//封面图片
    private String introduction;//简介
    private Integer sortNum;//排序
    private Integer status;//1可用,0禁用
    @Column(name = "type")
    public String getType() {
        return type;
@ -53,4 +57,31 @@ public class BaseVideoDO extends UuidIdentityEntityWithCreateTime {
    public void setImg(String img) {
        this.img = img;
    }
    @Column(name = "introduction")
    public String getIntroduction() {
        return introduction;
    }
    public void setIntroduction(String introduction) {
        this.introduction = introduction;
    }
    @Column(name = "sort_num")
    public Integer getSortNum() {
        return sortNum;
    }
    public void setSortNum(Integer sortNum) {
        this.sortNum = sortNum;
    }
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
}

+ 69 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/video/BaseVideoGroupDO.java

@ -0,0 +1,69 @@
package com.yihu.jw.entity.care.video;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @author xyq
 * @create 2022-07-04 16:09
 * @slogan 他化自在,我自逍遥
 */
@Entity
@Table(name = "base_video_group")
public class BaseVideoGroupDO extends IdEntity {
    //栏目名称
    @Column(name = "name")
    private String name;
    //栏目排序
    @Column(name = "sort_num")
    private Integer sortNum;
    //1启用,0禁用
    @Column(name = "status")
    private Integer status;
    //创建时间
    @Column(name = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date createTime;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getSortNum() {
        return sortNum;
    }
    public void setSortNum(Integer sortNum) {
        this.sortNum = sortNum;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 33 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/voice/BaseWordToVoiceDO.java

@ -0,0 +1,33 @@
package com.yihu.jw.entity.care.voice;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by yeshijie on 2022/7/7.
 */
@Entity
@Table(name = "base_word_to_voice")
public class BaseWordToVoiceDO extends UuidIdentityEntityWithCreateTime {
    private String word;//最多150个汉字,500个字母
    private String voice;//语音的url地址
    public String getWord() {
        return word;
    }
    public void setWord(String word) {
        this.word = word;
    }
    public String getVoice() {
        return voice;
    }
    public void setVoice(String voice) {
        this.voice = voice;
    }
}

+ 186 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/weather/BaseWeatherDayDO.java

@ -0,0 +1,186 @@
package com.yihu.jw.entity.care.weather;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by yeshijie on 2022/7/27.
 */
@Entity
@Table(name = "base_weather_day")
public class BaseWeatherDayDO extends UuidIdentityEntityWithCreateTime {
    private String nums;//今日实时请求次数
    private String cityid;//城市ID
    private String city;//城市名称
    private String date;//当前日期
    private String week;//星期
    private String updateTime;//更新时间
    private String wea;//天气情况
    private String weaImg;//天气标识(xue、lei、shachen、wu、bingbao、yun、yu、yin、qing)
    private String tem;//实况温度
    private String temDay;//白天温度(高温)
    private String temNight;//夜间温度(低温)
    private String win;//风向
    private String winSpeed;//风力
    private String winMeter;//风速
    private String air;//空气质量
    private String pressure;//气压
    private String humidity;//湿度
    @Column(name = "nums")
    public String getNums() {
        return nums;
    }
    public void setNums(String nums) {
        this.nums = nums;
    }
    @Column(name = "cityid")
    public String getCityid() {
        return cityid;
    }
    public void setCityid(String cityid) {
        this.cityid = cityid;
    }
    @Column(name = "city")
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    @Column(name = "date")
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    @Column(name = "week")
    public String getWeek() {
        return week;
    }
    public void setWeek(String week) {
        this.week = week;
    }
    @Column(name = "update_time")
    public String getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime;
    }
    @Column(name = "wea")
    public String getWea() {
        return wea;
    }
    public void setWea(String wea) {
        this.wea = wea;
    }
    @Column(name = "wea_img")
    public String getWeaImg() {
        return weaImg;
    }
    public void setWeaImg(String weaImg) {
        this.weaImg = weaImg;
    }
    @Column(name = "tem")
    public String getTem() {
        return tem;
    }
    public void setTem(String tem) {
        this.tem = tem;
    }
    @Column(name = "tem_day")
    public String getTemDay() {
        return temDay;
    }
    public void setTemDay(String temDay) {
        this.temDay = temDay;
    }
    @Column(name = "tem_night")
    public String getTemNight() {
        return temNight;
    }
    public void setTemNight(String temNight) {
        this.temNight = temNight;
    }
    @Column(name = "win")
    public String getWin() {
        return win;
    }
    public void setWin(String win) {
        this.win = win;
    }
    @Column(name = "win_speed")
    public String getWinSpeed() {
        return winSpeed;
    }
    public void setWinSpeed(String winSpeed) {
        this.winSpeed = winSpeed;
    }
    @Column(name = "win_meter")
    public String getWinMeter() {
        return winMeter;
    }
    public void setWinMeter(String winMeter) {
        this.winMeter = winMeter;
    }
    @Column(name = "air")
    public String getAir() {
        return air;
    }
    public void setAir(String air) {
        this.air = air;
    }
    @Column(name = "pressure")
    public String getPressure() {
        return pressure;
    }
    public void setPressure(String pressure) {
        this.pressure = pressure;
    }
    @Column(name = "humidity")
    public String getHumidity() {
        return humidity;
    }
    public void setHumidity(String humidity) {
        this.humidity = humidity;
    }
}

+ 146 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/weather/BaseWeatherWeekDO.java

@ -0,0 +1,146 @@
package com.yihu.jw.entity.care.weather;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by yeshijie on 2022/7/27.
 */
@Entity
@Table(name = "base_weather_week")
public class BaseWeatherWeekDO extends UuidIdentityEntityWithCreateTime {
    private String nums;//今日实时请求次数
    private String cityid;//城市ID
    private String city;//城市名称
    private String updateDate;//更新日期
    private String updateTime;//更新时间
    private String date;//预报日期
    private String week;//星期
    private String wea;//天气情况
    private String weaImg;//天气标识(xue、lei、shachen、wu、bingbao、yun、yu、yin、qing)
    private String temDay;//白天温度(高温)
    private String temNight;//夜间温度(低温)
    private String win;//风向
    private String winSpeed;//风力
    @Column(name = "nums")
    public String getNums() {
        return nums;
    }
    public void setNums(String nums) {
        this.nums = nums;
    }
    @Column(name = "cityid")
    public String getCityid() {
        return cityid;
    }
    public void setCityid(String cityid) {
        this.cityid = cityid;
    }
    @Column(name = "city")
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    @Column(name = "date")
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    @Column(name = "update_date")
    public String getUpdateDate() {
        return updateDate;
    }
    public void setUpdateDate(String updateDate) {
        this.updateDate = updateDate;
    }
    @Column(name = "update_time")
    public String getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime;
    }
    @Column(name = "wea")
    public String getWea() {
        return wea;
    }
    public void setWea(String wea) {
        this.wea = wea;
    }
    @Column(name = "wea_img")
    public String getWeaImg() {
        return weaImg;
    }
    public void setWeaImg(String weaImg) {
        this.weaImg = weaImg;
    }
    @Column(name = "tem_day")
    public String getTemDay() {
        return temDay;
    }
    public void setTemDay(String temDay) {
        this.temDay = temDay;
    }
    @Column(name = "tem_night")
    public String getTemNight() {
        return temNight;
    }
    public void setTemNight(String temNight) {
        this.temNight = temNight;
    }
    @Column(name = "win")
    public String getWin() {
        return win;
    }
    public void setWin(String win) {
        this.win = win;
    }
    @Column(name = "win_speed")
    public String getWinSpeed() {
        return winSpeed;
    }
    public void setWinSpeed(String winSpeed) {
        this.winSpeed = winSpeed;
    }
    @Column(name = "week")
    public String getWeek() {
        return week;
    }
    public void setWeek(String week) {
        this.week = week;
    }
}

+ 104 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/child/BaseChildManage.java

@ -0,0 +1,104 @@
package com.yihu.jw.entity.child;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by wsl on 2022/7/20
 */
@Entity
@Table(name = "base_child_manage")
public class BaseChildManage extends UuidIdentityEntity {
    private Integer type;  //类型1图文辅导,2视频辅导,3喜讯详细
    private String orgName;  //机构名字
    private String org;  //机构
    private String title;  //标题
    private String url;  //url/文章内容
    private String img;  //封面图片
    private Date createTime;  //创建时间
    private Integer del;  //1可用,0禁用
    private Integer click;//点击量
    public Integer getClick() {
        return click;
    }
    public void setClick(Integer click) {
        this.click = click;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    @Column(name = "org_name")
    public String getOrgName() {
        return orgName;
    }
    public void setOrgName(String orgName) {
        this.orgName = orgName;
    }
    public String getOrg() {
        return org;
    }
    public void setOrg(String org) {
        this.org = org;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
}

+ 127 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java

@ -0,0 +1,127 @@
package com.yihu.jw.entity.dailyReport;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by Bing on 2022/7/25.
 * 上报内容
 */
@Entity
@Table(name="base_daily_report_detail")
public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    private String reportId;//每日日报id
    private Integer sort;//序号
    private String reportContent;//上报内容事项
    private String completionSchedule;//完成进度
    private String completionHour;//完成时长
    private Integer state;//是否核实 0未核实1已核实
    private Date verificationTime;//核实时间
    private String remark; //备注内容
    private Integer doubt; //疑惑0无疑惑1存疑
    private Integer doubtState; //疑惑核实状态0未核实1已核实
    private String doubtRemark; //疑惑核实备注
    private String actualCompletionHour; //实际完成时长
    public String getReportId() {
        return reportId;
    }
    public void setReportId(String reportId) {
        this.reportId = reportId;
    }
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    public String getReportContent() {
        return reportContent;
    }
    public void setReportContent(String reportContent) {
        this.reportContent = reportContent;
    }
    public String getCompletionSchedule() {
        return completionSchedule;
    }
    public void setCompletionSchedule(String completionSchedule) {
        this.completionSchedule = completionSchedule;
    }
    public String getCompletionHour() {
        return completionHour;
    }
    public void setCompletionHour(String completionHour) {
        this.completionHour = completionHour;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getVerificationTime() {
        return verificationTime;
    }
    public void setVerificationTime(Date verificationTime) {
        this.verificationTime = verificationTime;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getDoubt() {
        return doubt;
    }
    public void setDoubt(Integer doubt) {
        this.doubt = doubt;
    }
    public Integer getDoubtState() {
        return doubtState;
    }
    public void setDoubtState(Integer doubtState) {
        this.doubtState = doubtState;
    }
    public String getDoubtRemark() {
        return doubtRemark;
    }
    public void setDoubtRemark(String doubtRemark) {
        this.doubtRemark = doubtRemark;
    }
    public String getActualCompletionHour() {
        return actualCompletionHour;
    }
    public void setActualCompletionHour(String actualCompletionHour) {
        this.actualCompletionHour = actualCompletionHour;
    }
}

+ 92 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java

@ -0,0 +1,92 @@
package com.yihu.jw.entity.dailyReport;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 * 每日日上报记录
 */
@Entity
@Table(name = "base_doctor_daily_report_upload")
public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    private String doctorId;
    private String doctorName;
    private String weekName;
    private Integer state;//是否全部核实 0未核实1已核实
    private Integer leaveState;//请假状态0未请假1请假
    private String leaveHour;//请假时长
    private String reportDate; //上报日期
    private List<BaseDailyReportDetailDO> detailDOList;
    public String getDoctorId() {
        return doctorId;
    }
    public void setDoctorId(String doctorId) {
        this.doctorId = doctorId;
    }
    public String getDoctorName() {
        return doctorName;
    }
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
    public String getWeekName() {
        return weekName;
    }
    public void setWeekName(String weekName) {
        this.weekName = weekName;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public String getReportDate() {
        return reportDate;
    }
    public void setReportDate(String reportDate) {
        this.reportDate = reportDate;
    }
    @Transient
    public List<BaseDailyReportDetailDO> getDetailDOList() {
        return detailDOList;
    }
    public void setDetailDOList(List<BaseDailyReportDetailDO> detailDOList) {
        this.detailDOList = detailDOList;
    }
    public Integer getLeaveState() {
        return leaveState;
    }
    public void setLeaveState(Integer leaveState) {
        this.leaveState = leaveState;
    }
    public String getLeaveHour() {
        return leaveHour;
    }
    public void setLeaveHour(String leaveHour) {
        this.leaveHour = leaveHour;
    }
}

+ 1 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/followup/Followup.java

@ -3,7 +3,6 @@ package com.yihu.jw.entity.followup;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IntegerIdentityEntity;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.iot.gateway.IdEntity;
import javax.persistence.*;
import java.util.Date;
@ -31,7 +30,7 @@ public class Followup extends IntegerIdentityEntity {
	//随访方式【字典FOLLOWUP_WAY_DICT】
	private String followupType;
	//随访类别,多类别“,”分割【1.高血压 2.糖尿病 3.肿瘤 4.精神分裂症 5.产后 6.新生儿 7.严重精神病 8.80岁以上老人 9.肺结核 10异常体温随访
	// 11.冠心病日常随访 12.慢性妇科炎症13.慢性前列腺疾病日常随访 14.慢性乳腺疾病日常随访 15慢性肾病日常随访 16慢性阻塞性肺病 17脑卒中日常随访 18脂肪肝日常随访
	// 11.冠心病日常随访 12.慢性妇科炎症13.慢性前列腺疾病日常随访 14.慢性乳腺疾病日常随访 15慢性肾病日常随访 16慢性阻塞性肺病 17脑卒中日常随访 18脂肪肝日常随访 21厦心冠心病社区随访
	private String followupClass;
	//随访管理状态【字典FOLLOWUP_MANAGER_STATUS】
	private String followupManagerStatus;

+ 21 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/message/SystemMessageDO.java

@ -21,12 +21,20 @@ public class SystemMessageDO extends UuidIdentityEntity {
     *消息类型 上门服务400开头,生活照料500开头 ,安防监控600开头, 上门辅导700开头,紧急救助800开头
     * 人文关怀系统消息 41
     * 体征设备测量系统消息 42
     * 设备离线系统消息 43
     * 设备离线系统消息 43   推送给家属 社工  助老员
     * 监护确认消息 44
     * 家属紧急预警系统消息 50
     * 新生儿在线咨询 850
     * 老人在线咨询 851
     * 老人健康咨询 852
     *
     * 智能手表佩戴提示 991
     * 智能手表电量提示 992
     * 报警器电量提示 993
     * 设备离线提示 994   推送给 老人Pad
     * 天气预报 995
     * 整点定时发送 996
     * 人工手动系统推送 999
     */
    private String type;
    /**
@ -83,6 +91,18 @@ public class SystemMessageDO extends UuidIdentityEntity {
    private String reason;
    private String code;
    private String senderPhoto;
    private String audioUrl; //音频地址
    @Column(name = "audio_url")
    public String getAudioUrl() {
        return audioUrl;
    }
    public void setAudioUrl(String audioUrl) {
        this.audioUrl = audioUrl;
    }
    @Column(name = "content")
    public String getContent() {
        return content;

+ 83 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/log/BasePatientPadPushOnOffEntity.java

@ -0,0 +1,83 @@
package com.yihu.jw.entity.log;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by wsl on 2022/7/28
 */
@Entity
@Table(name = "base_patient_pad_pushonoff")
public class BasePatientPadPushOnOffEntity extends IdEntity {
    private String patient;  //居民code
    private Integer type;  //推送类型
    //1	时间整点报时
    //2	智能安居设备状态播报(必选)
    //3	体征测量消息
    //4	用药提醒
    //5	天气预报
    //6	服务预约提醒
    //7	生日祝福提醒
    //8	热点新闻播报
    private String typeName;  //推送类型名字
    private Integer onOff;  //开关状态 0 关 1开
    private Date createTime;  //创建时间
    @Column(name = "patient")
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    @Column(name = "type")
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    @Column(name = "type_name")
    public String getTypeName() {
        return typeName;
    }
    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }
    @Column(name = "on_off")
    public Integer getOnOff() {
        return onOff;
    }
    public void setOnOff(Integer onOff) {
        this.onOff = onOff;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 127 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/log/BasePushRecordLogEntity.java

@ -0,0 +1,127 @@
package com.yihu.jw.entity.log;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
import java.util.List;
/**
 * Created by wsl on 2022/7/4
 */
@Entity
@Table(name = "base_pushrecord_log")
public class BasePushRecordLogEntity extends UuidIdentityEntity {
    private String content;  //发送内容
    private String pushType;  //推送类型
    private Date sendTime;  //发送时间
    private Integer num;  //发送人数
    private Integer status;  //状态(1已发送,0待发送)
    private Date createTime;  //创建时间
    private String sendObject;  //发送对象
    private Integer messageType;//消息推送类型
    private Integer sendObjectType;//发送对象类型(1签约老人,2部分签约老人)
    private List<String> patientList;
    @Transient
    public List<String> getPatientList() {
        return patientList;
    }
    public void setPatientList(List<String> patientList) {
        this.patientList = patientList;
    }
    @Column(name = "send_object_type")
    public Integer getSendObjectType() {
        return sendObjectType;
    }
    public void setSendObjectType(Integer sendObjectType) {
        this.sendObjectType = sendObjectType;
    }
    @Column(name = "message_type")
    public Integer getMessageType() {
        return messageType;
    }
    public void setMessageType(Integer messageType) {
        this.messageType = messageType;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    @Column(name = "push_type")
    public String getPushType() {
        return pushType;
    }
    public void setPushType(String pushType) {
        this.pushType = pushType;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "send_time")
    public Date getSendTime() {
        return sendTime;
    }
    public void setSendTime(Date sendTime) {
        this.sendTime = sendTime;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "send_object")
    public String getSendObject() {
        return sendObject;
    }
    public void setSendObject(String sendObject) {
        this.sendObject = sendObject;
    }
}

+ 80 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/log/BasePushrecordLogInfoEntity.java

@ -0,0 +1,80 @@
package com.yihu.jw.entity.log;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by wsl on 2022/7/5
 */
@Entity
@Table(name = "base_pushrecord_log_info")
public class BasePushrecordLogInfoEntity extends IdEntity {
    private String pushId; //推送记录id
    private String patientName;//推送居民名字
    private String patient; //推送居民id
    private String content; //发送内容
    private Integer status; //发送状态
    private Date sendTime; //发送时间
    @Column(name = "patient_name")
    public String getPatientName() {
        return patientName;
    }
    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }
    @Column(name = "push_id")
    public String getPushId() {
        return pushId;
    }
    public void setPushId(String pushId) {
        this.pushId = pushId;
    }
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "send_time")
    public Date getSendTime() {
        return sendTime;
    }
    public void setSendTime(Date sendTime) {
        this.sendTime = sendTime;
    }
}

+ 10 - 3
common/common-entity/src/main/java/com/yihu/jw/entity/specialist/rehabilitation/RehabilitationDetailDO.java

@ -3,11 +3,8 @@ package com.yihu.jw.entity.specialist.rehabilitation;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import com.yihu.jw.entity.util.StringFStringEncryptConverter;
import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@ -53,6 +50,8 @@ public class RehabilitationDetailDO extends UuidIdentityEntity implements Serial
    private String remark;//备注
    @Column(name = "relation_code")
    private String relationCode;//业务关联code
    @Column(name = "followup_detail_type")
    private Integer followupDetailType;//默认0,1是冠心病社区表单
    private Integer reservationType;//复诊类型:1线上,2线下,3远程
    private Date createTime;
@ -269,4 +268,12 @@ public class RehabilitationDetailDO extends UuidIdentityEntity implements Serial
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    public Integer getFollowupDetailType() {
        return followupDetailType;
    }
    public void setFollowupDetailType(Integer followupDetailType) {
        this.followupDetailType = followupDetailType;
    }
}

+ 130 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/util/BaseHzInterfaceDictEntity.java

@ -0,0 +1,130 @@
package com.yihu.jw.entity.util;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by wsl on 2022/6/29
 * 杭州接口
 */
@Entity
@Table(name = "base_hz_interface_dict")
@SequenceGenerator(name="id_generated", sequenceName="seq_base_hz_interface_dict")
public class BaseHzInterfaceDictEntity extends IdEntity {
    private String url;//接口地址
    private String code;//接口code
    private String name;//接口名字
    private Integer status;//状态(1生效,0失效)
    private Date createTime;//创建时间
    private String appKey;//APP_KEY
    private String appPwd;//APP秘钥
    private String  refreshSecret;//刷新秘钥
    private Date refreshSecretEndTime;//刷新秘钥过期时间
    private String  requestSecret;//请求秘钥
    private Date requestSecretEndTime;//请求秘钥过期时间
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "app_key")
    public String getAppKey() {
        return appKey;
    }
    public void setAppKey(String appKey) {
        this.appKey = appKey;
    }
    @Column(name = "app_pwd")
    public String getAppPwd() {
        return appPwd;
    }
    public void setAppPwd(String appPwd) {
        this.appPwd = appPwd;
    }
    @Column(name = "refresh_secret")
    public String getRefreshSecret() {
        return refreshSecret;
    }
    public void setRefreshSecret(String refreshSecret) {
        this.refreshSecret = refreshSecret;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "refresh_secret_end_time")
    public Date getRefreshSecretEndTime() {
        return refreshSecretEndTime;
    }
    public void setRefreshSecretEndTime(Date refreshSecretEndTime) {
        this.refreshSecretEndTime = refreshSecretEndTime;
    }
    @Column(name = "request_secret")
    public String getRequestSecret() {
        return requestSecret;
    }
    public void setRequestSecret(String requestSecret) {
        this.requestSecret = requestSecret;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "request_secret_end_time")
    public Date getRequestSecretEndTime() {
        return requestSecretEndTime;
    }
    public void setRequestSecretEndTime(Date requestSecretEndTime) {
        this.requestSecretEndTime = requestSecretEndTime;
    }
}

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

@ -3,6 +3,7 @@ package com.yihu.jw.util.common;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
@ -128,6 +129,28 @@ public class RSAUtils {
        return ci.doFinal(data);
    }
    /**
     * RSA公钥加密
     *
     * @param str
     *            加密字符串
     * @param publicKey
     *            公钥
     * @return 密文
     * @throws Exception
     *             加密过程中的异常信息
     */
    public static String encrypt( String str, String publicKey ) throws Exception{
        //base64编码的公钥
        byte[] decoded = Base64.decodeBase64(publicKey);
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
        //RSA加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
        return outStr;
    }
    public static void main(String[] args) {
        KeyPair keyPair =  initKey();

+ 28 - 0
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -1577,5 +1577,33 @@ public class DateUtil {
        list.add(DateUtil.dateToStrLong(afterTime));
        return list;
    }
    /**
     * 计算当前时间和传入时间的相差
     * 秒数
     */
    public static Long behindSubBefore(String date){
        Date startDate = DateUtil.strToDate(date);
        Date currentDate = DateUtil.getNowDate();
        return (startDate.getTime() - currentDate.getTime()) / 1000;
    }
    public static int getWeekByString(String date){
        Calendar cal = Calendar.getInstance(); // 获得一个日历
        Date datet = null;
        try {
            datet = simpleDateParse(date);
            cal.setTime(datet);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
        if (w < 0)
            w = 0;
        return w;
    }
    public static String dateToWeek(String date) {
        String[] weekDays = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
        return weekDays[getWeekByString(date)];
    }
}

+ 27 - 4
common/common-util/src/main/java/com/yihu/jw/util/http/HttpClientUtil.java

@ -7,16 +7,15 @@ import com.yihu.jw.entity.base.dict.BaseExceptionServerDictDO;
import com.yihu.jw.util.dao.BaseExceptionDictUtilDao;
import com.yihu.jw.util.dao.BaseExceptionLogUtilDao;
import com.yihu.jw.util.dao.BaseExceptionServerDictUtilDao;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
@ -393,6 +392,30 @@ public class HttpClientUtil {
        restTemplate.put(url, formEntity, String.class);
    }
    public JSONObject headerPost(String url,MultiValueMap<String, String> params){
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        org.springframework.http.HttpEntity<MultiValueMap<String, String>> request = new org.springframework.http.HttpEntity<>(params, headers);
        org.springframework.http.HttpEntity<JSONObject> response = restTemplate.exchange(url, HttpMethod.POST, request, JSONObject.class);
        return response.getBody();
    }
    public String getBodyAuthorization(String url, String token, String str) throws IOException {
        RestTemplate restTemplate = new RestTemplate();
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url+str);
        httpGet.addHeader("Authorization","Bearer"+" "+token);
        httpGet.addHeader("Type",MediaType.APPLICATION_JSON_VALUE);
        httpGet.addHeader("Accept",MediaType.ALL_VALUE);
        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        String strss = EntityUtils.toString(entity, "UTF-8") ;
        return strss;
    }
    /**
     * 发送post请求
     *

+ 12 - 2
gateway/ag-basic/src/main/resources/application.yml

@ -240,8 +240,18 @@ spring:
  redis:
     host: 59.61.92.90 # Redis server host.
     port: 9054  # Redis server port.
     password: jkzlehr
     password: o!a1#B74&m
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: wlyy
    password: jkzlehr@123
  redis:
    host: 10.95.22.142 # Redis server host.
    port: 6380  # Redis server port.
    password: o!a1#B74&m
---
spring:
  profiles: jwystest

+ 7 - 0
gateway/ag-basic/src/main/resources/bootstrap.yml

@ -104,6 +104,13 @@ spring:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:

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

@ -688,6 +688,8 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
            try {
                //先删除在新增
                deleteCidByUser(id);
                //删除clientId,避免收到其他人的
                deleteCidByCid(clientId);
                GetuiClientDO getuiClientDO = new GetuiClientDO();
                getuiClientDO.setClientId(clientId);
@ -726,6 +728,14 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        }
    }
    public void deleteCidByCid(String cid){
        try {
            String sql = "delete from base_getui_client where client_id='"+cid+"'";
            getJdbcTemplate().execute(sql);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**

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

@ -3,6 +3,7 @@ package com.yihu.jw.security.oauth2.provider.endpoint;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.patient.util.ConstantUtils;
import com.yihu.jw.restmodel.ResultStatus;
import com.yihu.jw.security.exception.ImgCaptchaException;
import com.yihu.jw.security.model.Captcha;
import com.yihu.jw.security.model.Oauth2Envelop;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
@ -13,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@ -47,6 +49,8 @@ public class WlyyIotLoginEndpoint {
    private IotSMSService iotSMSService;
    @Autowired
    private UserService userService;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @RequestMapping(value = "/oauth/sendIotCaptcha", method = RequestMethod.GET)
    @ApiOperation("发送短信验证码")
@ -59,6 +63,15 @@ public class WlyyIotLoginEndpoint {
        if (StringUtils.isEmpty(mobile)) {
            throw new InvalidRequestException("username");
        }
        //图形验证码验证
        String key = parameters.get("key");
        String text = parameters.get("text");
        if(!verifyCaptcha(key,text)){
            throw new ImgCaptchaException("图形验证码错误!");
        }
        //验证请求间隔超时,防止频繁获取验证码
        if (!wlyyRedisVerifyCodeService.isIntervalTimeout(client_id, mobile)) {
            throw new IllegalAccessException("SMS request frequency is too fast");
@ -82,6 +95,19 @@ public class WlyyIotLoginEndpoint {
        throw new IllegalStateException("验证码发送失败!result:"+ result);
    }
    public boolean verifyCaptcha(String key,String text){
        boolean pass = false;
        if(StringUtils.isEmpty(key)||StringUtils.isEmpty(text)){
            return false;
        }
        String captcha = redisTemplate.opsForValue().get(key);
        if (org.apache.commons.lang3.StringUtils.isNotBlank(captcha)&& captcha.equals(text.toLowerCase())){
            pass = true;
            redisTemplate.delete(key);
        }
        return pass;
    }
    @RequestMapping(value = "/oauth/captchaAndRegister", method = RequestMethod.POST)
    @ApiOperation("验证短信验证码并注册")
    public ResponseEntity<Oauth2Envelop> captchaCheck(@RequestParam Map<String, String> parameters) throws Exception {
@ -98,6 +124,15 @@ public class WlyyIotLoginEndpoint {
        if (StringUtils.isEmpty(captcha)) {
            throw new InvalidRequestException("captcha");
        }
        //图形验证码验证
        String key = parameters.get("key");
        String text = parameters.get("text");
        if(!verifyCaptcha(key,text)){
            throw new ImgCaptchaException("图形验证码错误!");
        }
        Oauth2Envelop<Boolean> oauth2Envelop;
        //判断当前手机号是否注册过
        Boolean b = userService.isRegisterUserName(mobile);
@ -112,7 +147,7 @@ public class WlyyIotLoginEndpoint {
                    oauth2Envelop = new Oauth2Envelop<>(jsonObject.getString("msg"), ResultStatus.INVALID_GRANT, false);
                }
            } else {
                oauth2Envelop = new Oauth2Envelop<>("验证码错误", ResultStatus.INVALID_GRANT, false);
                oauth2Envelop = new Oauth2Envelop<>("短信验证码错误", ResultStatus.INVALID_GRANT, false);
            }
        }
        HttpHeaders headers = new HttpHeaders();

+ 31 - 0
server/svr-authentication/src/main/resources/application.yml

@ -359,6 +359,37 @@ im:
kick:
    ##互踢 1开通 0关闭
    eachOther: 1
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: wlyy_new
    password: J4&y9sk#1G
  redis:
    host: 10.95.22.142 # Redis server host.
    port: 6380  # Redis server port.
    password: o!a1#B74&m
  ##发现服务
## i健康用户信息接口,开放出来给互联网医院登录同步用户信息用
iHealth:
  user-info-uri: http://ehr.yihu.com/wlyy/iHealth/userInfo
fastDFS:
  fastdfs_file_url: http://172.26.0.110:8888/
wlyy:
  url: http://10.95.22.10:8011/wlyy/
#文件服务器上传配置 0本地,1.I健康,2.内网调用
testPattern:
  sign: 0
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
wechat:
  id: xm_ykyy_wx  # base库中,wx_wechat 的id字段
im:
  im_list_get: http://172.26.0.105:3000/
kick:
  ##互踢 1开通 0关闭
  eachOther: 1
---
spring:

+ 7 - 1
server/svr-authentication/src/main/resources/bootstrap.yml

@ -106,7 +106,13 @@ spring:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: jwystest

+ 1 - 0
starter/elasticsearch-starter/pom.xml

@ -10,6 +10,7 @@
    <modelVersion>4.0.0</modelVersion>
    <artifactId>elasticsearch-starter</artifactId>
    <version>2.0.0</version>
    <dependencies>
        <dependency>

+ 2 - 1
starter/swagger-starter/src/main/java/com/yihu/jw/SwaggerConfig.java

@ -29,7 +29,7 @@ public class SwaggerConfig {
    final String userAgentJson = "{\"id\":int,\"uid\":string,\"openid\":string,\"token\":string,\"lastUid\":string,\"platform\":int}";
    private List<Parameter> addUseragent() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        List<Parameter> pars = new ArrayList<>();
        tokenPar.name("userAgent").description(userAgentJson).modelRef(new ModelRef("string")).parameterType("header").required(false).defaultValue("").build();
        pars.add(tokenPar.build());
        return pars;
@ -78,6 +78,7 @@ public class SwaggerConfig {
                        regex("/dump"),
                        regex("/autoconfig"),
                        regex("/info"),
                        regex("/ChildManageController"),
                        regex("/features")))
                .build()
                .apiInfo(privateAPIInfo());

+ 6 - 0
svr/svr-base/pom.xml

@ -62,6 +62,12 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>im-service</artifactId>
            <version>2.0.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>

+ 9 - 0
svr/svr-base/src/main/java/com/yihu/SvrBaseApplication.java

@ -5,9 +5,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.client.RestTemplate;
import javax.servlet.MultipartConfigElement;
@ -35,4 +37,11 @@ public class SvrBaseApplication extends SpringBootServletInitializer {
        return factory.createMultipartConfig();
    }
    @LoadBalanced//为RestTemplate Bean添加了一个LoadBalancerInterceptor拦截器。可以将请求的地址中的服务逻辑名转为具体的服务地址
    @Bean//将RestTemplate注册到容器
    public RestTemplate RestTemplate(){
        return new RestTemplate();
    }
}

+ 11 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/childManage/BaseChildManageDao.java

@ -0,0 +1,11 @@
package com.yihu.jw.base.dao.childManage;
import com.yihu.jw.entity.child.BaseChildManage;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/7/20
 */
public interface BaseChildManageDao extends PagingAndSortingRepository<BaseChildManage,String>, JpaSpecificationExecutor<BaseChildManage> {
}

+ 13 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/log/BasePatientPadPushOnOffDao.java

@ -0,0 +1,13 @@
package com.yihu.jw.base.dao.log;
import com.yihu.jw.entity.log.BasePatientPadPushOnOffEntity;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/7/28
 */
public interface BasePatientPadPushOnOffDao extends PagingAndSortingRepository<BasePatientPadPushOnOffEntity, String>, JpaSpecificationExecutor<BasePatientPadPushOnOffEntity> {
}

+ 17 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/log/BasePushRecordLogDao.java

@ -0,0 +1,17 @@
package com.yihu.jw.base.dao.log;
import com.yihu.jw.entity.log.BasePushRecordLogEntity;
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 wsl on 2022/7/4
 */
public interface BasePushRecordLogDao extends PagingAndSortingRepository<BasePushRecordLogEntity, String>, JpaSpecificationExecutor<BasePushRecordLogEntity> {
    @Query("from BasePushRecordLogEntity")
    List<BasePushRecordLogEntity> findAll();
}

+ 19 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/log/BasePushrecordLogInfoDao.java

@ -0,0 +1,19 @@
package com.yihu.jw.base.dao.log;
import com.yihu.jw.entity.log.BasePushrecordLogInfoEntity;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/7/5
 */
public interface BasePushrecordLogInfoDao extends PagingAndSortingRepository<BasePushrecordLogInfoEntity, String>, JpaSpecificationExecutor<BasePushrecordLogInfoEntity> {
    @Modifying
    @Query("delete from BasePushrecordLogInfoEntity p where  p.pushId = ?1  ")
    void deleteByPushId(String pushId);
}

+ 22 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/radio/WlyyRadioDao.java

@ -0,0 +1,22 @@
package com.yihu.jw.base.dao.radio;
import com.yihu.jw.entity.care.radio.WlyyRadioDO;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * @author xyq
 * @create 2022-07-04 13:36
 * @slogan 他化自在,我自逍遥
 */
public interface WlyyRadioDao extends PagingAndSortingRepository<WlyyRadioDO, String>, JpaSpecificationExecutor<WlyyRadioDO> {
    @Query("select r from WlyyRadioDO r where r.status = 1 ")
    List<WlyyRadioDO> findByPage(Pageable pageable);
    WlyyRadioDO findById(Long id);
}

+ 11 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/video/BaseVideoDao.java

@ -0,0 +1,11 @@
package com.yihu.jw.base.dao.video;
import com.yihu.jw.entity.care.video.BaseVideoDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2022/3/21.
 */
public interface BaseVideoDao extends PagingAndSortingRepository<BaseVideoDO, String>, JpaSpecificationExecutor<BaseVideoDO> {
}

+ 16 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/video/BaseVideoGroupDao.java

@ -0,0 +1,16 @@
package com.yihu.jw.base.dao.video;
import com.yihu.jw.entity.care.video.BaseVideoGroupDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * @author xyq
 * @create 2022-07-04 16:14
 * @slogan 他化自在,我自逍遥
 */
public interface BaseVideoGroupDao extends PagingAndSortingRepository<BaseVideoGroupDO, String>, JpaSpecificationExecutor<BaseVideoGroupDO> {
    BaseVideoGroupDO findById(Long id);
}

+ 133 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/ManageMessagePush/ManageSystemPushMessageController.java

@ -0,0 +1,133 @@
package com.yihu.jw.base.endpoint.ManageMessagePush;
import com.yihu.jw.base.service.ManageMessagePush.ManageSystemPushMessageService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Created by wsl on 2022/7/4
 */
@RestController
@RequestMapping(value = "/ManageSystemPushMessage", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "消息推送管理", description = "消息推送管理接口", tags = {"wlyy消息推送 - 消息推送管理接口"})
public class ManageSystemPushMessageController extends EnvelopRestEndpoint {
    @Autowired
    ManageSystemPushMessageService mspmservice;
    @ApiOperation("获取所有签约老人")
    @GetMapping(value = "/signOlds")
    public ListEnvelop signOlds(@ApiParam(name = "name", value = "居民名字", required = false)
                                @RequestParam(value = "name", required = false) String name) {
        try {
            List<BasePatientDO> basePatientDOS = mspmservice.signOlds(name);
            return success(basePatientDOS);
        } catch (Exception e) {
            e.printStackTrace();
            return failedListEnvelopException2(e);
        }
    }
    @ApiOperation("开关")
    @PostMapping(value = "/pushOnOff")
    public Envelop pushOnOff(@ApiParam(name = "pyCode",value = "开关状态",required = true)
                             @RequestParam(value = "pyCode",required = true)String pyCode,
                             @ApiParam(name = "dictName",value = "字典名字",required = true)
                             @RequestParam(value = "dictName",required = true)String dictName,
                             @ApiParam(name = "id",value = "字典id",required = true)
                             @RequestParam(value = "id",required = true)String id){
        try {
            mspmservice.pushOnOff(id,dictName,pyCode);
            return success("修改成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return failedException(e);
        }
    }
    @ApiOperation("获取推送记录列表")
    @PostMapping(value = "/pushMessageList")
    public ObjEnvelop pushMessageList(@ApiParam(name = "messageType",value = "消息类型",required = false)
                                       @RequestParam(value = "messageType",required = false)Integer messageType,
                                      @ApiParam(name = "status",value = "状态",required = false)
                                       @RequestParam(value = "status",required = false)Integer status,
                                      @ApiParam(name = "name",value = "名字查找",required = false)
                                       @RequestParam(value = "name",required = false)String name,
                                      @RequestParam(value = "page",required = true)Integer page,
                                      @RequestParam(value = "pageSize",required = true)Integer pageSize){
        try {
            return ObjEnvelop.getSuccess("获取成功!",mspmservice.pushMessageList(messageType,status,name,page,pageSize),200);
        } catch (Exception e) {
            e.printStackTrace();
            return failedObjEnvelopException2(e);
        }
    }
    @ApiOperation("删除列表")
    @PostMapping(value = "/delPushMessageLog")
    public Envelop delPushMessageLog(@RequestParam(value = "id",required = true)String id){
        try {
            mspmservice.delPushMessageLog(id);
            return success("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failedException(e);
        }
    }
    @ApiOperation("添加推送")
    @PostMapping(value = "/addPushMessage")
    public Envelop addPushMessage(@ApiParam(name = "content", value = "推送消息", required = true)
                                  @RequestParam(value = "content", required = true) String content,
                                  @ApiParam(name = "pushObjectType", value = "推送对象类型 1签约老人,2部分签约老人", required = true)
                                  @RequestParam(value = "pushObjectType", required = true) Integer pushObjectType,
                                  @ApiParam(name = "pushObjectJson", value = "推送对象", required = false)
                                  @RequestParam(value = "pushObjectJson", required = false) String pushObjectJson,
                                  @ApiParam(name = "pushDateType", value = "推送类型 1立即发送 2 定时发送", required = true)
                                  @RequestParam(value = "pushDateType", required = true) Integer pushDateType,
                                  @ApiParam(name = "pushDate", value = "推送时间 定时发送才传", required = false)
                                  @RequestParam(value = "pushDate", required = false) String pushDate,
                                  @ApiParam(name = "addType",value = "类型 1新增 2修改",required = false)
                                  @RequestParam(value = "addType",required = false)Integer addType,
                                  @ApiParam(name = "pushId",value = "推送id",required = false)
                                  @RequestParam(value = "pushId",required = false)String pushId) {
        try {
            mspmservice.addPushMessage(content,pushObjectType,pushObjectJson,pushDateType,pushDate,addType,pushId);
            return success("添加成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failedException(e);
        }
    }
    @ApiOperation("初始化居民推送开关")
    @PostMapping(value = "/patientPushOnOff")
    public Envelop patientPushOnOff(){
        try {
            mspmservice.patientPushOnOff();
            return success("成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return failed("初始化失败!",500);
        }
    }
}

+ 96 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/childManage/ChildManageController.java

@ -0,0 +1,96 @@
package com.yihu.jw.base.endpoint.childManage;
import com.yihu.jw.base.service.child.ChildManageService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * Created by wsl on 2022/7/20
 */
@RestController
@RequestMapping("/childManage")
@Api(tags = "幼儿管理", description = "幼儿管理相关操作")
public class ChildManageController extends EnvelopRestEndpoint {
    @Autowired
    private ChildManageService childManageService;
    @ApiOperation(value = "获取列表")
    @GetMapping("/getChildManageList")
    public ObjEnvelop getChildManageList(@ApiParam(name = "type" ,value = "类型 1图文辅导,2视频辅导,3喜讯详细",required = true)
                                         @RequestParam(value = "type",required = true)Integer type,
                                         @ApiParam(name = "title" ,value = "标题",required = false)
                                         @RequestParam(value = "title",required = false)String title,
                                         @ApiParam(name = "orgCode" ,value = "机构code",required = false)
                                         @RequestParam(value = "orgCode",required = false)String orgCode,
                                         @ApiParam(name = "id" ,value = "id",required = false)
                                         @RequestParam(value = "id",required = false)String id,
                                         @RequestParam(value = "page",required = false)Integer page,
                                         @RequestParam(value = "pageSize",required = false)Integer pageSize){
        try {
            return success(childManageService.getChildManageList(type,page,pageSize,title,orgCode,id));
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("获取失败");
        }
    }
    @ApiOperation(value = "保存修改")
    @PostMapping("/saveOrUpdate")
    public Envelop saveOrUpdate(@ApiParam(name = "jsonData",value = "实体转JSON",required = true)
                                @RequestParam(value = "jsonData",required = false)String jsonData){
        try {
            childManageService.saveOrUpdate(jsonData);
            return success("保存成功!",200);
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("保存失败!");
        }
    }
    @ApiOperation(value = "删除")
    @PostMapping("/deletInfo")
    public Envelop deletinfo(@ApiParam(name = "id",value = "id",required = true)
                             @RequestParam(value = "id",required = true)String id){
        try {
            childManageService.deletinfo(id);
            return success("删除成功!",200);
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("删除失败!");
        }
    }
    @ApiOperation(value = "获取机构")
    @GetMapping("/childOrgList")
    public ListEnvelop childOrgList(){
        try {
            return success(childManageService.childOrgList());
        } catch (Exception e) {
            e.printStackTrace();
            return ListEnvelop.getError("获取失败!");
        }
    }
}

+ 143 - 116
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/common/FileUploadController.java

@ -69,89 +69,98 @@ public class FileUploadController extends EnvelopRestEndpoint {
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM_IMG)
    @ApiOperation(value = "文件流上传图片", notes = "文件流上传图片")
    public ObjEnvelop<UploadVO> uploadImg(@ApiParam(value = "文件", required = true)
                                       @RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
        // 得到文件的完整名称  xxx.txt
                                       @RequestParam(value = "file", required = true) MultipartFile file){
        try {
            // 得到文件的完整名称  xxx.txt
//        String originalFilename = file.getOriginalFilename();
//        InputStream inputStream = file.getInputStream();
//        UploadVO uploadVO = fileUploadService.uploadImg(inputStream,originalFilename,file.getSize(),fastdfs_file_url);
//        return success("上传成功", uploadVO);
        UploadVO uploadVO = new UploadVO();
        if (isClose.equalsIgnoreCase("1")){
            Map<String, Object> map = fileUploadService.uploadImg(file);
            uploadVO.setFullUri(map.get("accessory").toString());
        }else if(isClose.equals("2")){
            String originalFilename = file.getOriginalFilename();
            String[] fs = originalFilename.split("\\.");
            String type = fs[1];
            //内网上传
            String rs = fileUploadService.request(remote_inner_url,file,type);
            logger.info(rs);
            JSONObject json = JSON.parseObject(rs);
            uploadVO = objectMapper.readValue(json.getJSONObject("obj").toJSONString(),UploadVO.class);
            UploadVO uploadVO = new UploadVO();
            if (isClose.equalsIgnoreCase("1")){
                Map<String, Object> map = fileUploadService.uploadImg(file);
                uploadVO.setFullUri(map.get("accessory").toString());
            }else if(isClose.equals("2")){
                String originalFilename = file.getOriginalFilename();
                String[] fs = originalFilename.split("\\.");
                String type = fs[1];
                //内网上传
                String rs = fileUploadService.request(remote_inner_url,file,type);
                logger.info(rs);
                JSONObject json = JSON.parseObject(rs);
                uploadVO = objectMapper.readValue(json.getJSONObject("obj").toJSONString(),UploadVO.class);
        }else {
            // 得到文件的完整名称  xxx.txt
            String originalFilename = file.getOriginalFilename();
            InputStream inputStream = file.getInputStream();
            uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
            }else {
                // 得到文件的完整名称  xxx.txt
                String originalFilename = file.getOriginalFilename();
                InputStream inputStream = file.getInputStream();
                uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
            }
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
        return success("上传成功", uploadVO);
    }
    @PostMapping(value = "upload_stream_attachmentLimit")
    @ApiOperation(value = "文件流上传附件", notes = "文件流上传附件限制格式")
    public ObjEnvelop<UploadVO> uploadAttachmentLimit(@ApiParam(value = "文件", required = true)
                                                 @RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
        UploadVO uploadVO = new UploadVO();
        // 得到文件的完整名称  xxx.txt
        String originalFilename = file.getOriginalFilename();
        //得到文件类型
        String fileName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
        String fileType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).toLowerCase();
        if(StringUtils.isBlank(fileType)||!"doc、docx、pdf、xls、xlsx、ppt、pptx".contains(fileType)){
            return ObjEnvelop.getError("文件格式不支持");
                                                 @RequestParam(value = "file", required = true) MultipartFile file){
        try {
            UploadVO uploadVO = new UploadVO();
            // 得到文件的完整名称  xxx.txt
            String originalFilename = file.getOriginalFilename();
            //得到文件类型
            String fileName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
            String fileType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).toLowerCase();
            if(StringUtils.isBlank(fileType)||!"doc、docx、pdf、xls、xlsx、ppt、pptx".contains(fileType)){
                return ObjEnvelop.getError("文件格式不支持");
            }
            InputStream inputStream = file.getInputStream();
            ObjectNode objectNode = fastDFSHelper.upload(inputStream, fileType, "");
            //解析返回的objectNode
            uploadVO.setFileName(fileName);
            uploadVO.setFileType(fileType);
            uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
            uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
        InputStream inputStream = file.getInputStream();
        ObjectNode objectNode = fastDFSHelper.upload(inputStream, fileType, "");
        //解析返回的objectNode
        uploadVO.setFileName(fileName);
        uploadVO.setFileType(fileType);
        uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
        uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
        return success("上传成功", uploadVO);
    }
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM_ATTACHMENT)
    @ApiOperation(value = "文件流上传附件", notes = "文件流上传附件")
    public ObjEnvelop<UploadVO> uploadAttachment(@ApiParam(value = "文件", required = true)
                                       @RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
//        String originalFilename = file.getOriginalFilename();
//        InputStream inputStream = file.getInputStream();
//
//    UploadVO uploadVO = fileUploadService.uploadAttachment(inputStream,originalFilename,file.getSize(),fastdfs_file_url);
//        return success("上传成功", uploadVO);
        UploadVO uploadVO = new UploadVO();
        if (isClose.equalsIgnoreCase("1")){
            Map<String, Object> map = fileUploadService.uploadImg(file);
            uploadVO.setFullUri(map.get("accessory").toString());
        }else if(isClose.equals("2")){
            String originalFilename = file.getOriginalFilename();
            String[] fs = originalFilename.split("\\.");
            String type = fs[1];
            //内网上传
            String rs = fileUploadService.request(remote_inner_url,file,type);
            logger.info(rs);
            JSONObject json = JSON.parseObject(rs);
            uploadVO = objectMapper.readValue(json.getJSONObject("obj").toJSONString(),UploadVO.class);
                                       @RequestParam(value = "file", required = true) MultipartFile file){
        try {
            UploadVO uploadVO = new UploadVO();
            if (isClose.equalsIgnoreCase("1")){
                Map<String, Object> map = fileUploadService.uploadImg(file);
                uploadVO.setFullUri(map.get("accessory").toString());
            }else if(isClose.equals("2")){
                String originalFilename = file.getOriginalFilename();
                String[] fs = originalFilename.split("\\.");
                String type = fs[1];
                //内网上传
                String rs = fileUploadService.request(remote_inner_url,file,type);
                logger.info(rs);
                JSONObject json = JSON.parseObject(rs);
                uploadVO = objectMapper.readValue(json.getJSONObject("obj").toJSONString(),UploadVO.class);
        }else {
            // 得到文件的完整名称  xxx.txt
            String originalFilename = file.getOriginalFilename();
            InputStream inputStream = file.getInputStream();
            uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
            }else {
                // 得到文件的完整名称  xxx.txt
                String originalFilename = file.getOriginalFilename();
                InputStream inputStream = file.getInputStream();
                uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
            }
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
        return success("上传成功", uploadVO);
//        return uploadStream(file);
    }
//    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM)
@ -169,9 +178,14 @@ public class FileUploadController extends EnvelopRestEndpoint {
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STRING)
    @ApiOperation(value = "base64上传图片",notes = "base64上传图片")
    public ObjEnvelop<UploadVO> uploadImages(@ApiParam(name = "jsonData", value = "头像转化后的输入流")
                                                 @RequestBody String jsonData) throws Exception {
        UploadVO uploadVO = fileUploadService.uploadImages(jsonData,fastdfs_file_url);
        return success("上传成功", uploadVO);
                                                 @RequestBody String jsonData){
        try {
            UploadVO uploadVO = fileUploadService.uploadImages(jsonData,fastdfs_file_url);
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
    }
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM)
@ -179,8 +193,9 @@ public class FileUploadController extends EnvelopRestEndpoint {
    public ObjEnvelop<UploadVO> uploadStream(@ApiParam(value = "文件", required = true)
                                             @RequestParam(value = "file", required = true) MultipartFile file
            /*@ApiParam(value = "jsonData", required = true)
            @RequestBody MutilFileInfo param, HttpServletResponse response, HttpServletRequest request*/) throws Exception{
        UploadVO uploadVO = new UploadVO();
            @RequestBody MutilFileInfo param, HttpServletResponse response, HttpServletRequest request*/){
        try {
            UploadVO uploadVO = new UploadVO();
            if (isClose.equalsIgnoreCase("1")){
                Map<String, Object> map = fileUploadService.uploadImg(file);
                uploadVO.setFullUri(map.get("accessory").toString());
@ -202,14 +217,23 @@ public class FileUploadController extends EnvelopRestEndpoint {
                uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
            }
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
    }
    @PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STRINGBASE64)
    @ApiOperation(value = "base64上传图片Xz",notes = "base64上传图片Xz")
    public ObjEnvelop<UploadVO> uploadBase64(@ApiParam(name = "jsonData", value = "头像转化后的输入流")
                                             @RequestBody String jsonData) throws Exception {
        UploadVO uploadVO = fileUploadService.uploadImagesBase64(jsonData,fastdfs_file_url);
        return success("上传成功", uploadVO);
        try {
            UploadVO uploadVO = fileUploadService.uploadImagesBase64(jsonData,fastdfs_file_url);
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
    }
@ -230,57 +254,60 @@ public class FileUploadController extends EnvelopRestEndpoint {
                                                  @ApiParam(value = "objectType", required = false)
                                                  @RequestParam(value = "objectType", required = false) Integer objectType,
                                                  @ApiParam(value = "chunkSize", required = false)
                                                      @RequestParam(value = "chunkSize", required = false) Integer  chunkSize
    ) throws Exception{
        UploadVO uploadVO = new UploadVO();
        MutilFileInfo files = new MutilFileInfo();
        files.setChunk(chunk);
        files.setChunkTotal(chunkTotal);
        files.setFile(file);
        files.setObjectType(objectType);
        files.setSize(file.getSize());
        logger.info("file size"+file.getSize());
        files.setTaskId(taskId);
        String taskid = fileManageService.chunkUploadByMappedByteBuffer(files,chunkSize);
        logger.info("taskid"+taskid);
        if ("unCompelete".equalsIgnoreCase(taskid)){
            System.out.println("第"+files.getChunk());
            return success("未传完",uploadVO);
        }else {
                                                  @RequestParam(value = "chunkSize", required = false) Integer  chunkSize){
        try {
            UploadVO uploadVO = new UploadVO();
            MutilFileInfo files = new MutilFileInfo();
            files.setChunk(chunk);
            files.setChunkTotal(chunkTotal);
            files.setFile(file);
            files.setObjectType(objectType);
            files.setSize(file.getSize());
            logger.info("file size"+file.getSize());
            files.setTaskId(taskId);
            String taskid = fileManageService.chunkUploadByMappedByteBuffer(files,chunkSize);
            logger.info("taskid"+taskid);
            if ("unCompelete".equalsIgnoreCase(taskid)){
                System.out.println("第"+files.getChunk());
                return success("未传完",uploadVO);
            }else {
            File file1 = new File(taskid);
            logger.info("size:"+file1.getTotalSpace());
            FileInputStream input = new FileInputStream(file1);
            MultipartFile multipartFile = new MockMultipartFile("file", file1.getName(), "text/plain", IOUtils.toByteArray(input));
            if (isClose.equalsIgnoreCase("1")){
                Map<String, Object> map = fileUploadService.uploadImg(multipartFile);
                uploadVO.setFullUri(map.get("accessory").toString());
            }else if(isClose.equals("2")){
                String originalFilename = multipartFile.getOriginalFilename();
                String[] fs = originalFilename.split("\\.");
                String type = fs[1];
                //内网上传
                String rs = fileUploadService.request(remote_inner_url,multipartFile,type);
                logger.info(rs);
                JSONObject json = JSON.parseObject(rs);
                uploadVO = objectMapper.readValue(json.getJSONObject("obj").toJSONString(),UploadVO.class);
                File file1 = new File(taskid);
                logger.info("size:"+file1.getTotalSpace());
                FileInputStream input = new FileInputStream(file1);
                MultipartFile multipartFile = new MockMultipartFile("file", file1.getName(), "text/plain", IOUtils.toByteArray(input));
                if (isClose.equalsIgnoreCase("1")){
                    Map<String, Object> map = fileUploadService.uploadImg(multipartFile);
                    uploadVO.setFullUri(map.get("accessory").toString());
                }else if(isClose.equals("2")){
                    String originalFilename = multipartFile.getOriginalFilename();
                    String[] fs = originalFilename.split("\\.");
                    String type = fs[1];
                    //内网上传
                    String rs = fileUploadService.request(remote_inner_url,multipartFile,type);
                    logger.info(rs);
                    JSONObject json = JSON.parseObject(rs);
                    uploadVO = objectMapper.readValue(json.getJSONObject("obj").toJSONString(),UploadVO.class);
            }else {
                // 得到文件的完整名称  xxx.txt
                String originalFilename = multipartFile.getOriginalFilename();
                }else {
                    // 得到文件的完整名称  xxx.txt
                    String originalFilename = multipartFile.getOriginalFilename();
                //判断文件名称是否有包含后缀,及前端是否有传后缀名称,有的话拼接图片后缀
                if(originalFilename.lastIndexOf(".") == 0 && StringUtils.isNotEmpty(filename)){
                    originalFilename = originalFilename +"."+filename;
                }
                    //判断文件名称是否有包含后缀,及前端是否有传后缀名称,有的话拼接图片后缀
                    if(originalFilename.lastIndexOf(".") == 0 && StringUtils.isNotEmpty(filename)){
                        originalFilename = originalFilename +"."+filename;
                    }
                InputStream inputStream = multipartFile.getInputStream();
                uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
                file1.delete();
                    InputStream inputStream = multipartFile.getInputStream();
                    uploadVO = fileUploadService.uploadStream(inputStream,originalFilename,fastdfs_file_url);
                    file1.delete();
                }
                return success("上传成功", uploadVO);
            }
            return success("上传成功", uploadVO);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("上传失败");
        }
    }
}

+ 82 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/radio/WlyyRadioEndpoint.java

@ -0,0 +1,82 @@
package com.yihu.jw.base.endpoint.radio;
import com.yihu.jw.base.service.radio.WlyyRadioService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * @author xyq
 * @create 2022-07-04 13:39
 * @slogan 他化自在,我自逍遥
 */
@RestController
@RequestMapping(value = "/raido/manager")
@Api(value = "收音机音频", description = "收音机音频管理接口", tags = {"wlyy基础服务 - 收音机音频管理接口"})
public class WlyyRadioEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private WlyyRadioService radioService;
    @ApiOperation(value = "分页获取收音机列表")
    @GetMapping( "/getRadioPage")
    public PageEnvelop getRadioPage(@ApiParam(name = "name",value = "名字搜索") @RequestParam(required = false) String name,
                                    @ApiParam(name = "frequency",value = "频率搜索") @RequestParam(required = false) String frequency,
                                    @ApiParam(name = "page",value = "页码") @RequestParam(required = false,defaultValue = "1")Integer page,
                                    @ApiParam(name = "pageSize",value = "每页大小") @RequestParam(required = false,defaultValue = "20")Integer pageSize){
        try {
            return radioService.getRadioPage(name, frequency, page, pageSize);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @ApiOperation(value = "修改收音机音频")
    @PostMapping("/updateRadio")
    public Envelop updateRadio(@ApiParam(name = "id",value = "id")@RequestParam(required = false) Long id,
                               @ApiParam(name = "name",value = "频道名称")@RequestParam String name,
                               @ApiParam(name = "frequency",value = "频率")@RequestParam String frequency,
                               @ApiParam(name = "introduction",value = "简介")@RequestParam(required = false) String introduction,
                               @ApiParam(name = "url",value = "播放地址")@RequestParam String url,
                               @ApiParam(name = "sortNum",value = "排序")@RequestParam(required = false,defaultValue = "1") Integer sortNum,
                               @ApiParam(name = "status",value = "1可用,0禁用")@RequestParam(required = false,defaultValue = "1") Integer status){
        try {
            return radioService.updateRadio(id,name, frequency, introduction, url, sortNum, status);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation(value = "新增收音机音频")
    @PostMapping("/addRadio")
    public Envelop addRadio(@ApiParam(name = "name",value = "频道名称")@RequestParam String name,
                           @ApiParam(name = "frequency",value = "频率")@RequestParam String frequency,
                           @ApiParam(name = "introduction",value = "简介")@RequestParam(required = false) String introduction,
                           @ApiParam(name = "url",value = "播放地址")@RequestParam String url,
                           @ApiParam(name = "sortNum",value = "排序")@RequestParam(required = false,defaultValue = "1") Integer sortNum,
                           @ApiParam(name = "status",value = "1可用,0禁用")@RequestParam(required = false,defaultValue = "1") Integer status){
        try {
            return radioService.updateRadio(null,name, frequency, introduction, url, sortNum, status);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation(value = "删除收音机音频")
    @PostMapping("/deleteRadio")
    public Envelop deleteRadio(@ApiParam(name = "id",value = "id")@RequestParam Long id){
        try {
            return radioService.deleteRadio(id);
        }catch (Exception e){
            return failedException2(e);
        }
    }
}

+ 201 - 142
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/role/MenuEndpoint.java

@ -48,13 +48,18 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
    public ObjEnvelop<MenuVO> create (
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        MenuDO menuDO = toEntity(jsonData, MenuDO.class);
        int count = menuService.isExistName(menuDO.getName());
        if(count>0){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Menu.NAME_IS_EXIST), ObjEnvelop.class);
        try {
            MenuDO menuDO = toEntity(jsonData, MenuDO.class);
            int count = menuService.isExistName(menuDO.getName());
            if(count>0){
                return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Menu.NAME_IS_EXIST), ObjEnvelop.class);
            }
            menuDO = menuService.addMenu(menuDO);
            return success(menuDO, MenuVO.class);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("操作失败");
        }
        menuDO = menuService.addMenu(menuDO);
        return success(menuDO, MenuVO.class);
    }
    @PostMapping(value = BaseRequestMapping.Menu.MOVE_DOWN)
@ -62,8 +67,13 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
    public Envelop moveDown(
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id) {
        menuService.moveDown(id);
        return success("修改成功");
        try {
            menuService.moveDown(id);
            return success("修改成功");
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("操作失败");
        }
    }
    @PostMapping(value = BaseRequestMapping.Menu.MOVE_UP)
@ -71,8 +81,13 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
    public Envelop moveUp(
            @ApiParam(name = "id", value = "id", required = true)
            @RequestParam(value = "id") String id) {
        menuService.moveUp(id);
        return success("修改成功");
        try {
            menuService.moveUp(id);
            return success("修改成功");
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("操作失败");
        }
    }
    @PostMapping(value = BaseRequestMapping.Menu.STATUS)
@ -82,8 +97,13 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
            @RequestParam(value = "id") String id,
            @ApiParam(name = "status", value = "1生效,0失效", required = true)
            @RequestParam(value = "status") Integer status) {
        menuService.updateStatus(id, status);
        return success("修改成功");
        try {
            menuService.updateStatus(id, status);
            return success("修改成功");
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("操作失败");
        }
    }
    @GetMapping(value = BaseRequestMapping.Menu.IS_NAME_EXIST)
@ -91,24 +111,34 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
    public ObjEnvelop isNameExist(
            @ApiParam(name = "name", value = "菜单名称", required = true)
            @RequestParam(value = "name") String name) {
        return success(menuService.isExistName(name));
        try {
            return success(menuService.isExistName(name));
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("操作失败");
        }
    }
    @PostMapping(value = BaseRequestMapping.Menu.UPDATE)
    @ApiOperation(value = "更新")
    public Envelop update (
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        MenuDO menuDO = toEntity(jsonData, MenuDO.class);
        if (null == menuDO.getId()) {
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Common.ID_IS_NULL), Envelop.class);
        }
        int count = menuService.isExistName(menuDO.getName());
        if(count>1){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Menu.NAME_IS_EXIST), ObjEnvelop.class);
            @RequestParam String jsonData){
        try {
            MenuDO menuDO = toEntity(jsonData, MenuDO.class);
            if (null == menuDO.getId()) {
                return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Common.ID_IS_NULL), Envelop.class);
            }
            int count = menuService.isExistName(menuDO.getName());
            if(count>1){
                return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Menu.NAME_IS_EXIST), ObjEnvelop.class);
            }
            menuDO = menuService.updateMenu(menuDO);
            return success(menuDO);
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("操作失败");
        }
        menuDO = menuService.updateMenu(menuDO);
        return success(menuDO);
    }
    @GetMapping(value = BaseRequestMapping.Menu.PAGE)
@ -123,31 +153,41 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<MenuDO> menuDOS = menuService.search(fields, filters, sorts, page, size);
        int count = (int)menuService.getCount(filters);
        return success(menuDOS, count, page, size, MenuVO.class);
            @RequestParam(value = "size") int size){
        try {
            List<MenuDO> menuDOS = menuService.search(fields, filters, sorts, page, size);
            int count = (int)menuService.getCount(filters);
            return success(menuDOS, count, page, size, MenuVO.class);
        }catch (Exception e){
            e.printStackTrace();
            return PageEnvelop.getError("获取失败");
        }
    }
    @GetMapping(value = BaseRequestMapping.Menu.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<MenuVO> list (
            @ApiParam(name = "id", value = "id")
            @RequestParam(value = "id", required = false) String id) throws Exception {
        String filters = "";
        if(StringUtils.isNotBlank(id)){
            filters = "parentId="+id+";";
        }
        List<MenuDO> menuDOS = menuService.search(null, filters, "+sort");
        MenuDO menuDO = menuService.findOne(id);
        menuDOS.forEach(menu -> {
            if(CommonContant.DEFAULT_PARENTID.equals(menu.getParentId())){
                menu.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                menu.setParentName(menuDO.getName());
            @RequestParam(value = "id", required = false) String id){
        try {
            String filters = "";
            if(StringUtils.isNotBlank(id)){
                filters = "parentId="+id+";";
            }
        });
        return success(menuDOS, MenuVO.class);
            List<MenuDO> menuDOS = menuService.search(null, filters, "+sort");
            MenuDO menuDO = menuService.findOne(id);
            menuDOS.forEach(menu -> {
                if(CommonContant.DEFAULT_PARENTID.equals(menu.getParentId())){
                    menu.setParentName(CommonContant.DEFAULT_PARENTNAME);
                }else {
                    menu.setParentName(menuDO.getName());
                }
            });
            return success(menuDOS, MenuVO.class);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
    @GetMapping(value = BaseRequestMapping.Menu.FIND_ALL)
@ -156,59 +196,69 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "status", value = "状态")
            @RequestParam(value = "status", required = false) String status,
            @ApiParam(name = "name", value = "名称")
            @RequestParam(value = "name", required = false) String name) throws Exception {
        String filters = "";
        if(StringUtils.isNotBlank(status)){
            filters = "status="+status+";";
        }
        if(StringUtils.isNotBlank(name)){
            filters += "name?"+name+";";
        }
        List<MenuDO> menuDOs = menuService.search(null, filters, "+sort");
        List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()), MenuVO.class);
        menuVOs.forEach(menuVO -> {
            if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                menuVO.setParentName(menuDO.getName());
            @RequestParam(value = "name", required = false) String name){
        try {
            String filters = "";
            if(StringUtils.isNotBlank(status)){
                filters = "status="+status+";";
            }
        });
        Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
        menuVOs.forEach(menu->{
            List<MenuVO> tmp = map.get(menu.getId());
            menu.setChildren(tmp);
        });
        if(StringUtils.isBlank(name)){
            menuVOs = menuVOs.stream()
                    .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                    .collect(Collectors.toList());
            if(StringUtils.isNotBlank(name)){
                filters += "name?"+name+";";
            }
            List<MenuDO> menuDOs = menuService.search(null, filters, "+sort");
            List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()), MenuVO.class);
            menuVOs.forEach(menuVO -> {
                if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                    menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
                }else {
                    MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                    menuVO.setParentName(menuDO.getName());
                }
            });
            Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
            menuVOs.forEach(menu->{
                List<MenuVO> tmp = map.get(menu.getId());
                menu.setChildren(tmp);
            });
            if(StringUtils.isBlank(name)){
                menuVOs = menuVOs.stream()
                        .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                        .collect(Collectors.toList());
            }
            return success(menuVOs);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
        return success(menuVOs);
    }
    @GetMapping(value = BaseRequestMapping.Menu.GET_TREE)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<MenuVO> getTree (
            @ApiParam(name = "status", value = "状态")
            @RequestParam(value = "status", required = false) String status) throws Exception {
        String filters = null;
        if(StringUtils.isNotBlank(status)){
            filters = "status="+status;
        }
        List<MenuDO> menuDOs = menuService.search(null, filters, null);
        List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()),MenuVO.class);
        Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
        menuVOs.forEach(menu->{
            List<MenuVO> tmp = map.get(menu.getId());
            menu.setChildren(tmp);
        });
        menuVOs = menuVOs.stream()
                .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                .collect(Collectors.toList());
            @RequestParam(value = "status", required = false) String status) {
        try {
            String filters = null;
            if(StringUtils.isNotBlank(status)){
                filters = "status="+status;
            }
            List<MenuDO> menuDOs = menuService.search(null, filters, null);
            List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()),MenuVO.class);
            Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
            menuVOs.forEach(menu->{
                List<MenuVO> tmp = map.get(menu.getId());
                menu.setChildren(tmp);
            });
            menuVOs = menuVOs.stream()
                    .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                    .collect(Collectors.toList());
        return success(menuVOs);
            return success(menuVOs);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
@ -220,48 +270,53 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "name", value = "名称")
            @RequestParam(value = "name", required = false) String name,
            @ApiParam(name = "roleId", value = "角色id")
            @RequestParam(value = "roleId", required = false)String roleId) throws Exception {
        String filters = "";
        if(StringUtils.isNotBlank(status)){
            filters = "status="+status+";";
        }
        if(StringUtils.isNotBlank(name)){
            filters += "name?"+name+";";
        }
        //获取所有选择树
        List<RoleMenuDO> roleMenus = roleMenuService.findRoleMenu(roleId);
        List<MenuDO> menuDOs = menuService.search(null, filters, "+sort");
        List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()), MenuVO.class);
        menuVOs.forEach(menuVO -> {
            if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                menuVO.setParentName(menuDO.getName());
            @RequestParam(value = "roleId", required = false)String roleId){
        try {
            String filters = "";
            if(StringUtils.isNotBlank(status)){
                filters = "status="+status+";";
            }
            //对比树是否被选择
            if(checkedTree(menuVO.getId(),roleMenus)){
                menuVO.setChecked(true);
            }else{
                menuVO.setChecked(false);
            if(StringUtils.isNotBlank(name)){
                filters += "name?"+name+";";
            }
        });
        Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
        menuVOs.forEach(menu->{
            List<MenuVO> tmp = map.get(menu.getId());
            menu.setChildren(tmp);
        });
        if(StringUtils.isBlank(name)){
            menuVOs = menuVOs.stream()
                    .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                    .collect(Collectors.toList());
            //获取所有选择树
            List<RoleMenuDO> roleMenus = roleMenuService.findRoleMenu(roleId);
            List<MenuDO> menuDOs = menuService.search(null, filters, "+sort");
            List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()), MenuVO.class);
            menuVOs.forEach(menuVO -> {
                if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                    menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
                }else {
                    MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                    menuVO.setParentName(menuDO.getName());
                }
                //对比树是否被选择
                if(checkedTree(menuVO.getId(),roleMenus)){
                    menuVO.setChecked(true);
                }else{
                    menuVO.setChecked(false);
                }
            });
            Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
            menuVOs.forEach(menu->{
                List<MenuVO> tmp = map.get(menu.getId());
                menu.setChildren(tmp);
            });
            if(StringUtils.isBlank(name)){
                menuVOs = menuVOs.stream()
                        .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                        .collect(Collectors.toList());
            }
            return success(menuVOs);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
        return success(menuVOs);
    }
    /**
@ -286,28 +341,32 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "获取角色登录菜单")
    public ListEnvelop<MenuVO> findLoginRoleMenuTree (
            @ApiParam(name = "roleId", value = "角色id")
            @RequestParam(value = "roleId", required = false)String roleId) throws Exception {
        List<MenuVO> menuVOs = roleMenuService.findMenuByRoleId(roleId);
        menuVOs.forEach(menuVO -> {
            if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                menuVO.setParentName(menuDO.getName());
            }
        });
            @RequestParam(value = "roleId", required = false)String roleId){
        try {
            List<MenuVO> menuVOs = roleMenuService.findMenuByRoleId(roleId);
            menuVOs.forEach(menuVO -> {
                if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                    menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
                }else {
                    MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                    menuVO.setParentName(menuDO.getName());
                }
            });
        Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
            Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
        menuVOs.forEach(menu->{
            List<MenuVO> tmp = map.get(menu.getId());
            menu.setChildren(tmp);
        });
        menuVOs = menuVOs.stream()
                .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                .collect(Collectors.toList());
            menuVOs.forEach(menu->{
                List<MenuVO> tmp = map.get(menu.getId());
                menu.setChildren(tmp);
            });
            menuVOs = menuVOs.stream()
                    .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                    .collect(Collectors.toList());
        return success(menuVOs);
            return success(menuVOs);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 147 - 68
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/user/UserEndpoint.java


+ 132 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/video/BaseVideoEndpoint.java

@ -0,0 +1,132 @@
package com.yihu.jw.base.endpoint.video;
import com.yihu.jw.base.service.video.BaseVideoGroupService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * @author xyq
 * @create 2022-07-04 16:18
 * @slogan 他化自在,我自逍遥
 */
@RestController
@RequestMapping(value = "/video/manager")
@Api(value = "视频栏目管理接口", description = "视频栏目管理接口", tags = {"wlyy基础服务 - 视频栏目管理接口"})
public class BaseVideoEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BaseVideoGroupService videoGroupService;
    @ApiOperation(value = "分页获取视频栏目")
    @GetMapping("/getVideoGroupPage")
    public PageEnvelop getVideoGroupPage(@ApiParam(name = "name",value = "栏目名字搜索")@RequestParam(required = false)String name,
                                         @ApiParam(name = "page",value = "页码") @RequestParam(required = false,defaultValue = "1")Integer page,
                                         @ApiParam(name = "pageSize",value = "每页大小") @RequestParam(required = false,defaultValue = "20")Integer pageSize){
        try {
            return videoGroupService.getVideoGroupPage(name, page, pageSize);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @ApiOperation(value = "修改视频栏目")
    @PostMapping("/updateVideoGroup")
    public Envelop updateVideoGroup(@ApiParam @RequestParam Long id,
                                    @ApiParam(name = "name",value = "栏目名称") @RequestParam String name,
                                    @ApiParam(name = "sortNum",value = "栏目排序")@RequestParam(required = false,defaultValue = "1")Integer sortNum,
                                    @ApiParam(name = "status",value = "1可用,0禁用")@RequestParam(required = false,defaultValue = "1")Integer status){
        try {
            return videoGroupService.updateVideoGroup(id, name, sortNum, status);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation(value = "新增视频栏目")
    @PostMapping("/addVideoGroup")
    public Envelop addVideoGroup(@ApiParam(name = "name",value = "栏目名称") @RequestParam String name,
                                    @ApiParam(name = "sortNum",value = "栏目排序")@RequestParam(required = false,defaultValue = "1")Integer sortNum,
                                    @ApiParam(name = "status",value = "1可用,0禁用")@RequestParam(required = false,defaultValue = "1")Integer status){
        try {
            return videoGroupService.updateVideoGroup(null, name, sortNum, status);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation(value = "删除视频栏目")
    @PostMapping("/deleteVideoGroup")
    public Envelop deleteVideoGroup(@ApiParam @RequestParam Long id){
        try {
            return videoGroupService.deleteVideoGroup(id);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation("分页获取视频列表")
    @GetMapping("/getVideoPage")
    public PageEnvelop getVideoPage(@ApiParam(name = "title",value = "视频标题")@RequestParam(required = false) String title,
                                    @ApiParam(name = "type",value = "栏目id")@RequestParam(required = false)Integer type,
                                    @ApiParam(name = "page",value = "页码") @RequestParam(required = false,defaultValue = "1")Integer page,
                                    @ApiParam(name = "pageSize",value = "每页大小") @RequestParam(required = false,defaultValue = "20")Integer pageSize){
        try {
            return videoGroupService.getVideoPage(title, type, page, pageSize);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @ApiOperation("修改视频")
    @PostMapping("/updateVideo")
    public Envelop updateVideo(@ApiParam @RequestParam String id,
                               @ApiParam(name = "type",value = "栏目id")@RequestParam Integer type,
                               @ApiParam(name = "title",value = "视频标题")@RequestParam String title,
                               @ApiParam(name = "url",value = "视频播放地址")@RequestParam String url,
                               @ApiParam(name = "img",value = "封面图片")@RequestParam(required = false) String img,
                               @ApiParam(name = "introduction",value = "简介")@RequestParam(required = false)String introduction,
                               @ApiParam(name = "sortNum",value = "排序")@RequestParam(required = false,defaultValue = "1")Integer sortNum,
                               @ApiParam(name = "status",value = "1可用,0禁用")@RequestParam(required = false,defaultValue = "1")Integer status){
        try {
            return videoGroupService.updateVideo(id, type, title, url, img, introduction, sortNum, status);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation("新增视频")
    @PostMapping("/addVideo")
    public Envelop addVideo(@ApiParam(name = "type",value = "栏目id")@RequestParam Integer type,
                               @ApiParam(name = "title",value = "视频标题")@RequestParam String title,
                               @ApiParam(name = "url",value = "视频播放地址")@RequestParam String url,
                               @ApiParam(name = "img",value = "封面图片")@RequestParam(required = false) String img,
                               @ApiParam(name = "introduction",value = "简介")@RequestParam(required = false)String introduction,
                               @ApiParam(name = "sortNum",value = "排序")@RequestParam(required = false,defaultValue = "1")Integer sortNum,
                               @ApiParam(name = "status",value = "1可用,0禁用")@RequestParam(required = false,defaultValue = "1")Integer status){
        try {
            return videoGroupService.updateVideo(null, type, title, url, img, introduction, sortNum, status);
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @ApiOperation("删除视频")
    @RequestMapping(value = "/deleteVideo",method = RequestMethod.POST)
    public Envelop deleteVideo(@ApiParam(name = "id",value = "视频id")@RequestParam String id){
        try {
            return videoGroupService.deleteVideo(id);
        }catch (Exception e){
            return failedException2(e);
        }
    }
}

+ 350 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/ManageMessagePush/ManageSystemPushMessageService.java

@ -0,0 +1,350 @@
package com.yihu.jw.base.service.ManageMessagePush;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yihu.jw.base.dao.log.BasePatientPadPushOnOffDao;
import com.yihu.jw.base.dao.log.BasePushRecordLogDao;
import com.yihu.jw.base.dao.log.BasePushrecordLogInfoDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.entity.log.BasePatientPadPushOnOffEntity;
import com.yihu.jw.entity.log.BasePushRecordLogEntity;
import com.yihu.jw.entity.log.BasePushrecordLogInfoEntity;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
 * Created by wsl on 2022/7/4
 */
@Service
public class ManageSystemPushMessageService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private SystemMessageDao systemMessageDao;
    @Autowired
    private BasePushRecordLogDao basePushRecordLogDao;
    @Autowired
    private BasePushrecordLogInfoDao basePushrecordLogInfoDao;
    @Autowired
    private BasePatientPadPushOnOffDao basePatientPadPushOnOffDao;
    @Autowired
    private WlyyHospitalSysDictDao dictDao;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private ImUtil imUtil;
    /*   SELECT p.id,p.name  FROM base_patient p INNER JOIN wlyy_patient_device d ON p.id = d.`user`
    WHERE p.sign_status = 0 AND p.del = 1 AND d.del = 0 AND p.id NOT IN ( SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' OR dict_name = 'jkzl_child' )*/
    /**
     * 获取签约老人
     * @param name
     */
    public List<BasePatientDO> signOlds(String name) {
        String sql = "SELECT p.id,p.`name`,p.sex FROM  base_patient p " +
                " WHERE  p.sign_status = 1 AND p.del = 1  ";
        if (StringUtils.isNotBlank(name)) {
            sql += "and p.name like '%" + name + "%'";
        }
        sql += " AND p.id NOT IN ( SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' OR dict_name = 'jkzl_child' )";
        List<BasePatientDO> basePatientDOS = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(BasePatientDO.class));
        return basePatientDOS;
    }
    /**
     * 新增消息推送
     *
     * @param content  自定义内容
     * @param pushObjectType  推送对象类型 1签约老人 2部分签约老人
     * @param pushObjectJson 推送对象
     * @param pushDateType  推送时间 1立即推送 2定时推送
     * @param pushDate
     */
    @Transactional(rollbackFor = Exception.class)
    public void addPushMessage(String content, Integer pushObjectType, String pushObjectJson, Integer pushDateType, String pushDate,Integer addType,String pushId) {
        BasePushRecordLogEntity basePushRecordLogEntity = new BasePushRecordLogEntity();
        List<BasePatientDO> basePatientDOS = null;
        List<BasePushrecordLogInfoEntity> basePushrecordLogInfoEntityList = new ArrayList<>();
        Date date =DateUtil.strToDate(pushDate);
        if (null!=addType&&addType==2) {
            BasePushRecordLogEntity one = basePushRecordLogDao.findOne(pushId);
            if (one.getStatus()!=1) {
                basePushRecordLogDao.delete(pushId);
                basePushrecordLogInfoDao.deleteByPushId(pushId);
            }
        }
        //判断发送对象类型  1签约老人  2 部分签约老人
        if (1 == pushObjectType) {
            basePatientDOS = signOlds("");
            basePushRecordLogEntity.setSendObjectType(1);
            basePushRecordLogEntity.setSendObject("签约老人");
        }else {
            basePatientDOS = JSONObject.parseArray(pushObjectJson, BasePatientDO.class);
            basePushRecordLogEntity.setSendObjectType(2);
            String s = nameStringHandle(basePatientDOS);
            basePushRecordLogEntity.setSendObject(s);
        }
        Integer status ;
        //判断 1立即发送   2定时发送
        if (1==pushDateType) {
            SystemMessageDOListSave(basePatientDOS,content);
            basePushRecordLogEntity.setStatus(1);
            basePushRecordLogEntity.setSendTime(new Date());
            basePushRecordLogEntity.setPushType("1");
            status = 1;
        }else{
            basePushRecordLogEntity.setSendTime(date);
            basePushRecordLogEntity.setStatus(0);
            basePushRecordLogEntity.setPushType("2");
            status = 0;
        }
        //创建定时任务记录
        for (BasePatientDO logInfoDO : basePatientDOS) {
            String data = content;
            if (StringUtils.containsIgnoreCase(content,"【姓名】"))data = data.replace("【姓名】",logInfoDO.getName());
            if (StringUtils.containsIgnoreCase(content,"【称谓】"))data = data.replace("【称谓】",logInfoDO.getSex()==1?"大爷":"大妈");
            BasePushrecordLogInfoEntity basePushrecordLogInfoEntity = new BasePushrecordLogInfoEntity();
            basePushrecordLogInfoEntity.setPatient(logInfoDO.getId());
            basePushrecordLogInfoEntity.setPatientName(logInfoDO.getName());
            basePushrecordLogInfoEntity.setContent(data);
            basePushrecordLogInfoEntity.setStatus(status);
            basePushrecordLogInfoEntity.setSendTime(date);
            basePushrecordLogInfoEntityList.add(basePushrecordLogInfoEntity);
        }
        //日志保存
        //basePushRecordLogEntity.setId(UUID.randomUUID().toString().replace("-", ""));
        basePushRecordLogEntity.setContent(content);
        basePushRecordLogEntity.setNum(basePatientDOS.size());
        basePushRecordLogEntity.setMessageType(1);
        basePushRecordLogDao.save(basePushRecordLogEntity);
        if (null!=basePushrecordLogInfoEntityList&&basePushrecordLogInfoEntityList.size()>0) {
            basePushrecordLogInfoEntityList.forEach(basePushLogInfoEntity -> basePushLogInfoEntity.setPushId(basePushRecordLogEntity.getId()));
            basePushrecordLogInfoDao.save(basePushrecordLogInfoEntityList);
        }
    }
    //获取列表
    public JSONObject pushMessageList(Integer messageType,Integer status,String name,Integer page,Integer pageSize){
        JSONObject result = new JSONObject();
        if(page==null){
            page = 1;
        }
        if(pageSize==null){
            pageSize = 10;
        }
        String sql = "SELECT * FROM base_pushrecord_log where 1=1 ";
        String countSql = "Select  count(id) from base_pushrecord_log where 1=1 ";
        String filiteSql = " ";
        String orderSql = " ";
        if(null!=messageType){
            filiteSql +=" and message_type ='"+messageType+"' ";
        }
        if (null!=status) {
            filiteSql +=" and status = '"+status+"'";
        }
        if (StringUtils.isNotBlank(name)){
            filiteSql +=" and  send_object like '%"+name+"%'";
        }
        orderSql = " ORDER BY send_time DESC LIMIT  " + (page - 1) * pageSize + "," + pageSize + "";
        List<BasePushRecordLogEntity> entityList = jdbcTemplate.query(sql + filiteSql + orderSql, new BeanPropertyRowMapper<>(BasePushRecordLogEntity.class));
        result.put("obj",entityList);
        Integer count = jdbcTemplate.queryForObject(countSql + filiteSql, Integer.class);
        result.put("count",count);
        if (entityList.size()>0) {
            for (BasePushRecordLogEntity logEntity : entityList) {
                String patientListSql = "select patient from base_pushrecord_log_info where push_id = '"+logEntity.getId()+"'";
                List<String> list = jdbcTemplate.queryForList(patientListSql, String.class);
                logEntity.setPatientList(list);
            }
        }
        return result;
    }
    //删除
    @Transactional(rollbackFor = Exception.class)
    public void delPushMessageLog(String id){
        basePushRecordLogDao.delete(id);
    }
    //初始化居民推送开关
    @Transactional(rollbackFor = Exception.class)
    public String patientPushOnOff(){
        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        jsonObject.put("1","时间整点报时");
        jsonArray.add(jsonObject);
        jsonObject.put("2","智能安居设备状态播报(必选)");
        jsonArray.add(jsonObject);
        jsonObject.put("3","体征测量消息");
        jsonArray.add(jsonObject);
        jsonObject.put("4","用药提醒");
        jsonArray.add(jsonObject);
        jsonObject.put("5","天气预报");
        jsonArray.add(jsonObject);
        jsonObject.put("6","服务预约提醒");
        jsonArray.add(jsonObject);
        jsonObject.put("7","生日祝福提醒");
        jsonArray.add(jsonObject);
        jsonObject.put("8","热点新闻播报");
        jsonArray.add(jsonObject);
        String sql = "SELECT p.id FROM  base_patient p WHERE  p.sign_status = 1 AND p.del = 1  ";
        List<String> patientList = jdbcTemplate.queryForList(sql, String.class);
        List<BasePatientPadPushOnOffEntity> onOffEntityList = new ArrayList<>();
        patientList.forEach(patientId -> {
            for (int i = 1; i <= jsonArray.size(); i++) {
                BasePatientPadPushOnOffEntity onOffEntity = new BasePatientPadPushOnOffEntity();
                onOffEntity.setPatient(patientId);
                onOffEntity.setType(i);
                onOffEntity.setTypeName(jsonArray.getJSONObject(0).getString(i+""));
                if (jsonArray.getJSONObject(0).getString(i+"").equals("智能安居设备状态播报(必选)")){
                    onOffEntity.setOnOff(1);
                }else {
                    onOffEntity.setOnOff(0);
                }
                onOffEntity.setCreateTime(new Date());
                onOffEntityList.add(onOffEntity);
            }
        });
        
        basePatientPadPushOnOffDao.save(onOffEntityList);
        return null;
    }
    //推送开关修改
    public void pushOnOff(String id,String dictName,String pyCode) {
        dictDao.updatePyCode(pyCode,id,dictName);
    }
    private void SystemMessageDOListSave(List<BasePatientDO> basePatientDOS,String content){
        List<SystemMessageDO> messageDOS = new ArrayList<>();
        for (BasePatientDO basePatientDO : basePatientDOS) {
            String data = content;
            if (StringUtils.containsIgnoreCase(content,"【姓名】"))data = data.replace("【姓名】",basePatientDO.getName());
            if (StringUtils.containsIgnoreCase(content,"【称谓】"))data = data.replace("【称谓】",basePatientDO.getSex()==1?"大爷":"大妈");
            SystemMessageDO systemMessageDO = new SystemMessageDO();
            systemMessageDO.setId(UUID.randomUUID().toString().replace("-", ""));
            systemMessageDO.setTitle("系统消息推送");
            systemMessageDO.setType("999");
            systemMessageDO.setIsRead("0");
            systemMessageDO.setSender("system");
            systemMessageDO.setSenderName("系统推送助手");
            systemMessageDO.setReceiver(basePatientDO.getId());
            systemMessageDO.setReceiverName(basePatientDO.getName());
            systemMessageDO.setContent(data);
            systemMessageDO.setOver("1");
            systemMessageDO.setDel("1");
            systemMessageDO.setCreateTime(new Date());
            systemMessageDO.setAudioUrl(audioUrl(data));
            messageDOS.add(systemMessageDO);
            patientMessageSocket(systemMessageDO);
        }
        systemMessageDao.save(messageDOS);
    }
    //处理名字
    private String  nameStringHandle(List<BasePatientDO> basePatientDOS){
        String names = "";
        for (int i = 0; i < basePatientDOS.size(); i++) {
            BasePatientDO basePatientDO = basePatientDOS.get(i);
            String s = i == basePatientDOS.size()-1 ? "" : ",";
            names += basePatientDO.getName()+ s;
        }
        return names;
    }
    //腾讯语音
    private String audioUrl(String content){
        ResponseEntity<String> forEntity = restTemplate.getForEntity("http://svr-cloud-care/common/open/wordToVoice?text={1}", String.class, content);
        JSONObject jsonObject = JSONObject.parseObject(forEntity.getBody());
        if (jsonObject.getInteger("status") == 200){
            return jsonObject.getString("message");
        }else {
            return null;
        }
    }
    //SOCKET
    private void patientMessageSocket(SystemMessageDO messageDOWatch){
        JSONObject message = new JSONObject();
        message.put("title",messageDOWatch.getTitle());
        message.put("type",messageDOWatch.getType());
        message.put("content",messageDOWatch.getContent());
        message.put("audioUrl",messageDOWatch.getAudioUrl());
        message.put("content_type",999);
        imUtil.sendPatientSystemMessage(messageDOWatch.getReceiver(), JSON.toJSONString(message, SerializerFeature.WriteMapNullValue));
    }
}

+ 94 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/child/ChildManageService.java

@ -0,0 +1,94 @@
package com.yihu.jw.base.service.child;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.dao.childManage.BaseChildManageDao;
import com.yihu.jw.entity.child.BaseChildManage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by wsl on 2022/7/20
 */
@Service
public class ChildManageService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BaseChildManageDao baseChildManageDao;
    //获取
    public JSONObject getChildManageList(Integer type,Integer page,Integer pageSize,String title,String orgCode,String id){
        JSONObject jsonObject = new JSONObject();
        String sql = "select * from base_child_manage where  1=1 and type = "+type+" ";
        String totalSql = "select count(id) total from base_child_manage where 1=1 and type = "+type+" ";
        String commonSql = "";
        if(page==null){
            page = 1;
        }
        if(pageSize==null){
            pageSize = 10;
        }
        if (StringUtils.isNotBlank(id)) {
            commonSql += "and id = '"+id+"' ";
        }
        if (StringUtils.isNotBlank(title)){
            commonSql += " and title like '%"+title+"%' ";
        }
        if (StringUtils.isNotBlank(orgCode)){
            commonSql +=  " and org = '"+orgCode+"' ";
        }
        commonSql +=  "ORDER BY create_time DESC LIMIT  " + (page - 1) * pageSize + "," + pageSize + "";
        List<BaseChildManage> baseChildManage = jdbcTemplate.query(sql+commonSql, new BeanPropertyRowMapper<>(BaseChildManage.class));
        Integer total = jdbcTemplate.queryForObject(totalSql + commonSql, Integer.class);
        jsonObject.put("obj",baseChildManage);
        jsonObject.put("total",total);
        return jsonObject;
    }
    //新增修改
    @Transactional(rollbackFor = Exception.class)
    public void saveOrUpdate(String jsonData){
        BaseChildManage baseChildManage = JSONObject.parseObject(jsonData, BaseChildManage.class);
        if (baseChildManage.getCreateTime()==null) {
            baseChildManage.setCreateTime(new Date());
        }
        if (baseChildManage.getType()==2&&baseChildManage.getClick()==null) {
            baseChildManage.setClick(0);
        }
        baseChildManageDao.save(baseChildManage);
    }
    //删除信息
    @Transactional(rollbackFor = Exception.class)
    public void deletinfo(String id){
        baseChildManageDao.delete(id);
    }
    public List<Map<String, Object>> childOrgList(){
        String sql = "SELECT code,name  FROM base_org WHERE type = '4' AND del = 1";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
}

+ 59 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/device/DeviceManageService.java

@ -4,21 +4,29 @@ import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.base.dao.device.DeviceDao;
import com.yihu.jw.base.dao.device.DeviceDetailDao;
import com.yihu.jw.base.util.HttpClientUtilCare;
import com.yihu.jw.entity.care.device.Device;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.mysql.query.BaseJpaService;
import jxl.Workbook;
import jxl.write.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.io.IOException;
import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 * Created by Bing on 2021/9/22.
@ -208,4 +216,54 @@ public class DeviceManageService extends BaseJpaService<DeviceDetail,DeviceDetai
    }
    @Autowired
    private HttpClientUtilCare httpClientUtil;
    @Autowired
    private StringRedisTemplate redisTemplate;
    public static final String baseUrl = "http://api.aiqiangua.com:8888";// 正式环境
    public static final String deviceInfo = baseUrl +"/api/device/{0}";
    private static final String username = "13559485270";
    private static final String password = "zjxl@2021";
    private static final String redisKey = "aqgCooker";
    private static final String login = baseUrl +"/api/auth/login";
    private static final Long overTime = 23L;
    public com.alibaba.fastjson.JSONObject getAqgDeviceInfo2(String imei){
        synchronized (imei.intern()){
            try {
                String url = MessageFormat.format(deviceInfo, imei);
                HttpEntity<JSONObject> response = httpClientUtil.aqgCookieHttp(url, null, HttpMethod.GET, getCookie());
                com.alibaba.fastjson.JSONObject json = response.getBody();
                if(!json.getBoolean("success")){
                    return  null;
                }
                return json.getJSONObject("obj");
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
    }
    /**
     * 获取爱牵挂管理员cookie
     */
    public synchronized String getCookie(){
        if(redisTemplate.hasKey(redisKey)){
            return redisTemplate.opsForValue().get(redisKey);
        }
        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
        param.add("username",username);
        param.add("password",password);
        HttpEntity<com.alibaba.fastjson.JSONObject> response = httpClientUtil.cookiePostHttp(login,param);
        HttpHeaders responseHeaders = response.getHeaders();
        String cookie =  responseHeaders.get("Set-Cookie").get(0);
        redisTemplate.opsForValue().set(redisKey,cookie,overTime, TimeUnit.HOURS);
        return cookie;
    }
}

+ 3 - 3
svr/svr-base/src/main/java/com/yihu/jw/base/service/lifeCare/LifeCareService.java

@ -36,7 +36,7 @@ public class LifeCareService {
                ",GROUP_CONCAT( DISTINCT dict.org_name SEPARATOR ',' ) AS orgName FROM " +
                "base_life_care_item_dict dict INNER JOIN base_org org ON dict.org_code = org.CODE WHERE  org.del = 1" ;
        String sqlCount = " select count(dict.id) from base_life_care_item_dict dict INNER JOIN base_org org on dict.org_code = org.code  where  org.del=1  ";
        String sqlCount = " select count(dict.id) AS size  from base_life_care_item_dict dict INNER JOIN base_org org on dict.org_code = org.code  where  org.del=1  GROUP BY dict.`code`  ";
        String filter = " ";
        if (StringUtils.isNotBlank(orgName)){
            filter +=" and org.name like '%"+orgName+"%' ";
@ -44,7 +44,7 @@ public class LifeCareService {
        if (StringUtils.isNotBlank(itemName)){
            filter +=" and dict.name like '%"+itemName+"%' ";
        }
        Long count = jdbcTemplate.queryForObject(sqlCount+filter,Long.class);
        List<Map<String, Object>> conuntList = jdbcTemplate.queryForList(sqlCount + filter);
        filter +=" GROUP BY dict.`code` ";
@ -53,7 +53,7 @@ public class LifeCareService {
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filter);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,Long.parseLong(conuntList.size()+""));
    }
    @Transactional(rollbackFor = Exception.class)

+ 99 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/radio/WlyyRadioService.java

@ -0,0 +1,99 @@
package com.yihu.jw.base.service.radio;
import com.yihu.jw.base.dao.radio.WlyyRadioDao;
import com.yihu.jw.entity.care.radio.WlyyRadioDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author xyq
 * @create 2022-07-04 13:43
 * @slogan 他化自在,我自逍遥
 */
@Service
public class WlyyRadioService extends BaseJpaService<WlyyRadioDO, WlyyRadioDao> {
    @Autowired
    private WlyyRadioDao radioDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 分页条件查询收音机列表
     * @param name
     * @param frequency
     * @param page
     * @param pageSize
     * @return
     */
    public PageEnvelop getRadioPage(String name,String frequency,Integer page,Integer pageSize){
        page = page>0?page-1:0;
        String colSql = "SELECT id,name,frequency,introduction,url,sort_num sortNum, " +
                " CAST(DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') as char) createTime,CAST(status as UNSIGNED) status ";
        String sql = " from wlyy_radio " +
                " where 1 = 1 ";
        if(StringUtils.isNotBlank(name)){
            sql += " and name like '%"+name+"%' ";
        }
        if(StringUtils.isNotBlank(frequency)){
            sql += " and frequency like '%"+frequency+"%' ";
        }
        String orderSql = " order by sort_num desc limit "+page*pageSize+","+pageSize;
        List<Map<String, Object>> list = jdbcTemplate.queryForList(colSql+sql+orderSql);
        String countSql = "SELECT count(*) ";
        Long count = jdbcTemplate.queryForObject(countSql+sql, Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }
    /**
     * 修改收音机
     * @param name
     * @param frequency
     * @param introduction
     * @param url
     * @param sortNum
     * @param status
     * @return
     */
    public Envelop updateRadio(Long id,String name,String frequency,String introduction,String url,Integer sortNum,Integer status){
        if(StringUtils.isBlank(name) || StringUtils.isBlank(frequency) || StringUtils.isBlank(url)){
            return Envelop.getError("必填字段不能为空");
        }
        WlyyRadioDO radio = new WlyyRadioDO();
        if(id != null){
            radio.setId(id);
        }
        radio.setName(name);
        radio.setFrequency(frequency);
        radio.setIntroduction(introduction);
        radio.setUrl(url);
        radio.setSortNum(sortNum);
        radio.setCreateTime(new Date());
        radio.setStatus(status);
        radioDao.save(radio);
        return Envelop.getSuccess("保存成功");
    }
    /**
     * 删除收音机
     * @param id
     * @return
     */
    public Envelop deleteRadio(Long id){
        WlyyRadioDO byId = radioDao.findById(id);
        if(byId != null){
            radioDao.delete(byId);
        }
        return Envelop.getSuccess("删除成功");
    }
}

+ 169 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/video/BaseVideoGroupService.java

@ -0,0 +1,169 @@
package com.yihu.jw.base.service.video;
import com.yihu.jw.base.dao.video.BaseVideoDao;
import com.yihu.jw.base.dao.video.BaseVideoGroupDao;
import com.yihu.jw.entity.care.video.BaseVideoDO;
import com.yihu.jw.entity.care.video.BaseVideoGroupDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author xyq
 * @create 2022-07-04 16:16
 * @slogan 他化自在,我自逍遥
 */
@Service
public class BaseVideoGroupService extends BaseJpaService<BaseVideoGroupDO, BaseVideoGroupDao> {
    @Autowired
    private BaseVideoDao videoDao;
    @Autowired
    private BaseVideoGroupDao videoGroupDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 分页获取视频栏目列表
     * @param name
     * @param page
     * @param pageSize
     * @return
     */
    public PageEnvelop getVideoGroupPage(String name,Integer page,Integer pageSize){
        page = page>0?page-1:0;
        String colSql = "SELECT id,name,sort_num sortNum,CAST(status AS UNSIGNED) status,CAST(DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') as char) createTime ";
        String countSql = "select count(*) ";
        String sql = " from base_video_group where 1 = 1 ";
        if(StringUtils.isNotBlank(name)){
            sql += " and name like '%"+name+"%' ";
        }
        String orderSql = " ORDER BY sort_num desc limit "+page*pageSize+","+pageSize;
        List<Map<String, Object>> list = jdbcTemplate.queryForList(colSql + sql + orderSql);
        Long count = jdbcTemplate.queryForObject(countSql + sql, Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }
    /**
     * 修改视频栏目
     * @param id
     * @param name
     * @param sortNum
     * @param status
     * @return
     */
    public Envelop updateVideoGroup(Long id,String name,Integer sortNum,Integer status){
        if(StringUtils.isBlank(name)){
            return Envelop.getError("栏目名称不能为空");
        }
        BaseVideoGroupDO videoGroupDO = new BaseVideoGroupDO();
        if(id != null){
            videoGroupDO.setId(id);
        }
        videoGroupDO.setName(name);
        videoGroupDO.setSortNum(sortNum);
        videoGroupDO.setStatus(status);
        videoGroupDO.setCreateTime(new Date());
        videoGroupDao.save(videoGroupDO);
        return Envelop.getSuccess("保存成功");
    }
    /**
     * 删除视频栏目
     * @param id
     * @return
     */
    public Envelop deleteVideoGroup(Long id){
        String sql = "SELECT count(v.id) count FROM base_video v INNER JOIN base_video_group g ON v.type = g.id WHERE g.id = '"+id+"' ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        if (Integer.parseInt(list.get(0).get("count").toString())>0){
        return Envelop.getError("该栏目下面存在视频,请勿删除!",500);
        }
        BaseVideoGroupDO byId = videoGroupDao.findById(id);
        if(byId != null){
            videoGroupDao.delete(byId);
        }
        return Envelop.getSuccess("删除成功");
    }
    /**
     * 分页获取视频列表
     * @param title
     * @param type
     * @param page
     * @param pageSize
     * @return
     */
    public PageEnvelop getVideoPage(String title,Integer type,Integer page,Integer pageSize){
        page = page>0?page-1:0;
        String colSql = "SELECT v.id,v.type,v.title,v.url,v.img,CAST(DATE_FORMAT(v.create_time,'%Y-%m-%d %H:%i:%S') as char) createTime, " +
                " v.introduction,v.sort_num sortNum,CAST(v.status as UNSIGNED) status,g.name ";
        String countSql = "SELECT count(*) ";
        String fromSql = " from base_video v left join base_video_group g on v.type = g.id where 1 = 1 ";
        if(StringUtils.isNotBlank(title)){
            fromSql += " and v.title like '%"+title+"%' ";
        }
        if(type != null && type > 0){
            fromSql += " and v.type = "+type;
        }
        Long count = jdbcTemplate.queryForObject(countSql + fromSql, Long.class);
        fromSql += " order by v.sort_num,v.create_time desc limit "+page*pageSize+","+pageSize;
        List<Map<String, Object>> list = jdbcTemplate.queryForList(colSql + fromSql);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }
    /**
     * 修改视频信息
     * @param id
     * @param type
     * @param title
     * @param url
     * @param img
     * @param introduction
     * @param sortNum
     * @param status
     * @return
     */
    public Envelop updateVideo(String id,Integer type,String title,String url,String img,String introduction,Integer sortNum,Integer status){
        if(StringUtils.isBlank(title) || type == null || StringUtils.isBlank(url)){
            return Envelop.getError("必填参数不能为空");
        }
        BaseVideoDO videoDO = new BaseVideoDO();
        if(StringUtils.isNotBlank(id)){
            videoDO.setId(id);
        }
        videoDO.setTitle(title);
        videoDO.setType(type.toString());
        videoDO.setUrl(url);
        videoDO.setImg(img);
        videoDO.setIntroduction(introduction);
        videoDO.setSortNum(sortNum);
        videoDO.setStatus(status);
        videoDO.setCreateTime(new Date());
        videoDao.save(videoDO);
        return Envelop.getSuccess("保存成功");
    }
    /**
     * 删除视频
     * @param id
     * @return
     */
    public Envelop deleteVideo(String id){
        BaseVideoDO video = videoDao.findOne(id);
        if(video != null){
            videoDao.delete(video);
        }
        return Envelop.getSuccess("删除成功");
    }
}

+ 687 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/HttpClientUtilCare.java

@ -0,0 +1,687 @@
package com.yihu.jw.base.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@Component
public class HttpClientUtilCare {
    /**
     * 发送post请求
     *
     * @param url     请求地址
     * @param params  请求参数
     * @param chatSet 编码格式
     * @return
     */
    public  String post(String url, List<NameValuePair> params, String chatSet) {
        // 创建默认的httpClient实例.
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // 创建httppost
        HttpPost httppost = new HttpPost(url);
        UrlEncodedFormEntity uefEntity;
        try {
            uefEntity = new UrlEncodedFormEntity(params, chatSet);
            httppost.setEntity(uefEntity);
            CloseableHttpResponse response = httpclient.execute(httppost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, chatSet);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * 发送get请求
     *
     * @param url     请求地址
     * @param chatSet 编码格式
     * @return
     */
    public  String get(String url, String chatSet) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            // 创建httpget.
            HttpGet httpget = new HttpGet(url);
            // 执行get请求.
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 获取响应实体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, chatSet);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            System.out.println(e.getClass()+"1");
            e.printStackTrace();
        } catch (ParseException e) {
            System.out.println(e.getClass()+"2");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println(e.getClass()+"3");
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public  String get(String url,List<NameValuePair> params, String chatSet) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            // 创建httpget.
            String entityString = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
            HttpGet httpget = new HttpGet(url+"?"+entityString);
            // 执行get请求.
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 获取响应实体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, chatSet);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * http调用方法,(健康之路开放平台)
     *
     * @param url
     * @param params
     * @return
     * @throws Exception
     */
    public static String httpPost(String url, Map<String, String> params) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpPost httpPost = new HttpPost(url);
            if (params != null && params.size() > 0) {
                List<NameValuePair> valuePairs = new ArrayList<NameValuePair>(params.size());
                for (Map.Entry<String, String> entry : params.entrySet()) {
                    NameValuePair nameValuePair = new BasicNameValuePair(entry.getKey(), String.valueOf(entry.getValue()));
                    valuePairs.add(nameValuePair);
                }
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(valuePairs, "UTF-8");
                httpPost.setEntity(formEntity);
            }
            CloseableHttpResponse resp = httpclient.execute(httpPost);
            try {
                HttpEntity entity = resp.getEntity();
                String respContent = EntityUtils.toString(entity, "UTF-8").trim();
                return respContent;
            } finally {
                resp.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            httpclient.close();
        }
    }
    /**
     * 获取加密后参数集合(健康之路开放平台)
     *
     * @param params
     * @return
     */
    public  Map<String, String> getSecretParams(Map<String, String> params, String appId, String secret) {
        String timestamp = Long.toString(System.currentTimeMillis());
        params.put("timestamp", timestamp);
        StringBuilder stringBuilder = new StringBuilder();
        // 对参数名进行字典排序  
        String[] keyArray = params.keySet().toArray(new String[0]);
        Arrays.sort(keyArray);
        // 拼接有序的参数名-值串  
        stringBuilder.append(appId);
        for (String key : keyArray) {
            stringBuilder.append(key).append(params.get(key));
        }
        String codes = stringBuilder.append(secret).toString();
        String sign = org.apache.commons.codec.digest.DigestUtils.shaHex(codes).toUpperCase();
        // 添加签名,并发送请求  
        params.put("appId", appId);
        params.put("sign", sign);
        return params;
    }
    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url
     *            发送请求的 URL带上参数
     * @param param
     *            POST参数。
     * @return 所代表远程资源的响应结果
     */
    public static  String sendPost(String url, String param) {
        StringBuffer buffer = new StringBuffer();
        PrintWriter out = null;
        BufferedReader in = null;
        HttpURLConnection conn = null;
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            osw.write(param.toString());
            osw.flush();
            // 读取返回内容
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String temp;
            while ((temp = br.readLine()) != null) {
                buffer.append(temp);
                buffer.append("\n");
            }
        } catch (Exception e) {
           e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return buffer.toString();
    }
    
    public static   String postBody(String url, JSONObject params) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        org.springframework.http.HttpEntity<String> formEntity = new org.springframework.http.HttpEntity<String>(params.toString(), headers);
        String ret = restTemplate.postForObject(url, formEntity, String.class);
        return ret;
    }
    public static String postBodyHead(String url, JSONObject params, Map<String, Object> headerMap) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        for(String str:headerMap.keySet()){
            headers.add(str,headerMap.get(str).toString());
        }
        org.springframework.http.HttpEntity<String> formEntity = new org.springframework.http.HttpEntity<String>(params.toString(), headers);
        String ret = restTemplate.postForObject(url, formEntity, String.class);
        return ret;
    }
    
    public  void putBody(String url, JSONObject params) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        org.springframework.http.HttpEntity<String> formEntity = new org.springframework.http.HttpEntity<String>(params.toString(), headers);
        restTemplate.put(url, formEntity, String.class);
    }
    /**
     * 发送post请求
     *
     * @param url     请求地址
     * @param params  请求参数
     * @param chatSet 编码格式
     * @param headerMap 请求头
     * @return
     */
    public  String headerPost(String url, List<NameValuePair> params, String chatSet, Map<String,Object> headerMap) {
        // 创建默认的httpClient实例.
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // 创建httppost
        HttpPost httppost = new HttpPost(url);
        UrlEncodedFormEntity uefEntity;
        try {
            uefEntity = new UrlEncodedFormEntity(params, chatSet);
            httppost.setEntity(uefEntity);
            for(String str:headerMap.keySet()){
                httppost.addHeader(str,headerMap.get(str).toString());
            }
            CloseableHttpResponse response = httpclient.execute(httppost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, chatSet);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public  String get(String url, String chatSet,Map<String,Object> headerMap) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            // 创建httpget.
            url= url.replaceAll(" ", "%20");
            HttpGet httpget = new HttpGet(url);
            for(String str:headerMap.keySet()){
                httpget.addHeader(str,headerMap.get(str).toString());
            }
            // 执行get请求.
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 获取响应实体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, chatSet);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * 原生字符串发送put请求
     *
     * @param url
     * @param token
     * @param jsonStr
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     */
    public static String doPut(String url, String token, String jsonStr) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPut httpPut = new HttpPut(url);
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000).setConnectionRequestTimeout(35000).setSocketTimeout(60000).build();
        httpPut.setConfig(requestConfig);
        httpPut.setHeader("Content-type", "application/json");
        httpPut.setHeader("DataEncoding", "UTF-8");
        httpPut.setHeader("token", token);
        CloseableHttpResponse httpResponse = null;
        try {
            httpPut.setEntity(new StringEntity(jsonStr));
            httpResponse = httpClient.execute(httpPut);
            HttpEntity entity = httpResponse.getEntity();
            String result = EntityUtils.toString(entity);
            return result;
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (httpResponse != null) {
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (null != httpClient) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    /**
     * 发送delete请求
     *
     * @param url
     * @param token
     * @param jsonStr
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     */
    public static String doDelete(String url, String token, String jsonStr) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpDelete httpDelete = new HttpDelete(url);
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000).setConnectionRequestTimeout(35000).setSocketTimeout(60000).build();
        httpDelete.setConfig(requestConfig);
        httpDelete.setHeader("Content-type", "application/json");
        httpDelete.setHeader("DataEncoding", "UTF-8");
        httpDelete.setHeader("token", token);
        CloseableHttpResponse httpResponse = null;
        try {
            httpResponse = httpClient.execute(httpDelete);
            HttpEntity entity = httpResponse.getEntity();
            String result = EntityUtils.toString(entity);
            return result;
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (httpResponse != null) {
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != httpClient) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    public String postBodyRawForm(String url, String params) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        List<NameValuePair> pairs = new ArrayList<>(0);
        pairs.add(new BasicNameValuePair("object",params));
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(pairs);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(formEntity);
        CloseableHttpResponse response = httpclient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        String ret = EntityUtils.toString(entity);
        return ret;
    }
    public String getBodyRawForm(String url, String params) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        List<NameValuePair> pairs = new ArrayList<>(0);
        pairs.add(new BasicNameValuePair("object",params));
        String entityString = EntityUtils.toString(new UrlEncodedFormEntity(pairs,Consts.UTF_8));
        HttpGet httpGet = new HttpGet(url+"?"+entityString);
        CloseableHttpResponse response = httpclient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        String ret = EntityUtils.toString(entity);
        return ret;
    }
    /**
     * 爱牵挂请求
     * @param url
     * @param params
     * @return
     */
    public org.springframework.http.HttpEntity<JSONObject> cookiePostHttp(String url,MultiValueMap<String, String> params){
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        org.springframework.http.HttpEntity<MultiValueMap<String, String>> request = new org.springframework.http.HttpEntity<>(params, headers);
        org.springframework.http.HttpEntity<JSONObject> response = restTemplate.exchange(url, HttpMethod.POST, request, JSONObject.class);
        return response;
    }
    public org.springframework.http.HttpEntity<JSONObject> aqgCookieHttp(String url, MultiValueMap<String, String> params,HttpMethod method,String cookie) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        headers.add("Cookie",cookie);
        org.springframework.http.HttpEntity<MultiValueMap<String, String>> request = new org.springframework.http.HttpEntity<>(params, headers);
        org.springframework.http.HttpEntity<JSONObject> response = restTemplate.exchange(url, method, request, JSONObject.class);
        return response;
    }
    public org.springframework.http.HttpEntity<JSONObject> assesTokenPostHttp(String url, JSONObject params,HttpMethod method){
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType(MediaType.APPLICATION_JSON_VALUE);
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        org.springframework.http.HttpEntity<String> request = new org.springframework.http.HttpEntity<>(params.toString(), headers);
        org.springframework.http.HttpEntity<JSONObject> response = restTemplate.exchange(url, method, request, JSONObject.class);
        return response;
    }
    public  org.springframework.http.HttpEntity<JSONObject> iotAssesTokenPostHttp(String url, MultiValueMap<String, String> params,HttpMethod method){
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        org.springframework.http.HttpEntity<MultiValueMap<String, String>> request = new org.springframework.http.HttpEntity<>(params, headers);
        org.springframework.http.HttpEntity<JSONObject> response = restTemplate.exchange(url, method, request, JSONObject.class);
        return response;
    }
    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url
     *            发送请求的URL
     * @return URL 所代表远程资源的响应结果
     */
    public String sendGet(String url,Map<String,String> headerMap) {
        String result = "";
        BufferedReader in = null;
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            if(headerMap!=null){
                for (String key:headerMap.keySet()){
                    connection.setRequestProperty(key, headerMap.get(key));
                }
            }
            // 建立实际的连接
            connection.connect();
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }
    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url
     *            发送请求的 URL带上参数
     * @param param
     *            POST参数。
     * @return 所代表远程资源的响应结果
     */
    public String sendPost(String url, String param,Map<String,String> headerMap) {
        StringBuffer buffer = new StringBuffer();
        PrintWriter out = null;
        BufferedReader in = null;
        HttpURLConnection conn = null;
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            if(headerMap!=null){
                for (String key:headerMap.keySet()){
                    conn.setRequestProperty(key, headerMap.get(key));
                }
            }
            OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            osw.write(param.toString());
            osw.flush();
            // 读取返回内容
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String temp;
            while ((temp = br.readLine()) != null) {
                buffer.append(temp);
                buffer.append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return buffer.toString();
    }
    public String postBodyAuthorization(String url, String token) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Basic "+token);
        headers.add("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
        headers.add("Accept",MediaType.ALL_VALUE);
        String str = "grant_type=client_credentials";
        org.springframework.http.HttpEntity<String> formEntity = new org.springframework.http.HttpEntity<String>(str, headers);
        String ret = restTemplate.postForObject(url, formEntity, String.class);
        return ret;
    }
}

+ 59 - 2
svr/svr-base/src/main/resources/application.yml

@ -189,6 +189,7 @@ testPattern:
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: 1
---
spring:
  profiles: iottest
@ -325,6 +326,7 @@ testPattern:
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
---
spring:
  profiles: jwOracleTest
@ -375,6 +377,7 @@ testPattern:
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
---
spring:
  profiles: jwOracleProd
@ -424,6 +427,7 @@ testPattern:
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
---
spring:
  profiles: iotprod
@ -452,6 +456,59 @@ spring:
    password: jkzlehr
fast-dfs:
  tracker-server: 10.90.32.3:20003 #服务器地址
fastDFS:
  fastdfs_file_url: https://www.xmtyw.cn/
demo:
  flag: true
hospital:
  url: https://wx.xmzsh.com
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
wlyy:
  url: https://www.xmtyw.cn/wlyy/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040
  flag: false
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
pay:
  flag: false
#文件服务器上传配置 0本地,1.I健康,2.内网调用
testPattern:
  sign: 1
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: wlyy_new
    password: J4&y9sk#1G
  #    url: jdbc:mysql://172.19.103.77/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
  #    username: root
  #    password: 123456
  elasticsearch:
    cluster-name: jkzl #集群名 默认elasticsearch
    cluster-nodes: 10.95.91.4:9200,10.95.91.5:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
    client-transport-sniff: false
    jest:
      uris: http://10.95.91.4:9200,http://10.95.91.5:9300
      connection-timeout: 60000 # Connection timeout in milliseconds.
      multi-threaded: true # Enable connection requests from multiple execution threads.
  activemq:
    broker-url: tcp://172.19.103.87:61616
    user: admin
    password: admin
  redis:
    host: 10.90.32.3 # Redis server host.
    port: 20008  # Redis server port.
    password: jkzlehr
fast-dfs:
  tracker-server: 10.90.32.3:20003 #服务器地址
fastDFS:
  fastdfs_file_url: http://www.xmtyw.cn/
demo:
@ -463,7 +520,7 @@ hospital:
  SourceSysCode: S60
  TargetSysCode: S01
wlyy:
  url: http://www.xmtyw.cn/wlyy/
  url: http://10.95.22.10:8011/wlyy/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040
  flag: false
@ -649,7 +706,7 @@ testPattern:
  remote_inner_url: 1
im:
  im_list_get: http://10.18.43.41:3000/
  data_base_name: im_internet_hospital
---
spring:
  profiles: wjwProd

+ 7 - 0
svr/svr-base/src/main/resources/bootstrap.yml

@ -86,6 +86,13 @@ spring:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:

+ 13 - 3
svr/svr-cloud-care/pom.xml

@ -70,11 +70,11 @@
            <!--<artifactId>ehcsdk</artifactId>-->
            <!--<version>1.0</version>-->
        <!--</dependency>-->
        <dependency>
<!--        <dependency>
            <groupId>com.ylz.dmrh</groupId>
            <artifactId>ehcsdk-java-sdk-base</artifactId>
            <version>1.0.3</version>
        </dependency>
        </dependency>-->
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-entity</artifactId>
@ -276,10 +276,20 @@
            <artifactId>zwdd-sdk-java</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-speech-sdk-java</artifactId>
            <version>1.0.12</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>svr-cloud-care</finalName>
        <finalName>svr-cloud-care-test</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>

+ 23 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/constant/CommonConstant.java

@ -0,0 +1,23 @@
package com.yihu.jw.care.constant;
/**
 * Created by yeshijie on 2022/7/8.
 */
public class CommonConstant {
    /**
     * 网站域名
     */
    public static final String BASEURL = "https://zhyzh.gongshu.gov.cn/";
    /**
     * 腾讯语音合成域名
     */
    public static final String TXVOICEBASEURL = "tts.tencentcloudapi.com";
    /**
     * 腾讯语音合成文件路径
     */
    public static final String TXVOICEPATH = "/usr/local/nginx/hz/voice/";
}

+ 19 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/child/BaseChildManageDao.java

@ -0,0 +1,19 @@
package com.yihu.jw.care.dao.child;
import com.yihu.jw.entity.child.BaseChildManage;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/7/20
 */
public interface BaseChildManageDao extends PagingAndSortingRepository<BaseChildManage,String>, JpaSpecificationExecutor<BaseChildManage> {
    @Modifying
    @Query("update BaseChildManage m set m.click = m.click+1 where m.id = ?1")
    void updateClick(String id);
}

+ 21 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BaseDeviceElectricRecordDao.java

@ -0,0 +1,21 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BaseDeviceElectricRecordDO;
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 yeshijie on 2022/6/30.
 */
public interface BaseDeviceElectricRecordDao extends PagingAndSortingRepository<BaseDeviceElectricRecordDO,String>,
        JpaSpecificationExecutor<BaseDeviceElectricRecordDO> {
    @Query("select a from BaseDeviceElectricRecordDO a where a.statDate = ?1 ")
    List<BaseDeviceElectricRecordDO> findByStatDate(String statDate);
    @Query("select a from BaseDeviceElectricRecordDO a where a.patient = ?1 and a.statDate = ?2")
    List<BaseDeviceElectricRecordDO> findByPatientAndStatDate(String patient,String statDate);
}

+ 17 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BaseHzInterfaceDictDao.java

@ -0,0 +1,17 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.util.BaseHzInterfaceDictEntity;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/6/29
 */
public interface BaseHzInterfaceDictDao extends PagingAndSortingRepository<BaseHzInterfaceDictEntity,Long>,
        JpaSpecificationExecutor<BaseHzInterfaceDictEntity> {
    @Query("select a from BaseHzInterfaceDictEntity a where a.status = ?1 and a.code = ?2")
    BaseHzInterfaceDictEntity findByStatusAndCode(Integer status,String code);
}

+ 19 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/log/BasePatientPadPushOnOffDao.java

@ -0,0 +1,19 @@
package com.yihu.jw.care.dao.log;
import com.yihu.jw.entity.log.BasePatientPadPushOnOffEntity;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/7/28
 */
public interface BasePatientPadPushOnOffDao extends PagingAndSortingRepository<BasePatientPadPushOnOffEntity, String>, JpaSpecificationExecutor<BasePatientPadPushOnOffEntity> {
    @Modifying
    @Query("update BasePatientPadPushOnOffEntity a set a.onOff =?3 where a.patient=?1 and a.type = ?2")
    void updPushOnOff(String patient,Integer type,Integer onOff);
}

+ 17 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/log/BasePushRecordLogDao.java

@ -0,0 +1,17 @@
package com.yihu.jw.care.dao.log;
import com.yihu.jw.entity.log.BasePushRecordLogEntity;
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 wsl on 2022/7/4
 */
public interface BasePushRecordLogDao extends PagingAndSortingRepository<BasePushRecordLogEntity, String>, JpaSpecificationExecutor<BasePushRecordLogEntity> {
    @Query("from BasePushRecordLogEntity")
    List<BasePushRecordLogEntity> findAll();
}

+ 12 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/log/BasePushrecordLogInfoDao.java

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.log;
import com.yihu.jw.entity.log.BasePushrecordLogInfoEntity;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wsl on 2022/7/5
 */
public interface BasePushrecordLogInfoDao extends PagingAndSortingRepository<BasePushrecordLogInfoEntity, String>, JpaSpecificationExecutor<BasePushrecordLogInfoEntity> {
}

+ 16 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/voice/BaseWordToVoiceDao.java

@ -0,0 +1,16 @@
package com.yihu.jw.care.dao.voice;
import com.yihu.jw.entity.care.voice.BaseWordToVoiceDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2022/7/7.
 */
public interface BaseWordToVoiceDao extends PagingAndSortingRepository<BaseWordToVoiceDO,String>,
        JpaSpecificationExecutor<BaseWordToVoiceDO> {
    @Query("select a from BaseWordToVoiceDO a where a.word=?1 ")
    BaseWordToVoiceDO findByWord(String word);
}

+ 16 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/weather/BaseWeatherDayDao.java

@ -0,0 +1,16 @@
package com.yihu.jw.care.dao.weather;
import com.yihu.jw.entity.care.weather.BaseWeatherDayDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2022/7/27.
 */
public interface BaseWeatherDayDao extends PagingAndSortingRepository<BaseWeatherDayDO,String>,
        JpaSpecificationExecutor<BaseWeatherDayDO> {
    @Query("select a from BaseWeatherDayDO a where a.cityid=?1 and a.date=?2 ")
    BaseWeatherDayDO findByCityidAndDate(String cityid,String date);
}

+ 18 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/weather/BaseWeatherWeekDao.java

@ -0,0 +1,18 @@
package com.yihu.jw.care.dao.weather;
import com.yihu.jw.entity.care.weather.BaseWeatherWeekDO;
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 yeshijie on 2022/7/27.
 */
public interface BaseWeatherWeekDao extends PagingAndSortingRepository<BaseWeatherWeekDO,String>,
        JpaSpecificationExecutor<BaseWeatherWeekDO> {
    @Query("select a from BaseWeatherWeekDO a where a.cityid=?1 and a.updateDate=?2 ")
    List<BaseWeatherWeekDO> findByCityidAndUpdateDate(String cityid, String updateDate);
}

+ 31 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/admin/CommonEndpoint.java

@ -6,6 +6,8 @@ import com.yihu.jw.care.service.common.CommomService;
import com.yihu.jw.care.service.device.DevicePatientFaceService;
import com.yihu.jw.care.service.patient.CarePatientService;
import com.yihu.jw.care.util.DingdingUtil;
import com.yihu.jw.care.util.HongLingJinUtil;
import com.yihu.jw.care.util.SpeechTtsUtil;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.label.BaseCapacityLabelDO;
import com.yihu.jw.patient.dao.BasePatientDao;
@ -55,6 +57,35 @@ public class CommonEndpoint extends EnvelopRestEndpoint {
    private CarePatientService carePatientService;
    @Autowired
    private DevicePatientFaceService patientFaceService;
    @Autowired
    private SpeechTtsUtil speechTtsUtil;
    @Autowired
    private HongLingJinUtil hongLingJinUtil;
    @GetMapping(value = "open/getToken")
    @ApiOperation(value = "文字转语音")
    public Envelop getToken() {
        try {
            hongLingJinUtil.getToken();
            return ObjEnvelop.getSuccess("success");
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "open/wordToVoice")
    @ApiOperation(value = "文字转语音")
    public Envelop wordToVoice(String text) {
        try {
            String res = speechTtsUtil.wordToVoice(text);
            return ObjEnvelop.getSuccess(res);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "open/findFaceRecord")
    @ApiOperation(value = "获取人脸数据")

+ 47 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/child/ChildManageController.java

@ -0,0 +1,47 @@
package com.yihu.jw.care.endpoint.child;
import com.yihu.jw.care.service.child.ChildNewsListService;
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 io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * Created by wsl on 2022/7/20
 */
@RestController
@RequestMapping("/ChildManageController")
@Api(description = "幼儿端接口")
public class ChildManageController extends EnvelopRestEndpoint {
    @Autowired
    private ChildNewsListService childNewsListService;
    @ApiOperation(value = "获取列表")
    @PostMapping("/getChildManageList")
    public ObjEnvelop getChildManageList(@ApiParam(name = "type" ,value = "类型 1图文辅导,2视频辅导,3喜讯详细",required = true)
                                         @RequestParam(value = "type",required = true)Integer type,
                                         @ApiParam(name = "id" ,value = "id",required = false)
                                         @RequestParam(value = "id",required = false)String id,
                                         @RequestParam(value = "page",required = false)Integer page,
                                         @RequestParam(value = "pageSize",required = false)Integer pageSize){
        try {
            return success(childNewsListService.getChildManageList(type,page,pageSize,id));
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("获取失败");
        }
    }
}

+ 50 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/common/CommonController.java

@ -0,0 +1,50 @@
package com.yihu.jw.care.endpoint.common;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.util.WeatherUtil;
import com.yihu.jw.entity.care.weather.BaseWeatherDayDO;
import com.yihu.jw.entity.care.weather.BaseWeatherWeekDO;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * Created by yeshijie on 2022/7/28.
 */
@RestController
@RequestMapping(value = "/common", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "无关业务的通用接口", tags = {"无关业务的通用接口"})
public class CommonController extends EnvelopRestEndpoint {
    private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
    @Autowired
    private WeatherUtil weatherUtil;
    @GetMapping(value = "weather")
    @ApiOperation(value = "获取天气数据")
    public ObjEnvelop findWeather() {
        try {
            JSONObject json = new JSONObject();
            BaseWeatherDayDO weatherDayDO = weatherUtil.getWeatherDay(null,null);
            List<BaseWeatherWeekDO> weatherWeekDOList = weatherUtil.getWeatherWeek(null,null);
            json.put("weatherDayDO",weatherDayDO);
            json.put("weatherWeekDOList",weatherWeekDOList);
            return ObjEnvelop.getSuccess("获取成功",json);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
}

+ 48 - 6
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorBirthdayWishesEndpoint.java

@ -3,17 +3,18 @@ package com.yihu.jw.care.endpoint.doctor;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.dao.log.BasePushRecordLogDao;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.birthday.BirthdayWishesService;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.care.util.SpeechTtsUtil;
import com.yihu.jw.entity.care.birthday.BirthDayWishesToPatient;
import com.yihu.jw.entity.care.birthday.BirthdayWishesTemplate;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.entity.log.BasePushRecordLogEntity;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -22,7 +23,9 @@ import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@ -58,6 +61,8 @@ public class DoctorBirthdayWishesEndpoint extends BaseController {
    private PermissionService permissionService;
    @Value("${demo.flag}")
    private Boolean demoFlag;
    @Autowired
    private BasePushRecordLogDao pushRecordLogDao;
    @RequestMapping(value = "/createTemplate", method = RequestMethod.POST)
    @ApiOperation(value = "创建模板")
@ -252,16 +257,27 @@ public class DoctorBirthdayWishesEndpoint extends BaseController {
                json.put("content", content);
                json.put("isSave", 0);
            }
            String sql = "select py_code from wlyy_hospital_sys_dict where dict_name = 'pushOnOff' and dict_code = '1' ";
            String flagString = jdbcTemplate.queryForObject(sql, String.class);
            Boolean flage = Boolean.parseBoolean(flagString);
            List<BirthDayWishesToPatient> birthDayWishesToPatientESList = birthdayWishesService.saveBirthdayWishesES(json);
            new Thread(() -> {
                sender(birthDayWishesToPatientESList);
            }).start();
            if (flage){
                new Thread(() -> {
                    sender(birthDayWishesToPatientESList);
                }).start();
                savePushLog(patient);
            }
            return write(200, "发送成功!");
        } catch (Exception e) {
            return errorResult(e);
        }
    }
    @Autowired
    private SpeechTtsUtil speechTtsUtil;
    /**
     * 发送消息
     *
@ -271,6 +287,12 @@ public class DoctorBirthdayWishesEndpoint extends BaseController {
        birthDayWishesToPatient.stream().forEach(one -> {
            //根据openid进行发送祝福
            String patient = one.getPatientCode();
            //判断居民是否开启开关
            String patientOnOffSql = "select on_off from base_patient_pad_pushonoff where patient = '" + patient + "' and type = 7";
            Integer integer = jdbcTemplate.queryForObject(patientOnOffSql, new BeanPropertyRowMapper<>(Integer.class));
            if (!(integer==0?false:true)){
                return;
            }
            if (StringUtils.isNotBlank(patient)){
                String sql = " select p.id as patient,p.name,we.openid from base_patient p Left join  base_patient_wechat we on p.id = we.patient_id " +
                        "where p.id = '"+patient+"' " +
@ -301,7 +323,8 @@ public class DoctorBirthdayWishesEndpoint extends BaseController {
                    }
                    if (success||demoFlag){
                        SystemMessageDO messageDO = new SystemMessageDO();
                        messageDO.setTitle("收到来自"+one.getDoctorName()+"的关怀祝福:祝您"+tmp.get("name").toString()+"节日快乐!");
                        String title = "收到来自"+one.getDoctorName()+"的关怀祝福:祝您"+tmp.get("name").toString()+"节日快乐!";
                        messageDO.setTitle(title);
                        messageDO.setType("41");//41人文关怀
                        messageDO.setSender(one.getDoctorCode());
                        messageDO.setSenderName(one.getDoctorName());
@ -313,6 +336,7 @@ public class DoctorBirthdayWishesEndpoint extends BaseController {
                        messageDO.setData(one.getContent());
                        messageDO.setDel("1");
                        messageDO.setCreateTime(new Date());
                        messageDO.setAudioUrl(speechTtsUtil.wordToVoice(title));
                        systemMessageDao.save(messageDO);
                        //推送socket
                        com.alibaba.fastjson.JSONObject message = new com.alibaba.fastjson.JSONObject();
@ -332,6 +356,24 @@ public class DoctorBirthdayWishesEndpoint extends BaseController {
    }
    @Transactional(rollbackFor = Exception.class)
    public void savePushLog(String patient){
        String[] split = patient.split(",");
        BasePushRecordLogEntity logEntity = new BasePushRecordLogEntity();
        logEntity.setCreateTime(new Date());
        logEntity.setPushType("3");
        logEntity.setContent("生日祝福");
        logEntity.setMessageType(2);
        logEntity.setSendTime(new Date());
        logEntity.setNum(split.length);
        logEntity.setSendObject(patient);
        logEntity.setSendObjectType(2);
        logEntity.setStatus(1);
        logEntity.setMessageType(2);
        pushRecordLogDao.save(logEntity);
    }
    /*******************************************助老员部分*********************************************************************/
    @ApiOperation("获取生日居民列表")
    @RequestMapping(value = "helper/getBirthdayPatientList", method = RequestMethod.GET)

+ 19 - 13
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorEndpoint.java

@ -57,22 +57,28 @@ public class DoctorEndpoint extends EnvelopRestEndpoint {
    public Envelop dingtalk_app_user(@ApiParam(name = "authCode", value = "钉钉授权code", required = true)
                                     @RequestParam(value = "authCode",required = true) String authCode){
        try {
            JSONObject jsonObject = dingdingUtil.dingtalk_app_user(authCode);
            if(jsonObject.getBoolean("success")){
                JSONObject content = jsonObject.getJSONObject("content");
                if(content.getBoolean("success")){
                    long accountId = content.getJSONObject("data").getLong("accountId");
                    BaseDoctorDO doctorDO = doctorDao.findByYktDoctorId(accountId+"");
                    if(doctorDO == null){
                        return Envelop.getError("暂无该账号,请联系云照护工作人员配置");
            //红领巾平台和这个类似直接传浙政钉id
            BaseDoctorDO doctorDO = doctorDao.findByYktDoctorId(authCode);
            if(doctorDO!=null){
                return success(doctorDO.getMobile());
            }else {
                JSONObject jsonObject = dingdingUtil.dingtalk_app_user(authCode);
                if(jsonObject.getBoolean("success")){
                    JSONObject content = jsonObject.getJSONObject("content");
                    if(content.getBoolean("success")){
                        long accountId = content.getJSONObject("data").getLong("accountId");
                        doctorDO = doctorDao.findByYktDoctorId(accountId+"");
                        if(doctorDO == null){
                            return Envelop.getError("暂无该账号,请联系云照护工作人员配置");
                        }else{
                            return success(doctorDO.getMobile());
                        }
                    }else{
                        return success(doctorDO.getMobile());
                        return Envelop.getError(content.getString("responseMessage"));
                    }
                }else{
                    return Envelop.getError(content.getString("responseMessage"));
                }else {
                    return Envelop.getError("获取失败");
                }
            }else {
                return Envelop.getError("获取失败");
            }
        }catch (Exception e){
            e.printStackTrace();

+ 69 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/PatientMessageEndpoint.java

@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/5/19.
@ -90,7 +91,7 @@ public class PatientMessageEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getSystemMessageListPad")
    @ApiOperation("居民平板端获取消息列表(生日祝福,体征设备)")
    @ApiOperation("居民平板端获取消息列表(生日祝福,体征设备) ")
    public ListEnvelop getUnreadSystemMessageListPad(@ApiParam(name = "patient",required = true)
                                            @RequestParam(value = "patient")String patient,
                                            @ApiParam(name = "type",required = true)
@ -105,6 +106,31 @@ public class PatientMessageEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value ="/envMessagePad")
    @ApiOperation("居民端Pad获取天气信息")
    public ObjEnvelop envMessagePad(){
        try {
            return ObjEnvelop.getSuccess("查询成功",patientMessageService.envMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return failedObjEnvelopException2(e);
        }
    }
    @ApiOperation("pad端获取消息列表  1.8.2 新增接口")
    @GetMapping(value = "/getSystemMessageListPadTwo")
    public ListEnvelop getSystemMessageListPad(@ApiParam(name = "patient", required = true)
                                               @RequestParam(value = "patient", required = true) String patient,
                                               @ApiParam(name = "type", value = "类型", required = true)
                                               @RequestParam(value = "type", required = true) String type) {
        try {
            return ListEnvelop.getSuccess("查询成功",patientMessageService.getSystemMessageListPad(patient, type));
        } catch (Exception e) {
            e.printStackTrace();
            return failedListEnvelopException2(e);
        }
    }
    @PostMapping(value = "/updateMessageRead")
    @ApiOperation("已读消息")
    @ObserverRequired
@ -136,6 +162,48 @@ public class PatientMessageEndpoint extends EnvelopRestEndpoint {
        }catch (Exception e){
            return failedException2(e);
        }
    }
/*
1	时间整点报时
2	智能安居设备状态播报(必选)
3	体征测量消息
4	用药提醒
5	天气预报
6	服务预约提醒
7	生日祝福提醒
8	热点新闻播报*/
    @PostMapping(value = "/patientPadPushOnOffUpd")
    @ApiOperation("修改居民推送开关")
    public Envelop patientPadPushOnOffUpd(@ApiParam(name = "patient",required = true)
                                          @RequestParam(value = "patient")String patient,
                                          @ApiParam(name = "type",value = "以数据库为主 base_patient_pad_pushonoff ",required = true)
                                          @RequestParam(value = "type")Integer type,
                                          @ApiParam(name = "onOff",required = true)
                                          @RequestParam(value = "onOff")Integer onOff){
        try {
            patientMessageService.patientPadPushOnOffUpd(patient,type,onOff);
            return Envelop.getSuccess("修改成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return failedException2(e);
        }
    }
    @GetMapping(value = "/patientPadPushOnOff")
    @ApiOperation(value = "获取居民推送开关")
    public ListEnvelop patientPadPushOnOff(@ApiParam(name ="patient",required =true)
                                           @RequestParam(value = "patient")String patient){
        try {
            List<Map<String, Object>> list = patientMessageService.patientPadPushOnOff(patient);
            return success("获取成功",200,list);
        } catch (Exception e) {
            e.printStackTrace();
            return failedListEnvelopException2(e);
        }
    }
}

+ 43 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/radio/WlyyRadioEndpoint.java

@ -0,0 +1,43 @@
package com.yihu.jw.care.endpoint.radio;
import com.yihu.jw.care.service.radio.WlyyRadioService;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author xyq
 * @create 2022-07-04 13:39
 * @slogan 他化自在,我自逍遥
 */
@RestController
@RequestMapping(value = "/raido")
@Api(value = "收音机音频接口", description = "收音机音频接口", tags = {"收音机音频接口"})
public class WlyyRadioEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private WlyyRadioService radioService;
    @ApiOperation(value = "分页获取收音机列表")
    @GetMapping(value = "/getRadioPage")
    public PageEnvelop getRadioPage(@ApiParam(name = "name",value = "名字搜索") @RequestParam(required = false) String name,
                                    @ApiParam(name = "frequency",value = "频率搜索") @RequestParam(required = false) String frequency,
                                    @ApiParam(name = "page",value = "页码") @RequestParam(required = false,defaultValue = "1")Integer page,
                                    @ApiParam(name = "pageSize",value = "每页大小") @RequestParam(required = false,defaultValue = "20")Integer pageSize){
        try {
            return radioService.getRadioPage(name, frequency, page, pageSize);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
}

+ 40 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/OpenStatisticsEndpoint.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.doctor.CareDoctorService;
import com.yihu.jw.care.service.hz.HzInterfaceService;
import com.yihu.jw.care.service.lifeCare.LifeCareOrderService;
import com.yihu.jw.care.service.patient.CarePatientService;
import com.yihu.jw.care.service.statistics.StatisticsService;
@ -713,5 +714,44 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
    }
    @Autowired
    HzInterfaceService hzInterfaceService;
    @GetMapping(value = "electricityTable")
    @ApiOperation(value = "获取电表信息")
    public Envelop findElectricityTable(@ApiParam(name = "queryDate",value = "查询时间",required = true)
                                           @RequestParam(value = "queryDate",required = true)String queryDate){
        try {
            hzInterfaceService.getAreaApi(queryDate);
            return success("成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failedObjEnvelopException2(e);
        }
    }
    //密钥
    @GetMapping(value = "PopBasicInfo")
    public Envelop PopBasicInfo(){
        try {
            hzInterfaceService.PopBasicInfo();
            return success("成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failedObjEnvelopException2(e);
        }
    }
}

+ 19 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/platForm/PatientInfoPlatFormEndpoint.java

@ -473,6 +473,25 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
        }
    }
    @RequestMapping(value = "processLogOld", method = RequestMethod.GET)
    @ApiOperation(value = "紧急救助工单流程-旧版本 现在用于设备物联大屏")
    public ObjEnvelop processLogOld(@ApiParam(name = "orderid")
                                 @RequestParam(value = "orderid") String orderid,
                                 @ApiParam(name = "orderType",value = "20紧急呼叫22安防工单")
                                 @RequestParam(value = "orderType") String orderType) {
        try {
            JSONObject emergencyAssistanceProcess = assistanceService.getEmergencyAssistanceProcessOld(orderid, orderType);
            if (null == emergencyAssistanceProcess) {
                return ObjEnvelop.getError("工单不存在",400 );
            }
            return ObjEnvelop.getSuccess("成功",emergencyAssistanceProcess);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @RequestMapping(value = "getWarningCount", method = RequestMethod.GET)
    @ApiOperation(value = "获取预警中的总数")

+ 27 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/video/PatientVideoEndpoint.java

@ -1,8 +1,10 @@
package com.yihu.jw.care.endpoint.video;
import com.yihu.jw.care.dao.video.BaseVideoDao;
import com.yihu.jw.care.service.video.BaseVideoService;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -27,6 +29,8 @@ public class PatientVideoEndpoint extends EnvelopRestEndpoint {
    private BaseVideoDao baseVideoDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BaseVideoService baseVideoService;
    @RequestMapping(value = "findVideoNum", method = RequestMethod.GET)
    @ApiOperation(value = "按类型获取视频列表")
@ -61,4 +65,27 @@ public class PatientVideoEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping("/getVideoGroup")
    @ApiOperation(value = "获取视频栏目")
    public ListEnvelop getVideoGroup(){
        try {
            return baseVideoService.getVideoGroup();
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping("/getVideoPageByGroup")
    @ApiOperation(value = "获取视频列表")
    public PageEnvelop getVideoPageByGroup(@ApiParam(name = "groupId",value = "栏目id")@RequestParam(required = false,defaultValue = "0") Integer groupId,
                                           @ApiParam @RequestParam(required = false,defaultValue = "1")Integer page,
                                           @ApiParam @RequestParam(required = false,defaultValue = "20")Integer pageSize){
        try {
            return baseVideoService.getVideoPageByGroup(groupId, page, pageSize);
        }catch (Exception e){
            return failedPageEnvelopException(e);
        }
    }
}

+ 39 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java

@ -312,6 +312,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
                messageUtil.sendDoctorGetuiMessage(doctorDO.getId(),"2",url,"紧急呼叫",body);
                messageUtil.sendDoctorDingdingMessage(doctorDO,null,"text","2",dingDingBody,null,null);
                messageUtil.sendHongLingJinMsg(doctorDO,null,assistanceDO);
                imUtill.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
            }
            //pc管理端端推送消息
@ -1741,6 +1742,44 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        return jsonObject;
    }
    public JSONObject getEmergencyAssistanceProcessOld(String orderId,String orderType){
        JSONObject jsonObject = new JSONObject();
        String eaSql = " ";
        List<Map<String, Object>> maps = new ArrayList<>();
        if ("20".equals(orderType)){
            eaSql   = "SELECT `status`,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') AS createTime,complete_time AS completeTime " +
                    "from base_emergency_assistance_order WHERE id = '"+orderId+"'";
        }
        if ("22".equals(orderType)){
            eaSql   = "SELECT `status`,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') AS createTime,complete_time AS completeTime " +
                    "from base_security_monitoring_order WHERE id = '"+orderId+"'";
        }
        maps = jdbcTemplate.queryForList(eaSql);
        if (maps.size()==0) {
            return null;
        }
        for (Map<String, Object> map : maps) {
            jsonObject.put("status",map.get("status"));
            jsonObject.put("createTime",map.get("createTime"));
        }
        String sql = "select user_name AS userName,create_time AS createTime,content,type from base_emergency_warn_log where (user_type = 2 and order_id = '"+orderId+"' and type IS NOT NULL) " +
                " OR (user_type = 1 AND order_id = '"+orderId+"' and type IS NOT NULL) order by create_time,type ASC ";
        List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
        jsonObject.put("type5_status",0);
        jsonObject.put("result",result);
        for (Map<String, Object> map : result) {
            if (map.get("type").equals(5)) {
                jsonObject.put("type5_status",1);
            }
        }
        jsonObject = JSONObject.parseObject(JSON.toJSONStringWithDateFormat(jsonObject,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue));
        return jsonObject;
    }
    /**
     * 家属推送日志
     * @param patient

+ 63 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/child/ChildNewsListService.java

@ -0,0 +1,63 @@
package com.yihu.jw.care.service.child;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.child.BaseChildManageDao;
import com.yihu.jw.entity.child.BaseChildManage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * Created by wsl on 2022/7/20
 */
@Service
public class ChildNewsListService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BaseChildManageDao baseChildManageDao;
    //获取
    @Transactional(rollbackFor = Exception.class)
    public JSONObject getChildManageList(Integer type, Integer page, Integer pageSize,String id){
        JSONObject jsonObject = new JSONObject();
        String sql = "select * from base_child_manage where  1=1 and del = 1  and type = "+type+" ";
        String totalSql = "select count(id) total from  base_child_manage where 1=1 and  del =1 and type = "+type+" ";
        String commonSql = "";
        String limitSql = "";
        if (StringUtils.isNotBlank(id)) {
            commonSql += "and id = '"+id+"' ";
            if (type==2) {
                baseChildManageDao.updateClick(id);
            }
        }else {
            if(page==null){
                page = 1;
            }
            if(pageSize==null){
                pageSize = 10;
            }
            limitSql +=" LIMIT  " + (page - 1) * pageSize + "," + pageSize + "";
        }
        commonSql +=  "ORDER BY create_time DESC ";
        List<BaseChildManage> baseChildManage = jdbcTemplate.query(sql+commonSql+limitSql, new BeanPropertyRowMapper<>(BaseChildManage.class));
        Integer total = jdbcTemplate.queryForObject(totalSql + commonSql, Integer.class);
        jsonObject.put("obj",baseChildManage);
        jsonObject.put("total",total);
        return jsonObject;
    }
}

+ 29 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientDeviceService.java

@ -9,6 +9,7 @@ import com.yihu.jw.care.dao.security.BaseEmergencyWarnLogDao;
import com.yihu.jw.care.dao.security.SecurityMonitoringOrderDao;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.contacts.ContactsService;
import com.yihu.jw.care.service.hz.HzInterfaceService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
import com.yihu.jw.care.service.wechat.WeiXinAccessTokenUtils;
import com.yihu.jw.care.util.*;
@ -128,6 +129,8 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
    private MessageUtil messageUtil;
    @Autowired
    private PatientSafeAreaConfirmDao patientSafeAreaConfirmDao;
    @Autowired
    private HzInterfaceService hzInterfaceService;
    /**
     * 获取烟雾 燃气浓度
@ -963,9 +966,16 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
            //数据采集量
            if(1==device.getDeviceType()){//安防设备
                sql = " select count(id) from device_data_push_log where device_sn='"+deviceSn+"' ";
                Long dataCount = jdbcTemplate.queryForObject(sql,Long.class);
                devInfo.put("dataCount",dataCount);//
                if("20".equals(device.getCategoryCode())){
                    //电表数据
                    sql = " select count(id) from base_device_electric_record where cons_no='"+deviceSn+"' ";
                    Long dataCount = jdbcTemplate.queryForObject(sql,Long.class);
                    devInfo.put("dataCount",dataCount);//
                }else{
                    sql = " select count(id) from device_data_push_log where device_sn='"+deviceSn+"' ";
                    Long dataCount = jdbcTemplate.queryForObject(sql,Long.class);
                    devInfo.put("dataCount",dataCount);//
                }
                sql = " select sum(total) from (\n" +
                        "select count(id) total from base_emergency_assistance_order where device_sn='"+deviceSn+"'\n" +
                        "UNION ALL\n" +
@ -1163,6 +1173,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    break;
                case "20": //电表 todo 日常用电情况
                    content +="日常用电监测";
                    electricRecord(patient,day,devInfoObj);
                    break;
                case "21": //天然气 todo 天然气情况
                    naturalGasRecord(patientDO.getIdcard(),devInfoObj);
@ -1208,6 +1219,21 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
        devInfoObj.put("naturalGasRecord",mapList);
    }
    /**
     * 电表数据
     */
    public void electricRecord(String patient,String day,com.alibaba.fastjson.JSONObject devInfoObj){
        BaseDeviceElectricRecordDO electricRecordDO = hzInterfaceService.electricityTable(day,patient);
        com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject();
        if(electricRecordDO!=null){
            json.put("home",electricRecordDO.getHome());
            json.put("upperLimit",electricRecordDO.getUpperLimit());
            json.put("statDate",electricRecordDO.getStatDate());
            json.put("lowerLimit",electricRecordDO.getLowerLimit());
        }
        devInfoObj.put("electricRecord",json);
    }
    /**
     * 获取睡眠带 睡眠报告
     * @param patient

+ 186 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/hz/HzInterfaceService.java

@ -0,0 +1,186 @@
package com.yihu.jw.care.service.hz;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.device.BaseDeviceElectricRecordDao;
import com.yihu.jw.care.dao.device.BaseHzInterfaceDictDao;
import com.yihu.jw.care.util.DSLUtils;
import com.yihu.jw.care.util.HttpToolUtil;
import com.yihu.jw.care.util.MD5Utils;
import com.yihu.jw.entity.care.device.BaseDeviceElectricRecordDO;
import com.yihu.jw.entity.util.BaseHzInterfaceDictEntity;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpMethod;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * Created by wsl on 2022/6/29
 */
@Service
public class HzInterfaceService {
    Logger logger = LoggerFactory.getLogger(HzInterfaceService.class);
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private BaseHzInterfaceDictDao baseHzInterfaceDictDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Autowired
    private BaseDeviceElectricRecordDao baseDeviceElectricRecordDao;
    /**
     * 获取居民电表数据,没有就去查询
     * @param queryDate
     * @param patient
     * @return
     */
    public BaseDeviceElectricRecordDO electricityTable(String queryDate,String patient){
        try {
            List<BaseDeviceElectricRecordDO> list = new ArrayList<>();
            if(StringUtils.isNotBlank(patient)){
                list = baseDeviceElectricRecordDao.findByPatientAndStatDate(patient,queryDate);
                if(list.size()>0){
                    return list.get(0);
                }
            }else{
                list = baseDeviceElectricRecordDao.findByStatDate(queryDate);
                if(list.size()>0){
                    return list.get(0);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    private long expire(String key) {
        return redisTemplate.opsForValue().getOperations().getExpire(key);
    }
    public JSONArray getAreaApi(String date){
        try {
            BaseHzInterfaceDictEntity dbkey = requestDBKEY();
            //判断是否过期 或者 是否不存在
            if(expire(dbkey.getCode()) > 0?false:true||redisTemplate.hasKey(dbkey.getCode())){
                PopBasicInfo();
            }
            String requestSecret = redisTemplate.opsForValue().get(dbkey.getCode());
            //请求接口地址(政务网环境根据接口文档地址改动)
            String electricityTableSql = "SELECT url FROM base_hz_interface_dict WHERE `status` = 1 AND `code` = 'zfjddjlrdbjk'";
            String url = jdbcTemplate.queryForObject(electricityTableSql, String.class);
            String requestTime = DSLUtils.dateToLong(new Date()) + "";//时间戳
            String sign = MD5Utils.encoderByMd5(dbkey.getAppKey()+ requestSecret + requestTime);
            JSONObject json = new JSONObject();
            json.put("queryDate",date);
            url +="?appKey="+dbkey.getAppKey()+"&sign="+sign+"&requestTime="+requestTime;
            org.springframework.http.HttpEntity<JSONObject> response = httpClientUtil.assesTokenPostHttp(url, json, HttpMethod.POST);
            logger.info("电表接口调用结果----> "+response);
            JSONObject responseBody = response.getBody();
            if("0".equals(responseBody.getString("code"))){
                return responseBody.getJSONArray("data");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return new JSONArray();
    }
    // 刷新密钥还存在时可以调用这个方法
    private String refreshKey(BaseHzInterfaceDictEntity refreshdbkey, BaseHzInterfaceDictEntity requestdbkey){
        Map<String, String> params = new HashMap<String, String>();
        String appkey = refreshdbkey.getAppKey();   //appKey
        String requstSecret = refreshdbkey.getRefreshSecret();//刷新密钥
        String requestTime = DSLUtils.dateToLong(new Date()) + "";//时间戳
        String url = refreshdbkey.getUrl();  //请求url
        String sign = MD5Utils.encoderByMd5(appkey + requstSecret + requestTime);
        params.put("appKey", appkey);
        params.put("sign", sign);
        params.put("requestTime", requestTime);
        JSONObject resultObj = HttpToolUtil.httpURLConnection_sendPost(url, params);
        logger.info("接口返回值:"+resultObj.toString());
        System.out.println("接口返回值:"+resultObj.toString());
        JSONObject datasObj = JSONObject.parseObject(resultObj.get("datas").toString());
        requestdbkey.setRequestSecret(datasObj.get("requestSecret").toString());
        requestdbkey.setRequestSecretEndTime(DateUtil.strToDateLong(datasObj.get("requestSecretEndTime").toString()));
        baseHzInterfaceDictDao.save(requestdbkey);
        redisTemplate.opsForValue().set(requestdbkey.getCode(),resultObj.get("requestSecret").toString(),14, TimeUnit.MINUTES);
        return datasObj.toString();
    }
    @Transactional(rollbackFor = Exception.class)
    public String PopBasicInfo() {
        Map<String, String> params = new HashMap<String, String>();
        BaseHzInterfaceDictEntity requestdbkey = requestDBKEY();
        BaseHzInterfaceDictEntity refreshdbkey = refreshDBKEY();
        /*if(redisTemplate.hasKey(refreshdbkey.getCode())){
            return refreshKey(refreshdbkey,requestdbkey);
        }*/
        String appkey = requestdbkey.getAppKey();   //appKey
        String requstSecret = requestdbkey.getAppPwd();//app密钥
        String requestTime = DSLUtils.dateToLong(new Date()) + "";//时间戳
        String url = requestdbkey.getUrl();  //请求url
        //sign 格式:APP_KEY + APP秘钥+时间戳,经过MD5加密生成的串(字母小写)
        String sign = MD5Utils.encoderByMd5(appkey + requstSecret + requestTime);
        params.put("appKey", appkey);
        params.put("sign", sign);
        params.put("requestTime", requestTime);
        JSONObject resultObj = HttpToolUtil.httpURLConnection_sendPost(url, params);
//        logger.info("接口返回值:"+resultObj.toString());
//        System.out.println("接口返回值:"+resultObj.toString());
        //请求密钥
        JSONObject datasObj = JSONObject.parseObject(resultObj.get("datas").toString());
        requestdbkey.setRequestSecret(datasObj.get("requestSecret").toString());
        requestdbkey.setRequestSecretEndTime(DateUtil.strToDateLong(datasObj.get("requestSecretEndTime").toString()));
        //刷新密钥
        refreshdbkey.setRefreshSecret(datasObj.get("refreshSecret").toString());
        baseHzInterfaceDictDao.save(requestdbkey);
        baseHzInterfaceDictDao.save(refreshdbkey);
        redisTemplate.opsForValue().set(requestdbkey.getCode(),datasObj.get("requestSecret").toString(),14, TimeUnit.MINUTES);
        redisTemplate.opsForValue().set(refreshdbkey.getCode(),datasObj.get("refreshSecret").toString(),47, TimeUnit.HOURS);
        return resultObj.toString();
    }
    // 请求密钥 15分钟过期
    public BaseHzInterfaceDictEntity requestDBKEY(){
        return baseHzInterfaceDictDao.findByStatusAndCode(1,"dbmyhq");
    }
    // 刷新密钥 48小时过期
    public BaseHzInterfaceDictEntity refreshDBKEY(){
        return baseHzInterfaceDictDao.findByStatusAndCode(1,"dbmysxhq");
    }
}

+ 119 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/hz/InstallCert.java

@ -0,0 +1,119 @@
package com.yihu.jw.care.service.hz;
import javax.net.ssl.*;
import java.io.*;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class InstallCert {
    public static void main(String[] args) throws Exception {
        String filePath = createCert("sql.hz.gov.cn",443);
    }
    public static String createCert(String host,int port) throws Exception{
        File certs = new File(System.getProperty("java.home")
                + File.separatorChar + "lib"
                + File.separatorChar + "security"
                + File.separatorChar + "cacerts");
        char[] passphrase = "changeit".toCharArray();
        System.out.println("Loading KeyStore " + certs + "...");
        InputStream in = new FileInputStream(certs);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(in, passphrase);
        in.close();
        SSLContext context = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
        context.init(null, new TrustManager[] {tm}, null);
        SSLSocketFactory factory = context.getSocketFactory();
        System.out.println("Opening connection to " + host + ":" + port + "...");
        SSLSocket socket = (SSLSocket)factory.createSocket(host, port);
        socket.setSoTimeout(10000);
        try {
            System.out.println("Starting SSL handshake...");
            socket.startHandshake();
            socket.close();
            System.out.println("No errors, certificate is already trusted");
        } catch (SSLException e) {
            e.printStackTrace();
        }
        X509Certificate[] chain = tm.chain;
        if (chain == null) {
            System.out.println("Could not obtain server certificate chain");
            return null;
        }
        System.out.println("Server sent " + chain.length + " certificate(s):");
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = chain[i];
            sha1.update(cert.getEncoded());
            md5.update(cert.getEncoded());
        }
        int k = 0;
        X509Certificate cert = chain[k];
        String alias = host + "-" + (k + 1);
        ks.setCertificateEntry(alias, cert);
        String filePath = System.getProperty("java.home")
                + File.separatorChar + "lib"
                + File.separatorChar + "security"
                + File.separatorChar + host + ".jssecacerts";
        File certFile = new File(filePath);
        OutputStream out = new FileOutputStream(certFile);
        ks.store(out, passphrase);
        out.close();
        System.out.println(cert);
        System.out.println("Added certificate to keystore 'jssecacerts' using alias '"+ alias + "'");
        return certFile.getAbsolutePath();
    }
    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }
    private static class SavingTrustManager implements X509TrustManager {
        private final X509TrustManager tm;
        private X509Certificate[] chain;
        SavingTrustManager(X509TrustManager tm) {
            this.tm = tm;
        }
        public X509Certificate[] getAcceptedIssuers() {
            throw new UnsupportedOperationException();
        }
        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            throw new UnsupportedOperationException();
        }
        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            this.chain = chain;
            tm.checkServerTrusted(chain, authType);
        }
    }
}

+ 332 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/hz/RSAUtils.java

@ -0,0 +1,332 @@
package com.yihu.jw.care.service.hz;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class RSAUtils {
    /** *//**
     * 加密算法RSA
     */
    public static final String KEY_ALGORITHM = "RSA";
    /** *//**
     * 签名算法
     */
    public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
    /** *//**
     * 获取公钥的key
     */
    private static final String PUBLIC_KEY = "RSAPublicKey";
    /** *//**
     * 获取私钥的key
     */
    private static final String PRIVATE_KEY = "RSAPrivateKey";
    /** *//**
     * RSA最大加密明文大小
     */
    private static final int MAX_ENCRYPT_BLOCK = 117;
    /** *//**
     * RSA最大解密密文大小
     */
    private static final int MAX_DECRYPT_BLOCK = 128;
    /** *//**
     * <p>
     * 生成密钥对(公钥和私钥)
     * </p>
     *
     * @return
     * @throws Exception
     */
    public static Map<String, Object> genKeyPair() throws Exception {
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGen.initialize(1024);
        KeyPair keyPair = keyPairGen.generateKeyPair();
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        Map<String, Object> keyMap = new HashMap<String, Object>(2);
        keyMap.put(PUBLIC_KEY, publicKey);
        keyMap.put(PRIVATE_KEY, privateKey);
        return keyMap;
    }
    /** *//**
     * <p>
     * 用私钥对信息生成数字签名
     * </p>
     *
     * @param content 已加密数据
     * @param privateKey 私钥(BASE64编码)
     *
     * @return
     * @throws Exception
     */
    public static String sign(String content, String privateKey) throws Exception {
        byte[] keyBytes = decryptBASE64(privateKey);
        byte[] data = content.getBytes("UTF-8");
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initSign(privateK);
        signature.update(data);
        return encryptBASE64(signature.sign());
    }
    /** *//**
     * <p>
     * 校验数字签名
     * </p>
     *
     * @param content 已加密数据
     * @param publicKey 公钥(BASE64编码)
     * @param sign 数字签名
     *
     * @return
     * @throws Exception
     *
     */
    public static boolean verify(String content, String publicKey, String sign)
            throws Exception {
        byte[] keyBytes = decryptBASE64(publicKey);
        byte[] data = content.getBytes("UTF-8");
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PublicKey publicK = keyFactory.generatePublic(keySpec);
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initVerify(publicK);
        signature.update(data);
        return signature.verify(decryptBASE64(sign));
    }
    /** *//**
     * <P>
     * 私钥解密
     * </p>
     *
     * @param content 已加密数据
     * @param privateKey 私钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String decryptByPrivateKey(String content, String privateKey)
            throws Exception {
        byte[] keyBytes = decryptBASE64(privateKey);
        byte[] encryptedData = decryptBASE64(content);
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, privateK);
        int inputLen = encryptedData.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        // 对数据分段解密
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
                cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * MAX_DECRYPT_BLOCK;
        }
        byte[] decryptedData = out.toByteArray();
        out.close();
        return new String(decryptedData,"UTF-8");
    }
    /** *//**
     * <p>
     * 公钥解密
     * </p>
     *
     * @param content 已加密数据
     * @param publicKey 公钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String decryptByPublicKey(String content, String publicKey)
            throws Exception {
        byte[] keyBytes = decryptBASE64(publicKey);
        byte[] encryptedData = decryptBASE64(content);
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key publicK = keyFactory.generatePublic(x509KeySpec);
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, publicK);
        int inputLen = encryptedData.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        // 对数据分段解密
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
                cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * MAX_DECRYPT_BLOCK;
        }
        byte[] decryptedData = out.toByteArray();
        out.close();
        return new String(decryptedData,"UTF-8");
    }
    /** *//**
     * <p>
     * 公钥加密
     * </p>
     *
     * @param content 源数据
     * @param publicKey 公钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String encryptByPublicKey(String content, String publicKey)
            throws Exception {
        byte[] keyBytes = decryptBASE64(publicKey);
        byte[] data = content.getBytes("UTF-8");
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key publicK = keyFactory.generatePublic(x509KeySpec);
        // 对数据加密
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, publicK);
        int inputLen = data.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        // 对数据分段加密
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
                cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(data, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * MAX_ENCRYPT_BLOCK;
        }
        byte[] encryptedData = out.toByteArray();
        out.close();
        //Base64加密
        return encryptBASE64(encryptedData);
    }
    /** *//**
     * <p>
     * 私钥加密
     * </p>
     *
     * @param content 源数据
     * @param privateKey 私钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String encryptByPrivateKey(String content, String privateKey)
            throws Exception {
        byte[] keyBytes = decryptBASE64(privateKey);
        byte[] data = content.getBytes("UTF-8");
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, privateK);
        int inputLen = data.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        // 对数据分段加密
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
                cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(data, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * MAX_ENCRYPT_BLOCK;
        }
        byte[] encryptedData = out.toByteArray();
        out.close();
        //Base64加密
        return encryptBASE64(encryptedData);
    }
    /** *//**
     * <p>
     * 获取私钥
     * </p>
     *
     * @param keyMap 密钥对
     * @return
     * @throws Exception
     */
    public static String getPrivateKey(Map<String, Object> keyMap)
            throws Exception {
        Key key = (Key) keyMap.get(PRIVATE_KEY);
        return encryptBASE64(key.getEncoded());
    }
    /** *//**
     * <p>
     * 获取公钥
     * </p>
     *
     * @param keyMap 密钥对
     * @return
     * @throws Exception
     */
    public static String getPublicKey(Map<String, Object> keyMap)
            throws Exception {
        Key key = (Key) keyMap.get(PUBLIC_KEY);
        return encryptBASE64(key.getEncoded());
    }
    /**
     * BASE64解密
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static byte[] decryptBASE64(String key) throws Exception {
        return Base64.getDecoder().decode(key);
    }
    /**
     * BASE64加密
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static String encryptBASE64(byte[] key) throws Exception {
        return Base64.getEncoder().encodeToString(key);
    }
}

+ 38 - 11
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/PatientMessageService.java

@ -1,20 +1,16 @@
package com.yihu.jw.care.service.message;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.config.AqgConfig;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.device.PatientSafeAreaConfirmDao;
import com.yihu.jw.care.dao.device.PatientSafeAreaDao;
import com.yihu.jw.care.dao.log.BasePatientPadPushOnOffDao;
import com.yihu.jw.care.dao.message.OrgNoticeDao;
import com.yihu.jw.care.dao.message.UserNoticeDao;
import com.yihu.jw.care.dao.security.BaseEmergencyWarnLogDao;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.notice.UserNoticeDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.Device;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.care.device.PatientSafeAreaConfirm;
import com.yihu.jw.entity.care.device.PatientSafeAreaDO;
import com.yihu.jw.entity.care.message.OrgNoticeDO;
import com.yihu.jw.entity.care.securitymonitoring.BaseEmergencyWarnLogDO;
@ -26,15 +22,10 @@ import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -62,6 +53,10 @@ public class PatientMessageService {
    private PatientSafeAreaConfirmDao patientSafeAreaConfirmDao;
    @Autowired
    private PatientDeviceService patientDeviceService;
    @Autowired
    private EmergencyAssistanceService emergencyAssistanceService;
    @Autowired
    private BasePatientPadPushOnOffDao basePatientPadPushOnOffDao;
    public PageEnvelop getNoticeList(String patient,String beginTime, String endTime, int page, int size){
        page = page>0?page-1:0;
@ -150,6 +145,20 @@ public class PatientMessageService {
        return jdbcTemplate.queryForList(sql);
    }
    //获取天气
    public JSONObject envMessage(){
        return emergencyAssistanceService.getBaiduWeather();
    }
    public List<Map<String,Object>> getSystemMessageListPad(String patient,String type){
        String sql = "SELECT id,type,title,sender_name,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') create_time,is_read,data,content,audio_url " +
                " FROM base_system_message WHERE type IN ("+type+") and receiver = '"+patient+"'" +
                " AND del = 1  ORDER BY create_time DESC ";
        return  jdbcTemplate.queryForList(sql);
    }
    public void updateMessageRead(String messageId){
        SystemMessageDO messageDO = systemMessageDao.findOne(messageId);
        messageDO.setIsRead("1");
@ -223,4 +232,22 @@ public class PatientMessageService {
        result.put(ResponseContant.resultMsg,"已确认");
        return result;
    }
    //pad端 获取居民推送开关
    public List<Map<String, Object>> patientPadPushOnOff(String patient){
        String sql = "select patient,type,type_name,on_off from base_patient_pad_pushonoff where patient ='"+patient+"'";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    //pad端 修改居民推送开关
    @Transactional(rollbackFor = Exception.class)
    public void patientPadPushOnOffUpd(String patient, Integer type, Integer onOff) {
        basePatientPadPushOnOffDao.updPushOnOff(patient, type, onOff);
    }
}

+ 50 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/radio/WlyyRadioService.java

@ -0,0 +1,50 @@
package com.yihu.jw.care.service.radio;
import com.yihu.jw.restmodel.web.PageEnvelop;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * @author xyq
 * @create 2022-07-04 13:43
 * @slogan 他化自在,我自逍遥
 */
@Service
public class WlyyRadioService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 分页条件查询收音机列表
     * @param name
     * @param frequency
     * @param page
     * @param pageSize
     * @return
     */
    public PageEnvelop getRadioPage(String name,String frequency,Integer page,Integer pageSize){
        page = page>0?page-1:0;
        String colSql = "SELECT id,name,frequency,introduction,url,sort_num sortNum, " +
                " CAST(DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') as char) createTime,CAST(status as UNSIGNED) status ";
        String sql = " from wlyy_radio " +
                " where status = 1 ";
        if(StringUtils.isNotBlank(name)){
            sql += " and name like '%"+name+"%' ";
        }
        if(StringUtils.isNotBlank(frequency)){
            sql += " and frequency like '%"+frequency+"%' ";
        }
        String orderSql = " order by sort_num desc limit "+page*pageSize+","+pageSize;
        List<Map<String, Object>> list = jdbcTemplate.queryForList(colSql+sql+orderSql);
        String countSql = "SELECT count(*) ";
        Long count = jdbcTemplate.queryForObject(countSql+sql, Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }
}

+ 1 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java

@ -314,6 +314,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            String dingDingBody = orderDO.getPatientName()+"居民存在异常情况,请及时处理,异常内容:"+orderDO.getServeDesc()+"。";
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(), "1", url, "安防紧急预警", body);
            messageUtil.sendDoctorDingdingMessage(doctorDO,null,"text","1",dingDingBody,null,null);
            messageUtil.sendHongLingJinMsg(doctorDO,orderDO,null);
            imUtil.sendMDTSocketMessageToDoctor(doctorDO.getId(), message.toString());
        }
        //pc管理端端推送消息

+ 56 - 15
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java

@ -3,6 +3,7 @@ package com.yihu.jw.care.service.statistics;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.device.BaseHzInterfaceDictDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.message.BaseServiceNewsDao;
import com.yihu.jw.care.dao.security.EmergencyWarnDoctorResponseDao;
@ -10,6 +11,7 @@ import com.yihu.jw.care.service.patient.CarePatientService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.care.util.CommonUtil;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.util.HttpClientUtilCare;
import com.yihu.jw.care.vo.NumVo;
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
@ -36,6 +38,7 @@ 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.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@ -94,6 +97,12 @@ public class StatisticsService {
    private BaseServiceNewsDao baseServiceNewsDao;
    @Autowired
    private EmergencyWarnDoctorResponseDao emergencyWarnDoctorResponseDao;
    @Autowired
    private HttpClientUtilCare httpClientUtil;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private BaseHzInterfaceDictDao baseHzInterfaceDictDao;
    private static final String defalutArea = "330100";
@ -506,10 +515,19 @@ public class StatisticsService {
            }
        }
        String healthEquipmentSql = "SELECT COUNT(1) FROM wlyy_patient_device WHERE del = 0 AND (category_code = 1 OR category_code = 2)";
        Integer healthEquipmentNum = jdbcTemplate.queryForObject(healthEquipmentSql, Integer.class);
        String securityEquipmentSql = "SELECT COUNT(1) FROM wlyy_patient_device WHERE del = 0 AND category_code > 2";
        Integer securityEquipmentNum = jdbcTemplate.queryForObject(securityEquipmentSql, Integer.class);
        Integer healthEquipmentNum = 0;
        Integer securityEquipmentNum = 0;
        String equipmentSql = "SELECT count(DISTINCT device_code) c,device_type FROM wlyy_devices WHERE (device_code IS NOT NULL OR device_code <> '') GROUP BY device_type";
        List<Map<String,Object>> equipmentList = jdbcTemplate.queryForList(equipmentSql);
        for (Map<String,Object> map:equipmentList){
            Integer device_type = Integer.valueOf(map.get("device_type")+"");
            Integer c = Integer.valueOf(map.get("c")+"");
            if(device_type == 0){
                healthEquipmentNum = c;
            }else {
                securityEquipmentNum = c;
            }
        }
        sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
        listtmp = jdbcTemplate.queryForList(sqltmp);
@ -3325,6 +3343,7 @@ public class StatisticsService {
                        " AND r.service_package_id = i.service_package_id  " +
                        " AND r.service_package_id = pack.id  " +
                        " AND i.del = 1  " +
                        " AND p.del = 1  " +
                        " AND sr.`status` = 1  " +
                        " AND CONVERT ( sr.patient USING utf8 ) = p.id  " +
                        " AND r.team_code = t.id  " +
@ -3732,7 +3751,11 @@ public class StatisticsService {
        String totalSql = "";
        String teamCodeSql = "";
        if (StringUtils.isNotBlank(contactStatus))
            contactStatusSql = " AND wd.contact_status = '" + contactStatus + "'";
            if("0".equals(contactStatus)){
                contactStatusSql = " AND ( wd.contact_status = '" + contactStatus + "' or wd.contact_status is null) ";
            }else {
                contactStatusSql = " AND wd.contact_status = '" + contactStatus + "'";
            }
        if (StringUtils.isNotBlank(name)) nameSql = " AND p.name LIKE '%" + name + "%'";
        if (StringUtils.isNotBlank(deviceSn)) deviceSnSql = " AND pd.device_sn = '" + deviceSn + "'";
        if(StringUtils.isNotBlank(teamId)){
@ -3872,7 +3895,7 @@ public class StatisticsService {
        //离线设备数量
        String offLineDeviceSql="select count(distinct pd.device_sn) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                "                 INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                "                where dev.contact_status=0  and pd.device_type = "+type+"  AND pd.user NOT IN ("+testUsqlSql+") group by pd.device_type";
                "                where ( dev.contact_status=0 or dev.contact_status IS NULL )  and pd.device_type = "+type+"  AND pd.user NOT IN ("+testUsqlSql+") group by pd.device_type";
        //设备总数
        String deviceTotalSql = "SELECT count(DISTINCT device_code) FROM wlyy_devices WHERE (device_code IS NOT NULL OR device_code <> '') AND device_type = "+type+"";
@ -3909,22 +3932,37 @@ public class StatisticsService {
                    "                where pd.user NOT IN ("+testUsqlSql+") "+categoryCodeTotalSql;
        }
        //long start=System.currentTimeMillis();
        Integer typeTotal = 0;
        Integer offLineDevice = 0;
        Integer deviceTotal = 0;
        Integer lineDevice = 0;
        List<Integer> total = jdbcTemplate.queryForList(typeTotalSql, Integer.class);
        //long end=System.currentTimeMillis();
        //System.out.println("类型数量运行多少毫秒:" + "=" + (end-start));
        jsonObject.put("typeTotal",total.get(0));
        if(total.size()>0){
            typeTotal = total.get(0);
        }
        jsonObject.put("typeTotal",typeTotal);
        total = jdbcTemplate.queryForList(offLineDeviceSql,Integer.class);
        jsonObject.put("offLineDevice",total.get(0));
        if(total.size()>0){
            offLineDevice = total.get(0);
        }
        jsonObject.put("offLineDevice",offLineDevice);
        total = jdbcTemplate.queryForList(deviceTotalSql,Integer.class);
        jsonObject.put("deviceTotal",total.get(0));
        if(total.size()>0){
            deviceTotal = total.get(0);
        }
        jsonObject.put("deviceTotal",deviceTotal);
        total = jdbcTemplate.queryForList(lineDeviceSql,Integer.class);
        jsonObject.put("lineDevice",total.get(0));
        if(total.size()>0){
            lineDevice = total.get(0);
        }
        jsonObject.put("lineDevice",lineDevice);
        total = jdbcTemplate.queryForList(sevenDayUseSql,Integer.class);
        Float num = 0F;
        if (total.size()>0) {
            Integer deviceCodeTotal = jdbcTemplate.queryForObject(deviceCodeTotalSql,Integer.class);
            num= (float)total.get(0)/(float)deviceCodeTotal;
            if(deviceCodeTotal>0){
                num= (float)total.get(0)/(float)deviceCodeTotal;
            }
        }
        jsonObject.put("sevenDayUse",num*100);
        return jsonObject;
@ -3956,7 +3994,8 @@ public class StatisticsService {
                " base_doctor d WHERE sr.id = r.sign_id AND sr.STATUS = 1 AND sr.patient = '"+patient+"' AND r.service_package_id = i.id AND i.del = 1 AND m.team_code = r.team_code " +
                " AND sr.id = r.sign_id AND m.doctor_code = d.id AND m.del = '1'";
        //助老元
        String dHelpSql = "SELECT DISTINCT ph.doctor,ph.doctor_name as name,d.mobile,d.photo,case WHEN d.openid IS NOT NULL THEN 1 WHEN d.openid <> '' THEN 1 ELSE 0 END AS online FROM base_patient_helper ph INNER JOIN base_doctor d  WHERE ph.patient= '"+patient+"' AND ph.del = 1 GROUP BY ph.id";
        String dHelpSql = "SELECT DISTINCT d.id doctor,d.name,d.mobile,d.photo,case WHEN d.openid IS NOT NULL THEN 1 WHEN d.openid <> '' THEN 1 ELSE 0 END AS online" +
                " FROM base_patient_helper ph INNER JOIN base_doctor d  on ph.doctor=d.id WHERE ph.patient= '"+patient+"' AND ph.del = 1 ";
        List<Map<String, Object>> doctorList = jdbcTemplate.queryForList(doctorSql);
        List<Map<String, Object>> familyList = jdbcTemplate.queryForList(familySql);
        List<Map<String, Object>> helperList = jdbcTemplate.queryForList(dHelpSql);
@ -4001,4 +4040,6 @@ public class StatisticsService {
}

+ 52 - 23
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/WlyygcStatisticsService.java

@ -864,10 +864,20 @@ public class WlyygcStatisticsService {
        List<Integer> integers = jdbcTemplate.queryForList(totalList, Integer.class);
        res.put("oldTotal",integers.get(0));
        //照护老人总数
        String zhTotalList = "SELECT COUNT(id) FROM base_patient where archive_type = 1 AND del = 1 AND id NOT IN(SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE  dict_name = 'jkzl_older'  and dict_code is not null) ";
        //String zhTotalList = "SELECT COUNT(id) FROM base_patient where archive_type = 1 AND del = 1 AND id NOT IN(SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE  dict_name = 'jkzl_older'  and dict_code is not null) ";
        String zhTotalList = " SELECT ((SELECT COUNT(distinct p.id) FROM base_patient p  WHERE p.sign_status = 1 AND p.del = 1 " +
                "              and p.id not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') ) +(SELECT COUNT(distinct p.id) FROM base_patient p INNER JOIN " +
                "              wlyy_patient_device d ON p.id = d.`user` WHERE p.sign_status = 0 AND p.del = 1  AND d.del = 0 " +
                "              and p.id not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child'))) total";
        //设备总数
        String deviceSql ="SELECT COUNT(id) AS total, COUNT(IF(device_type = 0,device_type,NULL)) AS jk,COUNT(IF(device_type = 1,device_type,NULL)) AS af FROM wlyy_devices where 1=1 ";
        //设备总数  随着版本更新修改逻辑
        //String deviceSql ="SELECT COUNT(id) AS total, COUNT(IF(device_type = 0,device_type,NULL)) AS jk,COUNT(IF(device_type = 1,device_type,NULL)) AS af FROM wlyy_devices where 1=1 ";
        String healthEquipmentSql = "SELECT COUNT(1) FROM wlyy_patient_device WHERE del = 0 AND (category_code = 1 OR category_code = 2)";   //健康设备
        Integer healthEquipmentNum = jdbcTemplate.queryForObject(healthEquipmentSql, Integer.class);
        String securityEquipmentSql = "SELECT COUNT(1) FROM wlyy_patient_device WHERE del = 0 AND category_code > 2";   //安防设备
        Integer securityEquipmentNum = jdbcTemplate.queryForObject(securityEquipmentSql, Integer.class);
        //医疗机构
        //养老机构
        //日照中心
@ -875,12 +885,17 @@ public class WlyygcStatisticsService {
        //助老员
        //医护人员
        //社工
        String zlSql = "SELECT COUNT(IF(doctor_level = 1,doctor_level,null)) AS yh,COUNT(IF(doctor_level = 2,doctor_level,null)) AS sg,COUNT(IF(doctor_level = 4,doctor_level,null)) AS zly FROM base_doctor WHERE id NOT IN(SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE (dict_name = 'jkzl_user' or dict_name = 'jkzl_helper') and dict_code is not null) ";
        //String zlSql = "SELECT COUNT(IF(doctor_level = 1,doctor_level,null)) AS yh,COUNT(IF(doctor_level = 2,doctor_level,null)) AS sg,COUNT(IF(doctor_level = 4,doctor_level,null)) AS zly FROM base_doctor WHERE id NOT IN(SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE (dict_name = 'jkzl_user' or dict_name = 'jkzl_helper') and dict_code is not null) ";
        String zlSql = "SELECT COUNT(a.id) total,a.doctor_level " +
                "   from base_doctor a,base_doctor_hospital h where a.id=h.doctor_code and a.del = '1' and h.del = '1'" +
                "   and a.doctor_level is not null and h.org_code not in ( " +
                "   SELECT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' " +
                "   ) GROUP BY a.doctor_level;";
        if (StringUtils.isNotBlank(endDate)) {
            zhTotalList += " and create_time <= '"+endDate+"'";
            orgSql += " and create_time <= '"+endDate+"'";
            zlSql += " and create_time <= '"+endDate+"'";
            //zhTotalList += " and create_time <= '"+endDate+"'";
            //orgSql += " and create_time <= '"+endDate+"'";
            //zlSql += " and create_time <= '"+endDate+"'";
        }
        integers = jdbcTemplate.queryForList(zhTotalList,Integer.class);
@ -888,10 +903,10 @@ public class WlyygcStatisticsService {
        //照护率
        res.put("zh_rate", (Float.parseFloat(res.get("zh_oldTotal").toString()) / Float.parseFloat(res.get("oldTotal").toString()) * 100) + "%");
        List<Map<String, Object>> deviceList = jdbcTemplate.queryForList(deviceSql);
        res.put("deviceTotal",deviceList.get(0).get("total"));
        res.put("deviceJkTotal",deviceList.get(0).get("jk"));
        res.put("deviceAfTotal",deviceList.get(0).get("af"));
        //List<Map<String, Object>> deviceList = jdbcTemplate.queryForList(deviceSql);
        res.put("deviceTotal",healthEquipmentNum+securityEquipmentNum);
        res.put("deviceJkTotal",healthEquipmentNum);
        res.put("deviceAfTotal",securityEquipmentNum);
        List<Map<String, Object>> orgList = jdbcTemplate.queryForList(orgSql);
        res.put("yanglao",orgList.get(0).get("yangl"));
@ -899,9 +914,20 @@ public class WlyygcStatisticsService {
        res.put("rz",orgList.get(0).get("rz"));
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(zlSql);
        res.put("yh",maps.get(0).get("yh"));
        res.put("sg",maps.get(0).get("sg"));
        res.put("zly",maps.get(0).get("zly"));
        for (Map<String, Object> map : maps) {
            switch (Integer.parseInt(map.get("doctor_level").toString())){
                case 1 :
                    res.put("yh",Integer.parseInt(map.get("total").toString()));
                    break;
                case 2 :
                    res.put("sg",Integer.parseInt(map.get("total").toString()));
                    break;
                case 4 :
                    res.put("zly",Integer.parseInt(map.get("total").toString()));
                    break;
            }
        }
        //指标
        JSONArray jsonArray = statisticsService.cloudCareForTheElderly(endDate, defalutArea, defalutLevel);
        res.put("label",jsonArray);
@ -985,15 +1011,18 @@ public class WlyygcStatisticsService {
                    " where sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id and r.service_package_id = pack.id " +
                    " and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8)  = a.id and r.team_code='"+teamId+"' ) "+filter;
            */
            sql = "SELECT count( DISTINCT a.id ) FROM base_patient a LEFT JOIN  base_service_package_record pr ON pr.patient = a.id " +
                    " LEFT JOIN base_service_package_sign_record sr ON sr.id = pr.sign_id " +
                    " WHERE " +
                    " a.archive_type = 1 " +
                    " AND a.del = '1' " +
                    " AND a.sign_status = 1 " +
                    " AND pr.team_code = '"+teamId+"' " +
                    " AND sr.`status` = 1 ";
            count =  jdbcTemplate.queryForObject(sql+filter,Integer.class);
            sql = " select sum(total) from ( " +
                    "SELECT count(distinct a.id) total from base_patient a  WHERE a.archive_type = 1 and a.sign_status=1 and a.del = '1' " +
                    "and EXISTS ( select 1 from " +
                    "base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack  " +
                    "where sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id and r.service_package_id = pack.id  " +
                    "and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8)  = a.id and r.team_code='"+teamId+"') " +filter+
                    " UNION ALL " +
                    "SELECT count(distinct a.id) total from base_patient a where a.archive_type = 1 and a.sign_status=0 and register='1' and a.del = '1' and a.saas_id='"+teamId+"' " +
                    "and EXISTS (select 1 from wlyy_patient_device pd where pd.user = a.id and pd.del=0) " + filter+
                    " )A ";
            count =  jdbcTemplate.queryForObject(sql,Integer.class);
            //count =  jdbcTemplate.queryForObject(sql+filter,Integer.class);
            map.put("oldTotal",count);//照护老人数量
        }
        return  teamList;

+ 53 - 20
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/third/PatientInfoPlatFormService.java

@ -937,12 +937,32 @@ public class PatientInfoPlatFormService {
                    detailInfo.put("warnStatus",false);
                }
                com.alibaba.fastjson.JSONObject tmp = ysDeviceService.getDeviceLiveAddress(patient, deviceSn, 1, null);
                detailInfo.put("monitorInfoStatus", tmp.getIntValue(ResponseContant.resultFlag));
                if (tmp.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                    detailInfo.put("monitorInfo", tmp.getString(ResponseContant.resultMsg));
                } else {
                    detailInfo.put("monitorInfo", tmp.getJSONObject(ResponseContant.resultMsg));
                if(bl){
                    //取之前时间的监控
                    try {
                        //JSONObject tmp = ysDeviceService.deviceVideoTimeList(patient, deviceSn, 1,filterTime.substring(0,10)+" 00:00:01",filterTime.substring(0,10)+" 23:59:59",0, null);
                        JSONObject tmp = ysDeviceService.videoList2(patient,deviceSn,1,null,null,4,null,filterTime.substring(0,10)+" 00:00:01",filterTime.substring(0,10)+" 23:59:59","2",null,null,null);
                        detailInfo.put("monitorInfoStatus", tmp.getIntValue(ResponseContant.resultFlag));
                        if (tmp.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                            detailInfo.put("monitorInfo", tmp.getString(ResponseContant.resultMsg));
                        } else {
                            JSONObject js1 = tmp.getJSONObject(ResponseContant.resultMsg);
                            js1.put("hdAddress",js1.getString("url"));
                            detailInfo.put("monitorInfo",js1);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        detailInfo.put("monitorInfoStatus", 0);
                        detailInfo.put("monitorInfo", "未获取到当天录像信息");
                    }
                }else {
                    com.alibaba.fastjson.JSONObject tmp = ysDeviceService.getDeviceLiveAddress(patient, deviceSn, 1, null);
                    detailInfo.put("monitorInfoStatus", tmp.getIntValue(ResponseContant.resultFlag));
                    if (tmp.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                        detailInfo.put("monitorInfo", tmp.getString(ResponseContant.resultMsg));
                    } else {
                        detailInfo.put("monitorInfo", tmp.getJSONObject(ResponseContant.resultMsg));
                    }
                }
                break;
@ -995,12 +1015,16 @@ public class PatientInfoPlatFormService {
                    detailInfo.put("warnStatus",false);
                }
                //获取最新一次燃气浓度
                sql = " select value, DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') record_time  from base_device_health_index where device_sn='"+deviceSn+"' ORDER BY record_time desc limit 1 ";
                if(bl){
                    sql = " select value, DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') record_time  from base_device_health_index where device_sn='"+deviceSn+"' and record_time >= '"+beforeTime+"' and record_time <= '"+afterTime+"' ORDER BY record_time desc limit 1 ";
                }else {
                    sql = " select value, DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') record_time  from base_device_health_index where device_sn='"+deviceSn+"' ORDER BY record_time desc limit 1 ";
                }
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.putAll(sqlResult.get(0));
                }else {
                    detailInfo.put("value",null);
                    detailInfo.put("value",0);
                    detailInfo.put("record_time",null);
                }
                break;
@ -1017,22 +1041,30 @@ public class PatientInfoPlatFormService {
                    detailInfo.put("warnStatus",false);
                }
                //获取最新一次烟雾浓度
                sql = " select value,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') record_time  from base_device_health_index where device_sn='"+deviceSn+"' ORDER BY record_time desc limit 1 ";
                if(bl){
                    sql = " select value,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') record_time  from base_device_health_index where device_sn='"+deviceSn+"' and record_time >='"+beforeTime+"' and record_time <= '"+afterTime+"'  ORDER BY record_time desc limit 1 ";
                }else {
                    sql = " select value,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') record_time  from base_device_health_index where device_sn='"+deviceSn+"' ORDER BY record_time desc limit 1 ";
                }
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.putAll(sqlResult.get(0));
                }
                else {
                    detailInfo.put("value",null);
                    detailInfo.put("value",0);
                    detailInfo.put("record_time",null);
                }
                sql = " select temperature_value ,record_time as temperature_value_record_time  from base_device_health_index where device_sn='"+deviceSn+"' and temperature_value is not null  ORDER BY record_time desc limit 1 ";
                if(bl){
                    sql = " select temperature_value ,record_time as temperature_value_record_time  from base_device_health_index where device_sn='"+deviceSn+"' and temperature_value is not null and record_time >= '"+beforeTime+"' and record_time<= '"+afterTime+"'  ORDER BY record_time desc limit 1 ";
                }else {
                    sql = " select temperature_value ,record_time as temperature_value_record_time  from base_device_health_index where device_sn='"+deviceSn+"' and temperature_value is not null  ORDER BY record_time desc limit 1 ";
                }
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.putAll(sqlResult.get(0));
                }
                else {
                    detailInfo.put("temperature_value",null);
                    detailInfo.put("temperature_value",0);
                    detailInfo.put("temperature_value_record_time",null);
                }
@ -1137,10 +1169,11 @@ public class PatientInfoPlatFormService {
                }
                break;
            case "20"://电表监测
                sql = " select o.id,p.id patient,p.name,p.idcard,p.residential_area,'22' OrderType,'1' type,o.serve_address,o.serve_desc,  " +
                        " o.status,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_security_monitoring_order o " +
                        " INNER JOIN base_patient p on p.id = o.patient where device_sn='"+deviceSn+"' and o.status=1  ";
                pageSql = bl?" and o.create_time >= '"+beforeTime+"' and o.create_time <= '"+afterTime+"' ORDER BY create_time desc  limit 1 ":" ORDER BY create_time desc limit 1 ";
                sql = " select stat_date statDate,upper_limit upperLimit,lower_limit lowerLimit,home from base_device_electric_record o where o.patient='"+patient+"' ";
//                sql = " select o.id,p.id patient,p.name,p.idcard,p.residential_area,'22' OrderType,'1' type,o.serve_address,o.serve_desc,  " +
//                        " o.status,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_security_monitoring_order o " +
//                        " INNER JOIN base_patient p on p.id = o.patient where device_sn='"+deviceSn+"' and o.status=1  ";
                pageSql = bl?" and o.stat_date >= '"+beforeTime+"' and o.stat_date <= '"+afterTime+"' ORDER BY stat_date desc  limit 1 ":" ORDER BY stat_date desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql+pageSql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
@ -1247,7 +1280,7 @@ public class PatientInfoPlatFormService {
                " INNER JOIN base_patient p ON ord.patient = p.id \n" +
                " AND p.del = 1 \n" +
                " WHERE " +
                " ord.STATUS = 1 "+filter;
                " ord.STATUS = 1  AND NOT EXISTS ( SELECT 1 FROM base_emergency_warn_log log WHERE log.order_id = ord.id ) "+filter;
        String sql2 = " SELECT \n" +
                " '22' AS 'OrderType',\n" +
                " p.archive_type archiveType,\n" +
@ -1269,7 +1302,7 @@ public class PatientInfoPlatFormService {
                " FROM\n" +
                " base_security_monitoring_order ord \n" +
                " INNER JOIN base_patient p ON ord.patient = p.id \n" +
                " where ord.status = 1"+filter;
                " where ord.status = 1  AND NOT EXISTS ( SELECT 1 FROM base_emergency_warn_log log WHERE log.order_id = ord.id ) "+filter;
        String sql = "select * FROM (" +
                " "+sql1+" UNION "+sql2 +
@ -1362,13 +1395,13 @@ public class PatientInfoPlatFormService {
                " base_emergency_assistance_order ord " +
                " INNER JOIN base_patient p ON ord.patient = p.id and p.del=1  \n" +
                " WHERE\n" +
                "  ord.STATUS = 1"+filter;
                "  ord.STATUS = 1  AND NOT EXISTS ( SELECT 1 FROM base_emergency_warn_log log WHERE log.order_id = ord.id ) "+filter;
        //安防监护
        String securitySql = "SELECT count( ord.id ) warningCount \n" +
                " FROM\n" +
                " base_security_monitoring_order ord\n" +
                " INNER JOIN base_patient p ON ord.patient = p.id and p.del=1 \n" +
                " AND ord.STATUS = 1"+filter;
                " AND ord.STATUS = 1  AND NOT EXISTS ( SELECT 1 FROM base_emergency_warn_log log WHERE log.order_id = ord.id ) "+filter;
        String sqlCount = "SELECT\n" +
                " sum( warningCount ) warningCount\n" +
                " FROM\n" +

+ 60 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/video/BaseVideoService.java

@ -0,0 +1,60 @@
package com.yihu.jw.care.service.video;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * @author xyq
 * @create 2022-07-05 9:57
 * @slogan 他化自在,我自逍遥
 */
@Service
public class BaseVideoService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 获取视频栏目列表
     * @return
     */
    public ListEnvelop getVideoGroup(){
        String sql = "SELECT g.id,g.name,g.sort_num sortNum,CAST(g.status as UNSIGNED) status," +
                " CAST(DATE_FORMAT(g.create_time,'%Y-%m-%d %H:%i:%S') as char) createTime,count(v.id) videoTotal " +
                " from base_video_group g left join base_video v on v.type = g.id " +
                " where g.status = 1 GROUP BY g.id order by g.sort_num desc ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return ListEnvelop.getSuccess("查询成功",list);
    }
    /**
     * 分页获取视频列表
     * @param groupId
     * @param page
     * @param pageSize
     * @return
     */
    public PageEnvelop getVideoPageByGroup(Integer groupId,Integer page,Integer pageSize){
        page = page>0?page-1:0;
        String colSql = "SELECT v.id,v.type,v.title,v.url,v.img,CAST(DATE_FORMAT(v.create_time,'%Y-%m-%d %H:%i:%S') as char) createTime, " +
                " v.introduction,v.sort_num sortNum,CAST(v.status as UNSIGNED) status,g.name ";
        String countSql = "select count(v.id) ";
        String sql = " from base_video v " +
                " inner join base_video_group g on v.type = g.id " +
                " where v.status = 1 and g.status = 1 ";
        if(groupId > 0){
            sql += " and v.type = "+groupId+" ";
        }
        Long count = jdbcTemplate.queryForObject(countSql + sql, Long.class);
        sql += " order by v.sort_num desc limit "+page*pageSize+","+pageSize;
        List<Map<String, Object>> list = jdbcTemplate.queryForList(colSql + sql);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }
}

+ 75 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DSLUtils.java

@ -0,0 +1,75 @@
package com.yihu.jw.care.util;
import java.text.SimpleDateFormat;
import java.util.Date;
/**   杭州第三方接口 工具类
 * Data、String、Long三种日期类型之间的相互转换
 * @ClassName: DSLUtils
 * @Description: TODO
 * @author:  yuhl
 * @date: Jul 10, 2017 6:00:45 PM
 */
public class DSLUtils {
	
	// date类型转换为String类型  
    // formatType格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒  
    // data Date类型的时间  
    public static String dateToString(Date data, String formatType) {  
        return new SimpleDateFormat(formatType).format(data);  
    }  
   
    // long类型转换为String类型  
    // currentTime要转换的long类型的时间  
    // formatType要转换的string类型的时间格式  
    public static String longToString(long currentTime, String formatType)  
            throws Exception {  
        Date date = longToDate(currentTime, formatType); // long类型转成Date类型  
        String strTime = dateToString(date, formatType); // date类型转成String  
        return strTime;  
    }  
   
    // string类型转换为date类型  
    // strTime要转换的string类型的时间,formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日  
    // HH时mm分ss秒,  
    // strTime的时间格式必须要与formatType的时间格式相同  
    public static Date stringToDate(String strTime, String formatType)  
            throws Exception {  
        SimpleDateFormat formatter = new SimpleDateFormat(formatType);  
        Date date = null;  
        date = formatter.parse(strTime);  
        return date;  
    }  
   
    // long转换为Date类型  
    // currentTime要转换的long类型的时间  
    // formatType要转换的时间格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒  
    public static Date longToDate(long currentTime, String formatType)  
            throws Exception {  
        Date dateOld = new Date(currentTime); // 根据long类型的毫秒数生命一个date类型的时间  
        String sDateTime = dateToString(dateOld, formatType); // 把date类型的时间转换为string  
        Date date = stringToDate(sDateTime, formatType); // 把String类型转换为Date类型  
        return date;  
    }  
   
    // string类型转换为long类型  
    // strTime要转换的String类型的时间  
    // formatType时间格式  
    // strTime的时间格式和formatType的时间格式必须相同  
    public static long stringToLong(String strTime, String formatType)  
            throws Exception {  
        Date date = stringToDate(strTime, formatType); // String类型转成date类型  
        if (date == null) {  
            return 0;  
        } else {  
            long currentTime = dateToLong(date); // date类型转成long类型  
            return currentTime;  
        }  
    }  
   
    // date类型转换为long类型  
    // date要转换的date类型的时间  
    public static long dateToLong(Date date) {  
        return date.getTime();  
    }  
}

+ 146 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/HongLingJinUtil.java

@ -0,0 +1,146 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.util.common.RSAUtils;
import com.yihu.jw.util.http.HttpClientUtil;
import org.apache.commons.collections.map.HashedMap;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 拱墅区红领巾app对接
 * Created by yeshijie on 2022/7/13.
 */
@Component
public class HongLingJinUtil {
    private static final Logger logger = LoggerFactory.getLogger(HongLingJinUtil.class);
    //ras加密公钥
    private static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOKrXjxrFo4Y2nNqzVh4ZMaxg58p83uSGuSA9Kxjsja+KHvN/72NqyKER2ucPuiYsDUBjFQI9t4LMLS8zl0GlKHKHU+gr8IQ4Cg/JqQLhjpgX4/f3Xk54A/1003TWKn9hSJSlsw3uxgLVTj/pwZoL1W1NSFKSu8jZbgzToNa2GwIDAQAB";
    //第三方平台的用户名
    private static final String username = "ddsqhd";
    @Autowired
    private HttpClientUtil httpClientUtil;
    /**
     * 获取token
     * @return
     */
    public String getToken(){
        try {
            String url = "http://10.18.40.99:7680/sso/token";
//            String url = "https://zhyzh.gongshu.gov.cn/ssotoken";
            JSONObject json = new JSONObject();
            json.put("client_id","client_third");
            json.put("client_secret","a2o8W3nP");
            json.put("username",username);
            String code = RSAUtils.encrypt(json.toString(),publicKey);
            JSONObject response = httpClientUtil.headerPost(url+"?code="+code, null);
            if(response.getInteger("code")==200){
                return  response.getJSONObject("data").getString("access_token");
            }
            logger.info("response:"+response);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
/*    public static void main(String[] args) throws Exception{
        String url = "https://zhyzh.gongshu.gov.cn/zzdcommon";
        JSONObject params = new JSONObject();
        JSONObject eventAssistName = new JSONObject();
        eventAssistName.put("deptName","");
        eventAssistName.put("mobile","");
        eventAssistName.put("realName","");
        JSONObject eventChargeName = new JSONObject();
        eventChargeName.put("deptName","");
        eventChargeName.put("mobile","15545430148");
        eventChargeName.put("realName","李康硕");
        params.put("eventAssistName",eventAssistName);
        params.put("eventChargeName",eventChargeName);
        params.put("eventHappenTime","2022-07-14 17:27:00");
        params.put("eventLocation","测试地址");
        params.put("eventName","测试事件");
        params.put("taskDescription","测试事件1");
        params.put("eventState","1");
        params.put("eventSource","2");
        params.put("taskId","adsf1234as24324");
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer "+"e38c22a7-68d6-46d2-afb3-2adb8250af7e");
        headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
        headers.add("Accept",MediaType.ALL_VALUE);
        System.out.println("params.toJSONString():"+params.toJSONString());
        HttpEntity<String> formEntity = new HttpEntity<String>(params.toJSONString(), headers);
        String ret = restTemplate.postForObject(url, formEntity, String.class);
        System.out.println(ret);
    }*/
    /**
     * 预警消息推送
     */
    public void zzdcommon(String mobile,String name,String eventHappenTime
            ,String eventName,String taskDescription,String eventLocation,String taskId){
        try {
            String url = "http://10.18.40.101:7688/api/zzd/common";
            JSONObject params = new JSONObject();
            JSONObject eventAssistName = new JSONObject();
            eventAssistName.put("deptName","");
            eventAssistName.put("mobile","");
            eventAssistName.put("realName","");
            JSONObject eventChargeName = new JSONObject();
            eventChargeName.put("deptName","");
            eventChargeName.put("mobile", mobile);
            eventChargeName.put("realName", name);
            params.put("eventAssistName",eventAssistName);
            params.put("eventChargeName",eventChargeName);
            params.put("eventHappenTime",eventHappenTime);
            params.put("eventLocation",eventLocation);
            params.put("eventName", eventName);
            params.put("taskDescription", taskDescription);
            params.put("eventState","1");
            params.put("eventSource","2");
            params.put("taskId", taskId);
            RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            headers.add("Authorization", "Bearer "+getToken());
            headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
            headers.add("Accept",MediaType.ALL_VALUE);
            HttpEntity<String> formEntity = new HttpEntity<String>(params.toJSONString(), headers);
            String ret = restTemplate.postForObject(url, formEntity, String.class);
            logger.info("ret:"+ret);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 204 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/HttpToolUtil.java

@ -0,0 +1,204 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSON;
import javax.net.ssl.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
// 杭州第三方接口 工具类
public class HttpToolUtil {
	/**
	 * 发送post请求
	 * @Title HttpToolUtil.java
	 * @auther gaoyang
	 * @Descrption
	 * @DATE Sep 2, 2018 1:26:36 AM
	 * @param urlStr
	 * @param paramMap
	 * @return JSONObject
	 */
	public static com.alibaba.fastjson.JSONObject httpURLConnection_sendPost(String urlStr, Map paramMap) {
		return httpURLConnection_sendPost(urlStr, paramMap, "application/x-www-form-urlencoded");
	}
	/**
	 * 发送post请求
	 * @Title HttpToolUtil.java
	 * @auther gaoyang
	 * @Descrption
	 * @DATE Sep 2, 2018 1:26:36 AM
	 * @param urlStr
	 * @param paramMap
	 * @return JSONObject
	 */
	public static com.alibaba.fastjson.JSONObject httpURLConnection_sendPost(String urlStr, Map paramMap, String ContentType) {
		System.out.println(urlStr);
		com.alibaba.fastjson.JSONObject result = new com.alibaba.fastjson.JSONObject();
		result.put("code", 200);
		result.put("msg", null);
		OutputStream out = null;
		DataOutputStream dataOutputStream = null;
		InputStream in = null;
		ByteArrayOutputStream baos = null;
		try {
			// 开启HTTPS证书信任,否则请求不了HTTPS的接口,编办有个接口是这样
			if (urlStr.startsWith("https")){
				SSLContext sslcontext = SSLContext.getInstance("SSL");
				TrustManager[] tm = {new MyX509TrustManager()};
				sslcontext.init(null, tm, new SecureRandom());
				HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {
					@Override
					public boolean verify(String s, SSLSession sslsession) {
						System.out.println("WARNING: Hostname is not matched for cert.");
						return true;
					}
				};
				HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);
				HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
			}
			URL url = new URL(urlStr);
			URLConnection urlConnection = url.openConnection();
			// 将url 以 open方法返回的urlConnection  连接强转为HttpURLConnection连接  (标识一个url所引用的远程对象连接)
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此时cnnection只是为一个连接对象,待连接中
			// 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)
			connection.setDoOutput(true);
			// 设置连接输入流为true
			connection.setDoInput(true);
			// 设置请求方式为post
			connection.setRequestMethod("POST");
			// post请求缓存设为false
			connection.setUseCaches(false);
			// 设置该HttpURLConnection实例是否自动执行重定向
			connection.setInstanceFollowRedirects(true);
			// 设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)
			// application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据
			connection.setRequestProperty("Content-Type", ContentType);
			// 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)
			connection.connect();
			// 建立输入流,向指向的URL传入参数
			String queryString = "";
			if (paramMap != null) {
				for (Object e : paramMap.entrySet()) {
					Map.Entry<String, Object> entry = (Map.Entry<String, Object>) e;
					queryString += entry.getKey() + "=" + URLEncoder.encode(entry.getValue().toString(), "UTF-8") + "&";
				}
			}
//			System.out.println("httpURLConnection_sendPost参数:" + queryString);
			if (queryString.length() > 0) {
				queryString = queryString.substring(0, queryString.length() - 1);
				out = connection.getOutputStream();
				dataOutputStream = new DataOutputStream(out);
				dataOutputStream.writeBytes(queryString);
//				System.out.println("httpURLConnection_sendPost接收参数:" + connection.getOutputStream());
				dataOutputStream.flush();
				out.flush();
			}
			// 获得响应状态
			int responseCode = connection.getResponseCode();
			baos = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = 0;
			in = connection.getInputStream();
			while ((len = in.read(buffer)) != -1) {
				baos.write(buffer, 0, len);
				baos.flush();
			}
			if (HttpURLConnection.HTTP_OK == responseCode) {
				try {
					result.putAll(JSON.parseObject(baos.toString("UTF-8")));
				} catch (RuntimeException e) {
					result.put("data", baos.toString("UTF-8"));
					result.put("dataCount", 1);
					result.put("msg", "请求成功");
				}
			} else {
				result.put("code", responseCode);
				result.put("msg", "源接口访问异常:" + baos.toString("UTF-8"));
			}
		} catch (Exception e) {
			result.put("code", 500);
			result.put("msg", "源接口访问异常:" + e.getClass() + "->" + e.getMessage());
		} finally {
			if (baos != null) {
				try {
					baos.close();
				} catch (IOException e) {
					result.put("code", 500);
					result.put("msg", "源接口访问异常:" + e.getClass() + "->" + e.getMessage());
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					result.put("code", 500);
					result.put("msg", "源接口访问异常:" + e.getClass() + "->" + e.getMessage());
				}
			}
			if (dataOutputStream != null) {
				try {
					dataOutputStream.close();
				} catch (IOException e) {
					result.put("code", 500);
					result.put("msg", "源接口访问异常:" + e.getClass() + "->" + e.getMessage());
				}
			}
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					result.put("code", 500);
					result.put("msg", "源接口访问异常:" + e.getClass() + "->" + e.getMessage());
				}
			}
		}
//		System.out.println("httpURLConnection_sendPost执行结果:" + result);
		return result;
	}
	/**
	 * 空实现即可
	 * 跳过https的证书验证
	 * @author lilin
	 * @date 2020-12-09
	 */
	static class MyX509TrustManager implements X509TrustManager{
		@Override
		public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
		}
		@Override
		public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
		}
		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return new X509Certificate[0];
		}
	}
}

+ 43 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/MD5Utils.java

@ -0,0 +1,43 @@
package com.yihu.jw.care.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
//杭州第三方接口 工具类
public class MD5Utils {
	
    /**利用MD5进行加密
    *
    * @param plainText
    *            明文
    * @return 32位密文
    */
   public static String encoderByMd5(String plainText) {
       String re_md5 = new String();
       try {
           MessageDigest md = MessageDigest.getInstance("MD5");
           md.update(plainText.getBytes());
           byte b[] = md.digest();
           int i;
           StringBuffer buf = new StringBuffer("");
           for (int offset = 0; offset < b.length; offset++) {
               i = b[offset];
               if (i < 0)
                   i += 256;
               if (i < 16)
                   buf.append("0");
               buf.append(Integer.toHexString(i));
           }
           re_md5 = buf.toString();
       } catch (NoSuchAlgorithmException e) {
           e.printStackTrace();
       }
       return re_md5;
   }
   
}

+ 35 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/MessageUtil.java

@ -8,6 +8,7 @@ import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.entity.care.assistance.EmergencyAssistanceDO;
import com.yihu.jw.entity.care.common.GetuiClientDO;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
@ -19,6 +20,7 @@ import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.push.dao.GetuiClientDao;
import com.yihu.jw.push.service.GetuiService;
import com.yihu.jw.sms.service.TXYSmsService;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.wechat.dao.WxAccessTokenDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
@ -74,6 +76,8 @@ public class MessageUtil {
    private GetuiClientDao getuiClientDao;
    @Autowired
    private DingdingUtil dingdingUtil;
    @Autowired
    private HongLingJinUtil hongLingJinUtil;
    /**
     * 您好{1}有一条新的在线报名申请,请及时前往APP消息应用进行处理。
@ -87,6 +91,7 @@ public class MessageUtil {
        }
    }
    /**
     * 发送医生个推推送消息
     * type 1 安防紧急预警 2紧急呼叫 4im 5生日祝福
@ -149,6 +154,36 @@ public class MessageUtil {
        }
    }
    /**
     * 红领巾消息推送
     */
    public void sendHongLingJinMsg(BaseDoctorDO doctorDO,SecurityMonitoringOrderDO orderDO, EmergencyAssistanceDO assistanceDO){
        try {
            String eventHappenTime;
            String eventName;
            String taskDescription;
            String eventLocation;
            String taskId;
            if(orderDO!=null){
                eventHappenTime = DateUtil.dateToStrFormatLong(orderDO.getCreateTime());
                taskId = orderDO.getId();
                eventName = "安防监控";
                taskDescription = orderDO.getPatientName()+"居民存在异常情况,请及时处理,异常内容:"+orderDO.getServeDesc()+"。";
                eventLocation = orderDO.getServeAddress();
            }else {
                eventHappenTime = DateUtil.dateToStrFormatLong(assistanceDO.getCreateTime());
                taskId = assistanceDO.getId();
                eventName = "紧急救助";
                taskDescription = "您好,"+assistanceDO.getPatientName()+"居民发起紧急呼叫,请及时处理。";
                eventLocation = assistanceDO.getServeAddress();
            }
            hongLingJinUtil.zzdcommon(doctorDO.getMobile(),doctorDO.getName(),eventHappenTime,eventName,taskDescription,eventLocation,taskId);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     *
     * @param wechatId

+ 95 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/SpeechTtsUtil.java

@ -0,0 +1,95 @@
package com.yihu.jw.care.util;
import com.tencent.tts.utils.Ttsutils;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.tts.v20190823.TtsClient;
import com.tencentcloudapi.tts.v20190823.models.TextToVoiceRequest;
import com.tencentcloudapi.tts.v20190823.models.TextToVoiceResponse;
import com.yihu.jw.care.constant.CommonConstant;
import com.yihu.jw.care.dao.voice.BaseWordToVoiceDao;
import com.yihu.jw.entity.care.voice.BaseWordToVoiceDO;
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.stereotype.Component;
import sun.misc.BASE64Decoder;
import java.util.Date;
import java.util.UUID;
/**
 * Created by yeshijie on 2022/7/6.
 */
@Component
public class SpeechTtsUtil {
    private static final Logger logger = LoggerFactory.getLogger(SpeechTtsUtil.class);
    private static String codec = "mp3";
    private static final String appId = "1305960513";
    private static final String secretId = "AKIDwhBPN5WgYAVaO2QXNwEF0UieJhpgGZbN";
    private static final String secretKey = "WliPpdBSXMuBBuNZU8VbQyFG0TfaEbhX";
    @Value("${spring.profiles.active}")
    private String profiles;
    @Autowired
    private BaseWordToVoiceDao wordToVoiceDao;
    /**
     * 腾讯文字合成语音
     * @param text
     * @return
     */
    public String wordToVoice(String text){
        synchronized (text.intern()){
            try{
                if(!"hzprod".equals(profiles)){
                    return CommonConstant.BASEURL + "voice/test.mp3";
                }
                BaseWordToVoiceDO voiceDO = wordToVoiceDao.findByWord(text);
                if(voiceDO!=null){
                    return voiceDO.getVoice();
                }
                String sessionId = UUID.randomUUID().toString().replace("-","");
                Credential cred = new Credential(secretId, secretKey);
                // 实例化一个http选项,可选的,没有特殊需求可以跳过
                HttpProfile httpProfile = new HttpProfile();
                httpProfile.setEndpoint(CommonConstant.TXVOICEBASEURL);
                // 实例化一个client选项,可选的,没有特殊需求可以跳过
                ClientProfile clientProfile = new ClientProfile();
                clientProfile.setHttpProfile(httpProfile);
                // 实例化要请求产品的client对象,clientProfile是可选的
                TtsClient client = new TtsClient(cred, "ap-shanghai", clientProfile);
                // 实例化一个请求对象,每个接口都会对应一个request对象
                TextToVoiceRequest req = new TextToVoiceRequest();
                req.setText(text);
                req.setSessionId(sessionId);
                req.setVoiceType(1009L);
                req.setSpeed(-1f);
                req.setVolume(10F);
                req.setCodec(codec);
                // 返回的resp是一个TextToVoiceResponse的实例,与请求对象对应
                TextToVoiceResponse resp = client.TextToVoice(req);
                // 输出json格式的字符串回包
                // logger.info(TextToVoiceResponse.toJsonString(resp));
                byte[] buffer = new BASE64Decoder().decodeBuffer(resp.getAudio());
                Ttsutils.saveResponseToFile(buffer,CommonConstant.TXVOICEPATH + sessionId+".mp3");
                String voice = CommonConstant.BASEURL + "voice/"+sessionId+".mp3";
                voiceDO = new BaseWordToVoiceDO();
                voiceDO.setWord(text);
                voiceDO.setCreateTime(new Date());
                voiceDO.setVoice(voice);
                wordToVoiceDao.save(voiceDO);
                logger.info("ending.....");
                return voice;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "";
        }
    }
}

+ 0 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/WeatherUtil.java


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä